为什么这不起作用?我使用了一个教程来做到这一点。
// FETCH DATA FROM INPUT FIELD
$user = mysqli_real_escape_string($db2, $_POST['user']);
$pass = mysqli_real_escape_string($db2, $_POST['pass']);
// CHECK ALL FIELD HAS BEEN FILLED UP
if ($user && $pass) {
// QUERY FROM DATABASE
$query= mysqli_query($db2, "SELECT * FROM members WHERE username='".$user."'");
$checkuser= mysqli_num_rows($query);
// CHECK IF USERNAME EXIST ON DATABASE
if($checkuser != 1) {
// I'LL BE SETTING A VARIABLE IF YOUR DOESN'T EXIST
$error = "Username doesn't exist in our database!";
}
// FETCHING PASSWORD IN DATABASE WHERE USERNAME COINCIDES
while ($row = mysqli_fetch_array($user)) {
$checkpass= $row['password'];
// CHECK IF ENTERED PASSWORD MEETS THE USERNAME PASSWORD
if ($pass== $checkpass) {
// IF ALL OKAY SET SESSION
setcookie("user", $user, time()+7200);
$_SESSION['user'] = $user;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location: ".$_SERVER['PHP_SELF']);
exit();
} else {
// SET VARIABLE THAT'LL SHOW IF USER PASSWORD IS INCORRECT
$error = "Incorrect password!";
}
}
} else {
// SET VARIABLE IF ALL FIELD ARE NOT FILLED UP
$error = "Please enter a username and password.";
}
}
?>
替换
while ($row = mysqli_fetch_array($user))
跟
while ($row = mysqli_fetch_array($query))
你得到标题错误,因为这段代码
setcookie("user", $user, time()+7200);
$_SESSION['user'] = $user;
$_SESSION['start'] = time();
$_SESSION['expire'] = $_SESSION['start'] + (60 * 60 * 60);
header("Location: ".$_SERVER['PHP_SELF']);
应位于任何输出之前
作为一般的经验法则,当你想使用 header(...) 时,你必须确保 PHP 还没有开始输出任何东西。
这意味着:没有回声,print_r,var_dump...但也要记住,PHP 文件输出所有不在 .所以在最后。我说的是实际标题之前可能包含的所有文件(...
似乎您在登录的第 11 行输出了一些东西.php:11