PHP登录系统重定向无法正常工作

时间:2016-09-15 21:49:36

标签: php mysql

我已经创建了一个登录/注册系统,注册部分工作正常。但是,现在我正在尝试登录,当您登录时,它应该启动会话并将您重定向到account.php页面,但它没有这样做。它只是刷新页面而不做任何其他事情。

索引页:

<?php
include 'dbh.php';
session_start();
if(isset($_SESSION['id'])){
    $result = $conn->query("SELECT * FROM users where id=".$_SESSION['id']);
    $row = $result->fetch_array(MYSQLI_BOTH);
}
# REGISTRATION HANDLER
if(isset($_POST['rsubmit'])){
    $username = $_POST['username'];
    $email = $_POST['email'];
    $plainpass = $_POST['password'];
    $password = password_hash($plainpass, PASSWORD_BCRYPT, array('cost' => 10));
    $sql = "INSERT INTO users (username, email, password) VALUES ('$username', '$email', '$password')";
    $result = mysqli_query($conn, $sql);
    $btn = "Account created! Please login";
}else {
    $btn = "Register";
}
# LOGIN HANDLER
if(isset($_POST['lsubmit'])){
    $lemail = $_POST['lemail'];
    $lpassword = $_POST['lpassword'];
    $result = $conn->query("SELECT * FROM users where email='$lemail'");
    $row = $result->fetch_array(MYSQLI_BOTH);
    if(password_verify($lpassword, $row['password'])){
        $_SESSION['id'] = $row['id']; 
        Header("Location: account.php");
    }
} else {

}
?>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Liam4Life</title>
        <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <div class="login-page">
  <div class="form">
    <form class="register-form" action="index.php" method="POST">
      <input required name="username" type="text" placeholder="Username"/>
      <input required name="rpassword" type="password" placeholder="Password"/>
      <input required name="remail" type="email" placeholder="Email address"/>
      <button>Register</button>
      <p class="message">Already registered? <a href="#">Sign In</a></p>
    </form>
    <form class="login-form" action="index.php" method="POST">
      <input required name="lemail" type="email" placeholder="Email"/>
      <input required name="lpassword" type="password" placeholder="Password"/>
      <button type="submit" name="lsubmit">Login</button>
      <p class="message">Not registered? <a href="#">Create an account</a></p>
    </form>
  </div>
</div>
    <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
        <script src="js/index.js"></script>
  </body>
</html>

DBH.php:

<?php

$conn = mysqli_connect("localhost", "root", "", "game");
if (!$conn) {
    die("Connection failed: ".mysqli_connect_error());  
}
if(isset($_SESSION['id'])){
        $_SESSION['username'] = $row['username'];
        $_SESSION['email'] = $row['email'];
        $_SESSION['password'] = $row['password'];
}
?>

3 个答案:

答案 0 :(得分:0)

而不是Header(“Location:account.php”); 使用以下声明

echo“&lt; script&gt; location.href ='account.php'&lt; / script&gt;”;退出;

Jeff提到的问题,可能是因为空间重定向没有发生。如果上述逻辑有效。然后在config /中删除额外的空格,否则需要在index.php文件中添加session_start()作为语句的第一行,并具有标题(“Location:account.php”)逻辑。

注意:要进行调试,请确保通过打印和添加退出语句来控制此处。

答案 1 :(得分:0)

索引页:

<?php
session_start();
include 'dbh.php';

-----code---------

?>

DBH.php:

<?php
session_start();

-----code---------

?>

<强> //在session_start();需要给出页面顶部,这里缺少DBH.php。因此$ _SESSION无效

答案 2 :(得分:-1)

尝试下一步方法:

<?php

session_start();

$conn = mysqli_connect("localhost", "root", "", "game");
if (!$conn) {
    die("Connection failed: ".mysqli_connect_error());
}

if(!empty($_SESSION['id'])){
    $result = $conn->query("SELECT * FROM users where id=".(int)$_SESSION['id']);
    if(!$result->num_rows) {
        session_destroy();
        Header("Refresh:0");
        exit;
    }
    Header("Location: account.php");
    exit;
}

# LOGIN HANDLER
if(isset($_POST['lsubmit']) && !empty($_POST['lemail'])){
    $lemail = mysqli_real_escape_string($_POST['lemail']);
    $result = $conn->query("SELECT * FROM users where email='{$lemail}'");
    $row = $result->fetch_array(MYSQLI_BOTH);
    if(password_verify($_POST['lpassword'], $row['password'])){
        $_SESSION['id'] = $row['id'];
        $_SESSION['username'] = $row['username'];
        $_SESSION['email'] = $row['email'];
        $_SESSION['password'] = $row['password'];
        Header("Location: account.php");
        exit;
    }
}
# REGISTRATION HANDLER
elseif(isset($_POST['rsubmit']) && !empty($_POST['email'])){
    $username = mysqli_real_escape_string($_POST['username']);
    $email = mysqli_real_escape_string($_POST['email']);
    $password = password_hash($_POST['password'], PASSWORD_BCRYPT, array('cost' => 10));
    $result = $conn->query("INSERT INTO users (username, email, password) VALUES ('{$username}', '{$email}', '{$password}')");
    $btn = "Account created! Please login";
}

?>
<html>
<head>
    <meta charset="UTF-8">
    <title>Liam4Life</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="login-page">
    <div class="form">
        <form class="register-form" action="index.php" method="POST">
            <input required name="username" type="text" placeholder="Username"/>
            <input required name="rpassword" type="password" placeholder="Password"/>
            <input required name="remail" type="email" placeholder="Email address"/>
            <button>Register</button>
            <p class="message">Already registered? <a href="#">Sign In</a></p>
        </form>
        <form class="login-form" action="index.php" method="POST">
            <input required name="lemail" type="email" placeholder="Email"/>
            <input required name="lpassword" type="password" placeholder="Password"/>
            <button type="submit" name="lsubmit">Login</button>
            <p class="message">Not registered? <a href="#">Create an account</a></p>
        </form>
    </div>
</div>
<script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src="js/index.js"></script>
</body>
</html>