为什么我的php重定向不起作用?

时间:2010-08-04 05:05:17

标签: php mysql

我正在写一个登录脚本。我的db.php没有回显/打印任何东西,所以为什么不是标题(“Location:index.php”);成功登录后重定向?登录信息是正确的。我知道我需要对输入进行消毒,但目前这不是问题。

 <?php
        require('db.php');
        $username = $_POST['un'];
        $password = $_POST['pw'];
        $qry="SELECT uid FROM users WHERE name='$username' AND pass='".md5($password)."'";
        $result=mysql_query($qry);
        if(mysql_num_rows($result) == 1){
            session_regenerate_id();
            $user = mysql_fetch_assoc($result);
            $_SESSION['S_UID'] = $user['uid'];
            session_write_close();
            header("Location: index.php");
            exit();
        }else{
            echo "<center><form action='index.php' name='login'>Login failed! Please try again with correct username and password.<br><input type='submit' name='failed' value='Return to Login'></form></center>";
            exit();
        }
    ?>

3 个答案:

答案 0 :(得分:2)

只有在调用函数之前脚本没有发送输出时,函数头才有效。检查上面的代码是否有回应。

如果没有,请检查上面的包含文件在结束“?&gt;”后没有多余的空格或换行符标签。否则,此空格或换行符将在标题之前发送到浏览器。

答案 1 :(得分:0)

您确定脚本(或db.php)中的任何位置都没有生成输出吗?甚至没有几个无关的空间?

答案 2 :(得分:0)

尝试使用完整的网址,例如:

header("Location: http://www.mysite.com/index.php");

有些浏览器(感谢IE)不理解带有未完成URI的301重定向代码。

PHP中的此标头位置行为是一个很好的工具,但很容易在不正确的情况下实现...为此我会考虑使用require()而不是header(location)

像:

if (!imLoggedIn()){
  require('loginForm.php');
  exit;
}