【问题标题】:My header() call is not redirecting to new page我的 header() 调用未重定向到新页面
【发布时间】:2011-08-16 04:15:27
【问题描述】:

我在使用标头方法重定向页面时遇到问题。我想我知道问题是什么。但我对 PHP 场景很陌生,所以我不知道还能尝试什么。从我读过的内容来看,如果页面已经在标题之前发送了数据,则不会触发 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 -->

【问题讨论】:

  • 开启error_reporting(E_ALL)。这会让你犯下的所有错误
  • 对!由于您是 PHP 新手,因此在开发过程中始终保持打开错误报告。对你有很大帮助。
  • @rabudde 这是我应该在我工作的每个 php 页面中添加的内容吗?我需要更改ini文件吗?知道任何好的文学作品吗? Php.net 有一个手册,但它有点吓人。谢谢你们的提示!
  • 我不知道有什么好的文献。我都是边做边学的。开启 error_reporting 只对开发有好处,对生产没有好处,但这有助于我经常发现故障。

标签: php html redirect header


【解决方案1】:

如果您调用header(),那么它应该被调用BEFORE 任何其他将输出打印到HTML 流的函数,或者在该文件中的任何HTML 语句之前。在header() 调用之前,您甚至不能发送换行符。

在您的情况下,首先您将&lt;div id= "sidebar" &gt; 和其他7 行发送到客户端,然后只有您调用header() 函数。这就是错误发生在您身上的原因。

原因:

header() 调用旨在将 HTTP 标头信息传递给客户端浏览器。标头信息应该是发送给客户端的first信息。如果您没有在 PHP 脚本中调用 header(),PHP 将在发送 PHP 文件的第一行之前自动发送标头信息。

一旦发送了一个标头,就不能在同一个 PHP 文件中发送另一个标头。因此,如果您想独占发送标头,请在任何其他正文内容开始之前发送它。

【讨论】:

  • 感谢您的详细回复!如果标题取决于变量中的信息,我不明白如何将标题放在页面顶部。我可以制作一个单独的页面,但我喜欢在我的登录字段周围显示错误消息。我尝试按照您的建议移动所有内容,但 echo 语句仍在其上方。
  • 使用header()函数重定向时,流程如下: 第一步:FIRST OF ALL检查用户是否需要重定向。如果是,则使用header() 进行重定向。第 2 步:启动页面内容和其他脚本。在您的情况下,您可以FIRST 启动 PHP 代码(其中包含header() 调用),然后之后* 您可以编写您的&lt;div id= "sidebar"&gt; 代码。 重要提示 - 确保在调用 header() 之前没有在输出流中回显任何内容。因此,在您的代码中非常重要要做的事情是处理标题语句。
【解决方案2】:

是的,那是你的问题。

最好的解决方案是在将任何内容输出到浏览器之前执行代码。除此之外,将ob_start(); 添加到脚本顶部将缓冲您的输出,即使在您打印/回显文本之后,也允许header(); 调用工作。

【讨论】:

  • 感谢您的建议!但是,我将该函数添加到 php 块内部和 php 块外部的顶部。没啥事儿。这是一个 wordpress 网站,所以它是分块的。这会是个问题吗?例如。我正在将此代码添加到我的 sidebar.php,而实际上我正在登录我的 index.php 页面。
【解决方案3】:

通过使用php代码:

header('page url');

使用标头可能会在上传到服务器时出现问题。

通过使用javascript:

window.location='page url';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多