我在我的数据库中有这些信息......
用户名 - kam,mav,shin
密码 - kam,mav,shin
这是我的代码......
<?php
$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);
$tbl2=mysql_query("SELECT * FROM tablename WHERE `username` =
'".mysql_real_escape_string($_POST['username'])."' and `password` =
'".mysql_real_escape_string($_POST['password'])."'");
while($row=mysql_fetch_array($tbl2))
if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
{
echo " ";
}
if (($row['username']!=$_POST['username'])&&($row['password']!=$_POST['password']))
{
header("location: /login.php?codeError=1");
die;
}
?>
问题是,如果我输入用户名“mav”而密码是“kam”,它仍然会通过下一页。我该怎么办?
答案 0 :(得分:2)
您应该检查查询是否返回mysql_num_rows()
的所有行:
$con=mysql_connect("localhost","root","");
mysql_select_db("nnx",$con);
$tbl2 = mysql_query("SELECT `username`, `password` FROM `tablename` WHERE
`username` = '".mysql_real_escape_string($_POST['username'])."' AND
`password` = '".mysql_real_escape_string($_POST['password'])."'
");
$rows = mysql_num_rows($tbl2);
if($rows){
// user and password exists in db
} else {
// does not exist
header("location: /login.php?codeError=1");
die;
}
就像我在上一个问题中告诉你的那样,尝试从mysql_*
函数转移。
答案 1 :(得分:0)
只是一个建议,但为什么不这样尝试:
if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
{
echo " ";
}else{
header("location: /login.php?codeError=1");
die;
}
我不明白为什么你在这里需要两个if语句,它只是布尔值,结果将是真或假。
希望这会有所帮助:)!
答案 2 :(得分:0)
您正在查询查询中已有的验证。如果用户正确输入了用户名和密码,那么查询将返回一行,其中包含该数据。
因此,您只需计算查询返回的行数。如果它低于1,则用户未经过身份验证
答案 3 :(得分:0)
尝试
if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password']))
{
echo " ";
}
else
{
header("location: /login.php?codeError=1");
die();
}
无论如何,解决此类问题的一个好方法是在屏幕上临时打印变量(作为调试)。
echo $row['username']." ".$_POST['username']." ".$row['password']." ".$_POST['password']
如果您的数据库查询或发布数据的表单存在问题,请查看变量是否确实存在。