从php开始,我编写了一个基本的身份验证脚本,如果在“test”数据库的用户表中存在userid(由用户提供),则会在mysql服务器上打印出数据库列表。
问题是即使数据库中不存在用户标识,此脚本也会输出数据库列表。我不确定脚本有什么问题。请查看脚本并帮助我理解为什么db列表正在输出,即使db中不存在userid。这是脚本:
<?php
if(isset($_POST['submitted']))
{
$userid=$_POST['userid'];
$userpassword=$_POST['userpassword'];
$link_id=mysql_connect("localhost","root","pass");
$result_db_list=mysql_list_dbs($link_id);
mysql_select_db("test",$link_id);
if(!($result_ptr=mysql_query("Select userid from user where Userid='$userid'",$link_id))) die ("Please enter correct userid");
while($test=mysql_fetch_row($result_db_list))
{
echo $test[0]."<br>";
}
}
else
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Authentication Script</title>
<style type="text/css" >
#header{
padding-top:0px;
margin:0px;
background-color:#CCCCCC;
}
.container{
width:950px;
margin:0 auto;
border:1px solid red;
}
.authbox {
padding-top:100px;
margin:0 auto;
}
#footer{
background-color:#666666;
color:white;
}
</style>
</head>
<body>
<div id="header">
<div class="container">
<form action="authentication script.php" method="post">
<div class="authbox">UserName: <input type="text" name="userid" /><br/>
Password: <input type="password" name="userpassword" /><br/>
<input type="hidden" name="submitted" value="true" />
<input type="submit" value="Submit" />
</div>
</form>
</div>
</div>
<div id="footer">
Copywright 2010 NT Technologies.
</div>
</body>
</html>
<?php
}
?>
由于 rseni。
答案 0 :(得分:3)
您的脚本充满了错误。 (我希望至少你有magic_quotes on
否则你会遇到很大的问题。请注意你应该避免使用magic_quotes并使用预备语句。
这是因为
而发生的 if(!($result_ptr=mysql_query("Select userid from user where Userid='$userid'",$link_id)))
die ("Please enter correct userid");
如果查询没有选择任何内容,则查询不会返回FALSE。
您应将其更改为:
$result = mysql_query("SELECT COUNT(*) as countUser [etc]");
$r = mysql_fetch_assoc($result);
if ($r['countUser']==0)
die('Denied');
答案 1 :(得分:1)
Appu - yes123是正确的。看看php.net上有关mysql_query函数的文档 - 你会看到它在成功时返回一个资源标识符,在出错时返回FALSE。这里的错误并不意味着没有返回任何行 - 而是一个错误,例如您尝试针对不存在的表运行此查询。