PHP中的简单身份验证脚本不起作用

时间:2011-06-01 15:44:10

标签: php

从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。

2 个答案:

答案 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。这里的错误并不意味着没有返回任何行 - 而是一个错误,例如您尝试针对不存在的表运行此查询。