PHP登录使用的mysqli(PHP login with Mysqli)

2019-09-21 03:33发布

我是比较新的PHP / mysqli的我无法验证用户身份,我不完全知道如何读取行和验证针对它的数据,然后将用户重定向到一个新页面或显示错误(我的所有知道的是我需要使用_SESSION)。 基本上,我在与取指()程序麻烦,什么是代码的正确方法?


  <?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();
    ?>

Answer 1:

按照这个顺序

  1. 准备查询$stmt->prepare()
  2. 绑定帕拉姆如果您使用占位符$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);
}

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

$_POST['username'];
$_POST['password'];
$username;
$password;

所以你必须要做出一个if语句来检查$_POST['username'] == $username && $_POST['password'] == $password 。 如果这是真的,你可以设置你的loggedIn标志。

为了保持登录只需设置一个$ _SESSION变量用户。 您可以设置$_SESSION['logged_in'] = true; ,这让你知道,如果这个变量被设置在用户已经通过身份验证的可能性。 如果用户想结束自己的会话,只需取消设置变量(和破坏会话)。

还有一两件事我注意到:

if($stmt->fetch() == true) { } // equals: if ($stmt->fetch()) { }


Answer 2:

这具有重大的安全问题,但回答你的问题:

你可以这样做:

$sql = "SELECT Login_ID, Login_PW,
  FROM login  
  WHERE Login_ID=?
";

$stmt = $mysqli->prepare( $sql );

// Do your thing...

// Make sure the user is found.
if ( ! $stmt->rowCount() )
    return false;

// Retrieve your results as an associative array.
$user = $stmt->fetch();

// Check the password.
if ( ! $_POST['password'] == $user['Login_PW'] ) )
  return false;

$_SESSION['name'] = $user['Login_ID'];

header("Location:/in.php");

exit();

您可能会发现这些有用:
为什么你应该使用PHP的PDO数据库访问
安全的密码与Phpass



文章来源: PHP login with Mysqli