用Mysqli登录PHP

Und*_*e2k 2 html php mysql mysqli

我是相对较新的php/mysqli我无法验证用户,我不确定如何获取行并验证数据,然后将用户重定向到新页面或显示错误(所有我知道我需要使用_SESSION).基本上我遇到了fetch()例程的问题,对此进行编码的正确方法是什么?


  <?php 
    session_start();
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
    /* Create a new mysqli object with database connection parameters */
    $mysqli = mysqli_connect('localhost', 'root', '', 'draftdb');

    if(mysqli_connect_errno()) 
    {
          echo "Connection Failed: " . mysqli_connect_errno();
          exit();
    }
       /* Create a prepared statement */
    if($stmt = $mysqli -> prepare("SELECT Login_ID, Login_PW,
    FROM login  
    WHERE Login_ID=? AND Login_PW =?"))
     {

          /* Bind parameters
             s - string, b - boolean, i - int, etc */
          $stmt -> bind_param("ss", $username, $password);

          /* Execute it */
          $stmt -> execute();

          /* Bind results */
          $stmt -> bind_result($username, $password);

          /* Fetch the value */

          if($stmt->fetch() == true)

             { 
             $row =$query -> fetch();
             $_SESSION['name'] = $row;
             header("Location:/in.php");
            exit();
             }
        else 
             { 
            echo 'Invalid Login'; 
             } 

          /* Close statement */
          $stmt -> close();
       }

       /* Close connection */
       $mysqli -> close();
    ?>
Run Code Online (Sandbox Code Playgroud)

Leo*_*mer 10

按照此顺序

  1. 准备查询 $stmt->prepare()
  2. 如果使用占位符,请绑定Param $stmt->bind_param("ss", $username, $password);
  3. 执行
  4. 将结果绑定到变量 $stmt->bind_result($username, $password)
  5. 现在可以随时获取数据了 $stmt->fetch()
  6. 关闭准备好的声明 $stmt->close

我认为你$stmt->bind_result()已经设定变量并不清楚.在你的情况下,你可能只从表中获取1行,所以$stmt->fetch()就足够了.如果您有多行,则需要一个用于使用数据的循环.

例:

$a = array();
while ($stmt->fetch()) {
    $a = array('username' => $username, 'password' => $password);
}
Run Code Online (Sandbox Code Playgroud)

关于用户和密码匹配:你现在有

$_POST['username'];
$_POST['password'];
$username;
$password;
Run Code Online (Sandbox Code Playgroud)

所以你必须做一个if语句检查$_POST['username'] == $username && $_POST['password'] == $password.如果是这样,您可以设置您的登录标志.

要保持用户登录,只需设置$ _SESSION变量.您可以设置$_SESSION['logged_in'] = true;,这使您可以知道如果设置了此变量,用户已经过身份验证.如果用户想要结束他的会话,只需取消设置变量(并销毁会话).

我注意到还有一件事:

if($stmt->fetch() == true) { } // equals: if ($stmt->fetch()) { }
Run Code Online (Sandbox Code Playgroud)