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
按照此顺序
$stmt->prepare()$stmt->bind_param("ss", $username, $password);$stmt->bind_result($username, $password)$stmt->fetch()$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)