php - 我的 header() 调用没有重定向到新页面

标签 php html redirect header

我在使用 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>&nbsp;</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/

相关文章:

javascript - jQuery "hover state"- 测试元素是否不再悬停在其上

javascript - 浏览器没有重定向,但 url 正在改变

javascript jquery 选择单选按钮

JavaScript DOM style.backgroundColor 无法正常工作

javascript - 使用 AJAX XMLHttpRequest 填充 DataTable 的主体

javascript - 使用 Javascript/jQuery 插入带有类的 HTML

powershell - Powershell将stderr和stdout重定向到两个不同的位置

c# - 如何最好地在 C# ASP.Net 中加扰或隐藏获取查询字符串值?

php http GET命令不起作用

php - 如何输出不同级别的数组