我的 login.php 中有这段 php 代码
if (isset($_POST['logIn'])) {
$errmsg = "";
$logname = mysqli_real_escape_string($dbc, trim($_POST['usernameIn']));
$logpassword = mysqli_real_escape_string($dbc, trim($_POST['passwordIn']));
$query = "SELECT user_id, username FROM members WHERE username = '$logname' AND password = SHA('$logpassword')";
$data = mysqli_query($dbc, $query);
if (mysqli_num_rows($data) == 1) {
$row = mysqli_fetch_array($data);
setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30)); //expires after 30 days
setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30));
$home = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
header('Location: ' . $home);
}
else {
$errmsg = '<p class="errormsg">Username or password is incorrect.</p>';
}
}
出于某种原因,它总是在 else 语句中设置 $errmsg。我确信我输入的信息(用户名、密码)是正确的并且存在于数据库中。
我使用此查询插入我的值(来自注册脚本):
$query = "INSERT INTO members (username, password, email) VALUES ('$username', SHA('$password'), '$email')";
有人看到这个脚本的问题吗?谢谢!
最佳答案
我没有注意到您的代码中有任何重大错误,但我有一些建议可以帮助调试它:
- 再次检查用户名和密码。在查询之前回显这两个,以确保它们在转义后仍然与数据库中的内容匹配。
- 回显查询字符串并在 phpmyadmin 或 shell 中运行它。
- 确保值以 POST 而不是 GET 的形式发送。
- 将
if (mysqli_num_rows($data) == 1) {
更改为if (mysqli_num_rows($data) > 0) {
以防两行具有相同的用户名和密码
关于php - SHA 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2520667/