当此代码运行时,它会返回一条错误消息,指出登录失败。 当password_verify函数未运行时,特定错误消息在else语句中,并使用var_dump函数返回以下错误消息。似乎问题在于准备好的语句,因为输入的登录变量似乎没有从数据库中收集信息。
登录失败:(0)array(0){}
任何帮助将不胜感激,请找到下面的代码。
error_reporting(E_ALL);
$mysqli = new mysqli ('localhost', 'root', 'root', 'myTable');
if($mysqli->connect_errno > 0) {
die('Unable to connect to database [' . $mysqli->connect_error . ']');
}
ob_start();
session_start();
if(isset($_POST['LogIn'])) {
$username = $_POST['userName'];
$password = $_POST['password'];
if(!($stmt = $mysqli->prepare("SELECT Username, Password FROM user WHERE Username = ?"))){
echo "Prepare failed: (" . $mysqli->errno . ")" . $mysqli->error;
}
if(!$stmt->bind_param('s', $username)){
echo "Bind failed: (" . $stmt->errno . ")" . $stmt->error;
}
if(!$stmt->execute()){
echo "Execute failed: (" . $stmt->errno .")" . $stmt->error;
}
$userdata = $stmt->get_result();
$row = $userdata->fetch_array(MYSQLI_ASSOC);
$stmt->bind_result($username, $password);
$stmt->store_result();
if(password_verify($password, $row['Password'])){
session_start();
$_SESSION['UserID'] = $row['UserID'];
var_dump($_SESSION);
// header('Location: Account.php');
exit();
}
else{
echo "Login Failed: (" . $stmt->errno .")" . $stmt->error;
echo "Password's do not match";
var_dump($_SESSION);
}
$stmt->close();
}
$mysqli->close();
答案 0 :(得分:0)
这可能就是你要找的东西。
if(isset($_POST['LogIn'])) {
$UN = $_POST['userName'];
$PW = $_POST['password'];
//write sql to check for email or username
$userOrEmailQuery = ("SELECT * from user where Username=? or Email=? LIMIT 1");
$stmt = $con->prepare($userOrEmailQuery);
$stmt->bind_param('ss', $UN, $UN);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if(password_verify($PW, $row['Password'])) {
session_start();
$_SESSION["UserID"] = $row['UserID'];
header( 'Location: Account.php' );
} else {
session_start();
$_SESSION['LogInFail'] = "Yes";
}
}
希望这有帮助。