2

我在让此代码在我想很快推出的网站上运行时遇到问题。特别是当我登录时,成功登录后标题不会重定向。我以前多次使用过这段代码,我从来没有遇到过问题。现在唯一的区别是我使用的是不同的服务器和不同的数据库。这是给我带来麻烦的代码:

<?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);

?>

正确连接不是问题,因为我收到“成功登录”消息,但它根本不会重定向。


感谢所有的答案,我尝试删除回声,但我现在得到的只是一个空白页,我想可能是我使用的浏览器所以我切换到另一个,我仍然只是得到一个空白页,还有其他建议吗?

4

3 回答 3

5

你不能在你的header陈述之前附和任何东西。

echo 'Logged in Successfully.';

这导致header调用不起作用。

于 2012-10-12T14:34:27.833 回答
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');


}

这是因为您在标题前回显某些内容您应该在文档ob_start()的开头和ob_end_flush()结尾使用..

或者不要在之前回header()显。因为我们发现你没有打开错误。所以打开它。

于 2012-10-12T14:34:27.930 回答
1

您不能header在...之后发布echo...如果这确实有效,您将永远不会看到文本(它只会重定向)。(修复删除/注释掉该echo行)

此外,位置标头需要一个绝对/完整 URL(尽管许多浏览器似乎可以处理相对 URL)。

如果您想这样做(事先显示某种状态),请使用几秒钟后触发的 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页面显示成功的登录消息并使用标头位置重定向。

于 2012-10-12T14:36:47.917 回答