我有一个非常恼人的问题与一个非常简单的PHP登录脚本。问题是,登录工作,即使错误的用户名和/或密码。我在Linux的XAMPP 7.0.8中运行它。顺便说一下,数据库"login"的"users"表只有一行。
我一直在试图理解这些脚本是如何工作的,所以我尝试了最基本的登录方式。但这对我来说一直是个谜,到现在我还没能弄明白。
下面是PHP部分:
<?php
session_start();
if(isset($_POST['login'])) {
$db = mysqli_connect("localhost", "root", "", "login");
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$username = stripcslashes($username);
$password = stripcslashes($password);
$username = mysqli_real_escape_string($username);
$password = mysqli_real_escape_string($password);
$sql = "SELECT * FROM users WHERE username = '$username' LIMIT 1";
$query = mysqli_query($db, $sql);
$row = mysqli_fetch_array($query);
$id = $row['id'];
$db_password = $row['password'];
if($password == $db_password){
$_SESSION['username'] = $username;
$_SESSION['id'] = $id;
header("Location: index.php");
} else {
echo "Error: the information is not correct.";
}
}
?>
这里是HTML表单:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Client's area</title>
</head>
<body>
<form method="post" action="">
<input type="text" name="username">
<input type="password" name="password">
<input class="login" type="submit" name="login" value="Login">
</form>
</body>
</html>
Edit:这篇文章的想法从来没有试图做一个安全的登录脚本,它的目的是了解一些PHP的功能。我知道在实际的登录项目中使用这段代码的任何部分都是不安全的。
您可以使用一个简单的查询
$sql = "SELECT * FROM users WHERE username = '$username' and password= '$password'";
$query = mysqli_query($db, $sql);
if(mysqli_num_rows($query) > 0)
{
//Records matched process further
$_SESSION['username'] = $username;
$_SESSION['id'] = $id;
header("Location: index.php");
exit();
} else {
//Record not found throw error
echo "Error: the information is not correct.";
}
希望能有所帮助
问题是您正在直接设置$row
变量,即使它失败。这将$db_password设置为",而密码应该是"。
将$row命令更改为
if ($row = mysqli_fetc_array($query) {
并将}
添加到从底部开始的第3行(空白点),并在那里添加您的"失败消息"