我终于把我的登录系统从MySQLi改为Prepared语句了。目前我有这个:
<?php
session_start();
require 'settings.php';
if(count($_POST)>0) {
$user = $_POST['user_name'];
$pass = $_POST['password'];
/* Create a new mysqli object with database connection parameters */
$mysqli = new mysqli($host, $mysql_user, $mysql_pass, $db);
if(mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
exit();
}
/* Create a prepared statement */
if($stmt = $mysqli -> prepare("SELECT * FROM members WHERE username=?")) {
/* Bind parameters
s - string, b - blob, i - int, etc */
$stmt -> bind_param("s", $user);
/* Execute it */
$stmt -> execute();
/* Bind results */
$stmt -> bind_result($id, $username, $password);
/* Fetch the value */
$stmt -> fetch();
$hash = $password;
$passwordcheck = password_verify($pass, $hash);
}
if($hash == $passwordcheck){
$_SESSION["user_id"] = $id;
$_SESSION["user_name"] = $username;
} else {
$message = "Invalid Username or Password!";
}
/* Close statement */
$stmt -> close();
}
if(isset($_SESSION["user_id"])) {
header("Location:dashboard.php");
exit();
}
?>
如果我在其中放入正确的密码和用户名,只是将我带到登录页面,问题是什么。我检查了我的服务器error_log并修复了它出现的错误,但它没有解决问题。我对准备好的陈述很新,并且真的会使用一些帮助。提前谢谢。
如果我回显所有变量,除了初始用户和传递之外都是空的。
另一方面,我的MySQLi结构是这样的:
id | username | password | showtasks | showblog | superuser
1 | Administrator | biglonghash | 1 | 1 | 1
再次感谢。
答案 0 :(得分:0)
您将$ _POST设置为变量
$user = $_POST['user_name'];
$pass = $_POST['password'];
但是bind_result
使用了这个变量
$stmt -> bind_result($id, $username, $password);
用此
替换bind_result
$stmt -> bind_result($id, $user , $pass );