我正在尝试创建一个简单的登录凭据检查器(带有会话变量)。
这是我到目前为止所做的:
<?php
include("dbconnect.php");
$u_name = mysql_real_escape_string($_POST['uname']);
$p_word = mysql_real_escape_string($_POST['pword']);
# *** querying all records ***
$query = mysql_query("SELECT valid_username, valid_password FROM notes_users");
while($rst = mysql_fetch_array($query)) {
//echo $rst[valid_username] . ", ";
//echo $u_name . " || ";
//echo ($rst[valid_username] == $u_name) . " || ";
//echo $rst[valid_password] . ", ";
//echo $p_word . " || ";
//echo ($rst[valid_password] == $p_word) . " || ";
//echo (($rst[valid_username] == $u_name) AND ($rst[valid_password] == $p_word));
//echo "<br/>";
if (($rst[valid_username] == $u_name) AND ($rst[valid_password] == $p_word)) {
session_start();
$_SESSION['login'] = "1";
header('Location: main.php') ;
} else {
session_start();
$_SESSION['login'] = '';
header('Location: badlogin.php') ;
}
}
?>
这是问题所在:如果MySQL表的列表中有多个用户,则检查会中断。只有表中最后输入的用户才能授予访问权限。即使凭据正确,上次输入的用户之上的任何人都会遇到错误的登录屏幕。为什么会这样?任何人都可以建议代码修复或更好的代码来实现此登录检查吗?
编辑:注释代码测试以查看提供的凭据是否与记录中的凭据匹配。脚本的那部分工作正常。
问题解决了!谢谢你们。对于今后看到这个的人来说,绝对加密你的密码,我的是纯文本,因为这是一个本地测试应用程序,甚至看不到上传到网上。答案 0 :(得分:4)
无需遍历所有用户记录。想象一下,如果你有一个拥有1000000个用户的数据库,你只需要尝试获取与提供的用户名和密码相对应的记录。将您的查询更新为以下内容:
$query = mysql_query("SELECT * FROM notes_users
WHERE
valid_password = '$p_word' &&
valid_username = '$u_name'");
然后你会做类似的事情:
if (($row = mysql_fetch_array($query)) {
// valid user
} else {
// invalid password or username
}
答案 1 :(得分:1)
首先,不要以纯文本形式存储密码!请改用md5 / sha1哈希。
其次,获取数据库中所有用户的列表并不是一个好主意。您在SQL查询中的WHERE子句 - 这也将解决您的问题..
答案 2 :(得分:0)
您应该检查特定用户的登录详细信息。
$query = mysql_query("SELECT valid_username, valid_password FROM notes_users WHERE valid_password = '$p_word' && valid_username = '$u_name' ");
将返回唯一要检查的行。
答案 3 :(得分:0)
为什么不直接查询用户的凭据?例如:
$statement = mysql_query("SELECT valid_username FROM notes_users WHERE \
valid_username = '{$u_name}' and valid_password = '{$p_word}' LIMIT 1;");
if ( mysql_num_rows($statement) > 0 ) { /* log user in */ }
else { /* bad log in */
哦,你为什么不使用===运算符进行字符串比较?调查一下,它更实用。
答案 4 :(得分:0)
这是错误的代码,
$query = mysql_query("SELECT valid_username, valid_password FROM notes_users");
使用以下代码:
$postedUsername=mysql_real_escape_string($_POST['uname']));
$postedPass=mysql_real_escape_string($_POST['pass']));
$query = mysql_query("SELECT valid_username, valid_password FROM notes_users where username='$postedUsername' and password='$postedPass'");