您好,我的部分代码出现问题。即使我的老师也帮不了我,我不知道还能去哪儿。当我的foreach循环被激活并且密码和用户名与硬编码字符串相同时,它仍然会重定向到loginerror.php。当我删除标题(“Location:loginerror.php”)时,它运行正常。为什么我的代码的最后一行仍然被激活,何时它应该加载一个新页面?
<?php session_start(); ?>
<html>
<header></header>
<body>
<form action="login.php" Method="post">
Username: <input type="text" name="Username"> </br></br>
Password: <input type="password" name="Password"> </br></br>
<input type="submit" value="Login"></br></br>
</form>
<?php
$username=$_POST["Username"];
$password=$_POST["Password"];
if($username == NULL){print("Enter a Username please");}
else {
$users= array
(
"Bourne"=>"postcode",
"Unidan"=>"pincode",
"yoda"=>"sith"
);
foreach($users as $user=>$password_value)
{
if(($user==$username)&&($password_value==$password))
{
$_SESSION['login?']=1;
header("Location: calculation.php");
}}
$_SESSION['login?']=0;
header("Location: loginerror.php");
}
?>
</body>
</html>
答案 0 :(得分:0)
exit
所以重定向后没有执行其他代码:
header("Location: calculation.php");
exit;
答案 1 :(得分:0)
根据PHP文档:
请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用 header()。使用include或require,函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用 header()之前输出空格或空行。
将您的PHP代码移动到文件的顶部,它应该可以解决您的问题:
<?php
session_start();
$username=$_POST["Username"];
$password=$_POST["Password"];
if ($username == NULL) {
print("Enter a Username please");
} else {
$users= array("Bourne"=>"postcode", "Unidan"=>"pincode", "yoda"=>"sith");
foreach($users as $user=>$password_value) {
if(($user==$username)&&($password_value==$password)) {
$_SESSION['login?']=1;
header("Location: calculation.php");
// Add this to terminate the script immediately and redirect.
exit();
}
}
$_SESSION['login?']=0;
header("Location: loginerror.php");
// Add this to terminate the script immediately and redirect.
exit();
}
?>
<html>
<header></header>
<body>
<form action="login.php" Method="post">
Username: <input type="text" name="Username"> </br></br>
Password: <input type="password" name="Password"> </br></br>
<input type="submit" value="Login"></br></br>
</form>
</body>
</html>
标题必须在任何输出之前发送, 包括 HTML输出。
答案 2 :(得分:0)
将代码结构更改为此类内容可能对您有所帮助。
注意:这不是代码更正。
<?php
session_start();
$username=$_POST["Username"];
$password=$_POST["Password"];
if($username == NULL){
print("Enter a Username please");
}
else {
$users= array
(
"Bourne"=>"postcode",
"Unidan"=>"pincode",
"yoda"=>"sith"
);
foreach($users as $user=>$password_value)
{
if(($user==$username)&&($password_value==$password))
{
$_SESSION['login?']=1;
header("Location: calculation.php");
exit;
}
}
$_SESSION['login?']=0;
header("Location: loginerror.php");
exit;
}
?>
<html>
<header></header>
<body>
<form action="login.php" Method="post">
Username: <input type="text" name="Username"> </br></br>
Password: <input type="password" name="Password"> </br></br>
<input type="submit" value="Login"></br></br>
</form>
</body>
</html>
答案 3 :(得分:0)
您可以将代码包装在if / else $ _POST中,并在条件满足后在foreach中中断操作。