这是我的代码
$username = $_POST['user'];
$password = $_POST['pass'];
if (isset($_POST['user'])); {
$db = mysqli_connect('localhost', 'root', '', 'db');
if($query = mysqli_query($db, "SELECT `pass` FROM `accounts` WHERE `user` = '$username'")){
while($row = mysqli_fetch_assoc($query)){
$row['pass'] = $setpassword;
}
mysqli_free_result($query);
}
}
它目前所做的是从表单中,检索用户输入的用户名和密码,获取该用户名并查找具有该用户名的行并从该行获取密码并将其设置为变量$ setpassword。下面是检查密码是否与数据库上给定用户名匹配的代码。
if ($password=='') {
$verify = 0;
}
if ($password!='') {
if ($password!=$setpassword) {
$verify = 1;
}
if ($password==$setpassword) {
$verify = 2;
}
}
如果验证是...... 0 - 登录表单将显示为未输入任何内容。 1 - 不正确的密码将与登录表单一起显示。 2 - 将显示更正密码,用户名将分配给会话变量。
我遇到了一个问题,即用户可以输入不存在的用户名以及数据库中是否有任何密码,并且会对其进行验证。
我该怎么做才能检查数据库中是否存在用户名?
答案 0 :(得分:2)
当您接受用户的注册时,查询数据库以查看它是否已存在。
$result = mysqli_query("SELECT * FROM accounts where `user` = $username");
if(mysql_num_rows($result) >0) // if there are any rows returned then the username exists
{
//User Name already exists
}
else
{
//User name doesn't exist, add user
}
我不确定这是你在做什么的。但是为了消除重复,你可以这样做。此外,您可以将列用户定义为唯一。这样SQL就不允许重复值。
这一行:
$row['pass'] = $setpassword; //setting $row['pass'] to $setpasswords value.
这是相反的。你应该反过来这样做。
$setpassword = $row['pass']; //setting setpassword to $row['pass'] value.
如果我需要澄清任何内容,请告诉我。
答案 1 :(得分:0)
试试这个:
$username = isset($_POST['user'])?$_POST['user']:''; // check if isset to avoid notice
$password = isset($_POST['pass'])?$_POST['pass']:'';
$verify = 0;
if (!empty($username)) {
$db = mysqli_connect('localhost', 'root', '', 'db');
if($query = mysqli_query($db, "SELECT `pass` FROM `accounts` WHERE `user` = '$username'")) {
while($row = mysqli_fetch_assoc($query)){
$setpassword = $row['pass'];
break; // exit the loop once you found the password
}
mysqli_free_result($query);
}
if (isset($setpassword)) {
$verify = 1;
if ($password == $setpassword) {
$verify = 2;
}
}
答案 2 :(得分:0)
if (isset($_POST['user'])); {
此行中有一个额外的分号,使整个代码无法正常工作
进行验证,您只需要检索密码并将其与现有密码进行比较:
$row = mysqli_fetch_assoc($query));
if ($row AND $row['pass'] == $password)
$verify = 1;
}
请注意$ row可能是ampty,所以,你必须先检查它
但是,您可以在查询中进行两种比较,例如
"SELECT * FROM accounts where `user` = $username" AND `pass` = '$password';
但是,您的代码遇到两个常见问题。
最好保存哈希而不是普通密码。
应清理您的数据,然后在查询中添加
至少这样:
$username = mysqli_real_escape_string($db,$_POST['user']);