header()不会自动重定向到另一个索引页面

时间:2016-01-06 10:55:11

标签: php

当我点击登录时..它不会自动将我重定向到home.php,我必须刷新页面才能重定向我。我猜第一个header()工作正常bc它响应页面刷新。什么不起作用的是if语句中的第二个header()。我究竟做错了什么?非常感谢你的帮助。

的login.php

<?php
session_start();
if($_SESSION['user']!=""){
  header("Location: home.php");
}

include_once 'db.php';

if(isset($_POST['login'])){
 $uname = mysqli_real_escape_string($conn, $_POST['uname']);
 $upass = mysqli_real_escape_string($conn, $_POST['upass']);

 $sql = "SELECT * FROM users WHERE username='$uname'";
 $result = $conn->query($sql);
 $row = $result->fetch_assoc();

 if($row['password']==$upass){
  $_SESSION['user'] = $row['username'];
  header("Location: home.php");
}
else{
  echo "Unable to log in, please try again.";
}

}

?>

<html>
<head>
  <meta charset="utf-8">
</head>
<body>
    <form method="post">
      <input type="text" name="uname" placeholder="User Name" required /><br>
      <input type="text" name="upass" placeholder="Password" required /><br>
      <button type="submit" name="login">login</button>

    </form>
</body>
</html>

home.php

<?php
session_start();
if(isset($_POST['logout']))
{
 session_destroy();
 unset($_SESSION['user']);

 header("Location: index.php"); 
}
?>
    Welcome <?php echo $_SESSION['user'];?>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
        <form method="post">
        <button type="submit" name="logout">Sign Out</button>
    </form>
</body>

db.php中

<?php
$conn = new mysqli();
$conn->connect('localhost', 'singta', 'Lante1', 'wuzzdb');

if ($conn->connect_errno) { echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $mysqli->connect_error; } 
?>

的index.php

<?php
session_start();
if($_SESSION['user']!=""){
  header("Location: home.php");
}else{
    echo "You're not logged In";
}
?>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
<br><br><br>
    <a href="login.php">Login Here</a>
</body>

1 个答案:

答案 0 :(得分:4)

header()函数调用向浏览器发送一个标题,告诉它去哪里,但它不会停止执行PHP脚本。因此,在用于重定向的header()调用之后,几乎在所有情况下都应该在exit;之后直接添加{。}}。

<?php
session_start();
if($_SESSION['user']!=""){
  header("Location: home.php");
  exit;
}

同样在第二次header()来电时。

附加说明

在尝试像这样测试之前,您还应检查$_SESSION['user']是否存在

session_start();

if( isset($_SESSION['user']) && $_SESSION['user']!=""){
  header("Location: home.php");
  exit;
}

这需要在您测试会话中的user时进行,就像他们没有登录一样,它实际上并不存在。

这是在LIVE服务器上学习PHP的问题之一,其中关闭错误显示。因此,在您学习甚至之后,在实时服务器上开发脚本时,请记住将这两行添加到您正在开发的脚本的顶部

<?php
    error_reporting(E_ALL); 
    ini_set('display_errors', 1);

但是请记得删除当脚本作为其错误形式工作时向用户显示此类错误。