使用php生成登录脚本时出现问题
我需要一些关于我的网站登录脚本的帮助。我只收到“nouser”错误,但我知道我有一个帐户,这是正确的登录。它就像跳过了脚本的登录部分。我已经检查了有无花括号,我想我是对的。好像从数据库中提取有问题 有谁能看出它有什么不对劲,或者能给我一些改进的建议吗使用php生成登录脚本时出现问题,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我需要一些关于我的网站登录脚本的帮助。我只收到“nouser”错误,但我知道我有一个帐户,这是正确的登录。它就像跳过了脚本的登录部分。我已经检查了有无花括号,我想我是对的。好像从数据库中提取有问题 有谁能看出它有什么不对劲,或者能给我一些改进的建议吗 if (isset($_POST['login-submit'])) { require "dbh.i.php"; $mailuid = $_POST['mailuid']; $password
if (isset($_POST['login-submit'])) {
require "dbh.i.php";
$mailuid = $_POST['mailuid'];
$password = $_POST['pwd'];
if (empty($mailuid) && empty($password)) {
header("Location: ../index.php?error=emptyfields");
exit();
} else {
$sql = "SELECT * FROM users WHERE uidUsers=? OR emailUsers;";
$stmt = mysqli_stmt_init($connect);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("Location: ../index.php?error=sqlerror");
exit();
} else {
mysqli_stmt_bind_param($stmt, "ss", $mailuid, $mailuid);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
$pwdCheck = password_verify($password, $row['pwdUsers']);
if ($pwdCheck == false) {
header("Location: ../index.php?error=wrongpwd");
exit();
} else if ($pwdCheck == true) {
session_start();
$_SESSION[userId] = $row['idUsers'];
$_SESSION[userUid] = $row['uidUsers'];
header("Location; ../index.php?login=success");
exit();
} else {
header("Location: ../index.php?error=wrongpwd");
exit();
}
} else {
header("Location: ../index.php?error=nouser");
exit();
}
}
}
} else {
header("Location: ../index.php?signup");
exit();
}
我认为这部分代码是错误的:
$sql = "SELECT * FROM users WHERE uidUsers=? OR emailUsers;";
$stmt = mysqli_stmt_init($connect);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("Location: ../index.php?error=sqlerror");
exit();
} else {
mysqli_stmt_bind_param($stmt, "ss", $mailuid, $mailuid);
查询中只有一个占位符需要替换:SELECT*FROM users,其中uidUsers=?或电邮用户代码>,但要替换它两次:
mysqli\u stmt\u bind\u参数($stmt,“ss”,$mailuid,$mailuid)代码>
尝试将查询更改为:
SELECT * FROM users WHERE uidUsers=? OR emailUsers=?;
谢谢,现在开始工作了!在将来,您也可能会面临该逻辑的更多问题,因为查询中的OR运算符可能会在用户表“未正确填充”的情况下返回多个1。我建议重新审视这一点,以避免将来出现一些令人头痛的问题。