首页 > 解决方案 > PHP登录系统不起作用

问题描述

我正在用 PHP 做一个登录系统,但它不能正常工作

这是我的登录页面:

<div class="container">
  <form method="post" action="index.php?page=login">
    <div class="form-group row">
      <label for="loginFormInputEmail" class="col-sm-2 col-form-label">Email:</label>
      <div class="col-sm-10">
        <input id="loginFormInputEmail" class="form-control" type="email" name="email" value="<?php if(!empty($_POST['email'])) echo $_POST['email'];?>" />
      </div>
    </div>
    <div class="form-group row">
      <label for="loginFormInputPass" class="col-sm-2 col-form-label">Pass:</label>
      <div class="col-sm-10">
        <input id="loginFormInputPass" class="form-control" type="password" name="password" />
      </div>
    </div>
    <div class="form-group row">
      <div class="offset-sm-2 col-sm-10">
        <input class="btn btn-primary" type="submit" value="login" />
      </div>
    </div>
  </form>
</div>

在这里,我有放置登录系统的 Usercontroller 文件:

public function login() {
    if(!empty($_POST)) {
      if(!empty($_POST['email']) && !empty($_POST['password'])) {
        $existing = $this->userDAO->selectByEmail($_POST['email']);
        if(!empty($existing)) {
          if (password_verify($_POST['password'], $existing['password'])) {
            $_SESSION['user'] = $existing;
          } else {
            $_SESSION['error'] = 'Unknown username / password';
          }
        } else {
          $_SESSION['error'] = 'Unknown username / password';
        }
      } else {
        $_SESSION['error'] = 'Unknown username / password';
      }
    }
    header('Location: index.php');
    exit();
  }

问题是,如果我进入登录页面,它会自动返回索引页面,因为我有位置:index.php。但我不知道如何改变它以使其工作。

标签: phpsqldatabaselogin

解决方案


验证用户时需要添加 header()。当用户通过您的验证时,您应该去任何地方的标题。

public function login() {
    if(!empty($_POST)) {
      if(!empty($_POST['email']) && !empty($_POST['password'])) {
        $existing = $this->userDAO->selectByEmail($_POST['email']);
        if(!empty($existing)) {
          if (password_verify($_POST['password'], $existing['password'])) {
            $_SESSION['user'] = $existing;

            header('Location: some_where_else.php');
            // dont forget the exit as header does not stop the flow of execution
            exit;


          } else {
            $_SESSION['error'] = 'Unknown username / password';
          }
        } else {
          $_SESSION['error'] = 'Unknown username / password';
        }
      } else {
        $_SESSION['error'] = 'Unknown username / password';
      }
    }
    // This is now run only when validation failed
    header('Location: index.php');
    exit();
}

推荐阅读