Php 标题(“位置”)有问题

Php 标题(“位置”)有问题,php,Php,重定向并不总是适用于我,在我的情况下,我没有找到解决方案,所以我使用javascript代码进行了重定向,有人能告诉我我的代码有什么问题,以及为什么echo也不起作用, 当密码或登录不正确时,我想要回显消息给用户,谢谢 function getlogin($conn) { if (isset($_POST['loginsubmit'])) { $uid = mysqli_real_escape_string($conn, $_POST['uid']); $

重定向并不总是适用于我,在我的情况下,我没有找到解决方案,所以我使用javascript代码进行了重定向,有人能告诉我我的代码有什么问题,以及为什么echo也不起作用, 当密码或登录不正确时,我想要回显消息给用户,谢谢

function getlogin($conn) {
    if (isset($_POST['loginsubmit'])) {
        $uid = mysqli_real_escape_string($conn, $_POST['uid']);
        $pwd = mysqli_real_escape_string($conn, $_POST['pwd']);

        $sql = "SELECT * from test where uid='$uid'";
        $result = $conn->query($sql);
        $row = $result->fetch_assoc();
        $hash_pwd = $row['pwd'];
        $hash = password_verify($pwd, $hash_pwd);

        if($hash == 0) {

            header("Location : test.php?error=empty");
        }



          else {

        $stmt = $conn->prepare("select * FROM test WHERE uid=? and pwd =?");
        $stmt->bind_param("ss", $username, $password); 

        $username = $uid;
        $password = $hash_pwd; 
        $stmt->execute();

        $result = $stmt->get_result();
        $rowNum = $result->num_rows;


        if ($rowNum > 0) {
            if ($row = $result->fetch_assoc()) {
                 $_SESSION['id']  = $row['id'];
                 echo "<script> window.location.replace('test.php') 
   </script>" ;
                 exit();
          }
              }else {
                  header("Location : test.php");
                  echo " echo don't work "; 
                 exit();


              }
         }
    }
    }

不要建议在页面开始后使用header函数。在Javascript中使用这段代码可以很好地工作,并且不会产生恼人的错误。

在大多数情况下,页眉重定向不起作用的原因是页面在调用页眉之前打印了一些内容。它可以像一个空行一样简单,也可以像启动页面的html标记一样简单。您应该检查sql是否没有返回错误,因为如果在头之前有错误消息,它将导致警告并阻止重定向。在某些系统中,它被设置为无论如何都可以容忍警告和重定向,因此它可能在本地工作,尽管存在错误,但当您将其置于更严格的环境中时,它会导致错误。您应该暂时注释掉重定向,并在页面停止时查看页面上的内容,而不是重定向。如果有错误消息,很容易找到问题所在。如果有一条空线,可能更难找到。我也不确定在:after标题前加空格是否合适。我从来没有这样做过。您的测试表是否同时具有id和uid这两个独立的东西?其中uid是用户id,id是会话id?因为如果你不这样做,那可能是一个打字错误


此外,您不能在重定向后放置回显,因为在执行回显之前,您会被重定向到另一个页面。因此,您应该重定向到一个页面,指出您的登录不正确,而不是在函数中添加echo。如果您不希望页面总是打印该消息,请在重定向中添加类似于?error=1的内容,然后让页面仅在设置了error且为1时打印消息。

可能重复此操作,echo'window.location=test.php?error=empty';我不明白你的答案。
<script type="text/javascript">window.location.href = 'link here';</script>