这是我检查访问权限的代码。
$query = "SELECT user_table.status, expire FROM user_table WHERE username = ?";
if($stmt = $mysqli->prepare($query)){
$username = phpCAS::getAttribute('uid');
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->store_result();
$returned_amount = $stmt->num_rows;
if($returned_amount>1)
die("To many user names exists for you!");
else if(empty($returned_amount))
header("Location: /101/index.php?type=nouser");
$stmt->bind_result($status, $expire);
$stmt->fetch();
$stmt->free_result();
$stmt->close();
if($expire != '0000-00-00 00:00:00' && strtotime($expire) <= time())
header('Location: /101/index.php?type=expired');
$access = $status;
}else die("Failed to prepare!");
?>
但是$returned_amount == 0
。
它没有点击header("Location: /101/index.php?type=nouser");
如果我将代码更改为以下内容,则可以解决问题,但我不明白为什么更改代码会有所帮助。
if($returned_amount>1)
die("To many user names exists for you!");
else if(empty($returned_amount)){
header("Location: /101/index.php?type=nouser");
exit();
}
如果删除exit();
,则不会执行标题。
答案 0 :(得分:9)
仅使用header()
而不是意味着代码停止执行。每当使用header()
重定向时,您需要显式调用exit()
以停止执行脚本。
答案 1 :(得分:1)
确保页面中没有空格或任何其他字符输出。 Header()不会起作用。添加exit()可以阻止这种情况发生。尝试删除?&gt;在脚本的最后(它仍然可以在没有封闭括号的情况下工作)。但是,最好在运行标题(“Location:...”)后退出脚本,因为它会删除此问题,而这是您打算要执行的操作(退出此页面并转到另一页)