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