假设正在发布一个有效的登录信息,我的代码在setcookie函数之前就已经有了一些问题。这是我的代码。
<?php
echo 'v1.3.4';
require_once '../ssi/mysql.php';
if(isset($_POST['action'])){
$username = $_POST['username'];
$password = md5($_POST['password']);
$check = mysqli_query($con, "SELECT * FROM admins WHERE username = '$username' AND password = '$password' LIMIT 1");
$checknm = mysqli_num_rows($check);
if($checknm == 1){
while($info = mysqli_fetch_array($check)){
$keypair = $info['keypair'];
setcookie("f2admin", $keypair, time()+3600);
header('Location: index.php');
exit;
}
}else{
$err = "Invalid Username or Password. Please try again.";
}
}
?>
答案 0 :(得分:2)
在使用echo
header
任何内容
if($checknm == 1){
while($info = mysqli_fetch_array($check)){
$keypair = $info['keypair'];
//echo 'Keypair: '.$keypair;
setcookie("f2admin", $keypair, time()+3600);
header('Location: index.php');
echo 'YES ';
exit;
echo 'NO ';
}
}
答案 1 :(得分:1)
好吧,我注意到了几件事。
header()
设置在echo 'YES';
之上,这意味着页面将在输出内容之前重定向(回显)。
exit;
设置在echo 'NO';
之上,这意味着该页面会在到达echo 'No';
之前退出。
header()
上方有一个回音集,导致header()重定向无效。
在旁注中,如果您尝试停止while循环,则该函数应为break;
而不是exit;
更新
我已经在我的本地环境中正常工作了。我发现了几件事。
1)表格中没有设置动作(不确定是否需要)。
2)永远不会回显$ err(因此是空白页面),但代码本身确实有效。
3)mysqli_fetch_array循环是多余的,因为你强制mysql将LIMIT结果变为1。
$info = mysqli_fetch_array($check);
$keypair = $info['keypair'];
setcookie("f2admin", $keypair, time()+3600);
header('Location: index.php');
exit;
答案 2 :(得分:0)
在使用header
执行任何操作之前,您的代码无法输出任何内容。输出必须在标题信息之后。