我在将此代码用于即将推出的网站上时遇到问题。特别是当我登录时,成功登录后不会重定向。我以前使用过这段代码很多次,而且我从未遇到过这方面的问题。现在唯一的区别是我使用的是不同的服务器和不同的数据库。这是给我带来麻烦的代码:
<?php
/*set all the variables*/
$email = $_POST['email'];
$password = sha1($_POST['password']); /* hash the password*/
$conn = mysqli_connect ('servername', 'username', 'password', 'databasename') or die('Error connecting to MySQL server');
/*select the id from the users table that match the conditions*/
$sql = "SELECT id FROM users WHERE email = '$email' AND password = '$password'";
$result = mysqli_query($conn, $sql) or die('Error querying database.');
$count = mysqli_num_rows($result);
if ($count == 1) {
echo 'Logged in Successfully.';
$row = mysqli_fetch_array($result);
session_start();
$_SESSION['user_id'] = $row['id'];
/*If true head over to the users table*/
header('location: users_table.php');
}
/*If invalid prompt them to adjust the previous entry*/
else {
echo '<h2>Invalid Login</h2><br />';
echo '<h2>Click <a href="javascript:history.go(-1)">HERE</a> to go back and adjust your entry.</h2>';
}
mysqli_close($conn);
?>
这不是它正确连接的问题,因为我收到消息'成功登录'但它根本不会重定向。
感谢所有答案,我尝试删除回声,但我现在得到的只是一个空白页面,我想也许这是我使用的浏览器所以我切换到另一个,我仍然只是得到一个空白页,任何其他建议?
答案 0 :(得分:5)
在header
声明之前,您无法回复任何内容。
echo 'Logged in Successfully.';
这导致header
调用无效。
答案 1 :(得分:1)
if ($count == 1) {
echo 'Logged in Successfully.';
//this statement is creating problem
$row = mysqli_fetch_array($result);
session_start();
$_SESSION['user_id'] = $row['id'];
/*If true head over to the users table*/
header('location: users_table.php');
}
这是因为你正在回应berfore标题
您应该在开始时使用ob_start()
,在文档末尾使用ob_end_flush()
..
或在header()
之前不回声。我们发现你没有打开错误。所以打开它。
答案 2 :(得分:1)
您不能在header
之后发布echo
...如果这实际上有效,您将永远不会看到该文本(它只会重定向)。 (要修复删除/注释掉echo
行)
此外location标头需要绝对/完整网址(尽管许多浏览器似乎都在处理相对网址)。
如果你想这样做(事先显示某种状态),请使用几秒后触发的HTML或Javascript重定向。
<强> HTML 强>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Logged in Successfully.</title>
<meta http-equiv="REFRESH"
content="5;url=http://www.example.com/users_table.php"></HEAD>
<BODY>
Logged in Successfully.
</BODY>
</HTML>
<强>的Javascript 强>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>Logged in Successfully.</title>
</HEAD>
<BODY onLoad="setTimeout(function() {
window.location='http://www.example.com/users_table.php'},5000)">
Logged in Successfully.
</BODY>
</HTML>
更好的是,允许users_table.php
页面显示成功的登录消息并使用标头位置重定向。