-1
我終於開始將我的登錄系統從MySQLi更改爲Prepared語句。目前我有這個:MySQLi在登錄頁面無法正常工作的情況下準備好的語句
<?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
提前再次感謝。
你的問題是更換
bind_result
?這個代碼不工作或有錯誤? – ashkufaraz@ashkufaraz nope。沒有錯誤顯示。它只是重定向回登錄頁面。 – LaughingQuoll
什麼是'password_verify'?和'$ username','$ password' – ashkufaraz