我在使用 header 方法重定向我的页面时遇到问题。我想我知道问题出在哪里。但我对 PHP 领域还很陌生,所以我不知道还能尝试什么。根据我的阅读,如果页面已经在标题之前发送了数据,则 header() 方法将不会触发。我觉得这可能是我的问题的一部分,因为我的头函数之前有几个 echo 语句。会不会是别的东西?我该如何解决这个问题?
回显语句证明找到了正确的用户名和密码。我在 header 所在的位置放置了一个测试 echo 语句,它工作得很好。所以,我知道数据库正在寻找正确的信息。插入信息时页面会刷新。感谢您的关注。
<div id= "sidebar" >
<div id="login-box">
<form name="client-login" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<label id="user-lbl">Username:</label><br /><input type="text"
name="username" id="username" /><br /> <label id="pass-lbl">Password:</label><br /><input
type="password" name="password" id="password" /><br /> <label> </label><input
type="submit" value="Login" class="submit" id="login" />
</form>
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if((!isset($username)) || (!isset($password))){
echo "<p>Username is $username. Password is $password.</p>";
}else{
$mysql = mysql_connect("myhost", "username", "password");
if(!$mysql){
echo "<p>Cannot connect to database!</p>";}
$selected = mysql_select_db("mydb", $mysql);
if(!$selected){
echo "<p>Cannot find database!</p>";}
$query = sprintf("SELECT count(*) FROM users WHERE username = '%s' AND password = '%s'", mysql_real_escape_string($username),mysql_real_escape_string($password));
$result = mysql_query($query, $mysql );
if(!$result){
echo "<p>Cannot run query.</p>";}
$row = mysql_fetch_row($result);
$count = $row[0];
if ($count > 0){
header("Location: account.php"); die();} else {echo "<p>Invalid username or password!</p>";}
}
?>
</div><!-- #login-box -->
最佳答案
如果您调用 header()
,那么它应该被调用 BEFORE 任何其他将输出打印到 HTML 流的函数,或者在该文件中的任何 HTML 语句之前。您不能在 header()
之前发送换行符打电话。
在您的案例中,首先您要发送 <div id= "sidebar" >
和其他 7 行到客户端,然后只有你在调用 header()
功能。这就是错误发生在你身上的原因。
原因:
header()
call 的目的是将 HTTP header 信息传递给客户端浏览器。头信息应该是发送给客户端的第一个信息。如果您不调用 header()
在您的 PHP 脚本中,PHP 会在发送 PHP 文件的第一行之前自动发送 header 信息。
发送 header 后,您不能在同一个 PHP 文件中发送另一个 header 。因此,如果您想专门发送一个 header ,请在任何其他正文内容开始之前发送它。
关于php - 我的 header() 调用没有重定向到新页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073576/