免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2180 | 回复: 9
打印 上一主题 下一主题

百思不得其解,一个用户验证的问题. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-12 16:27 |只看该作者 |倒序浏览
本帖最后由 frank533 于 2012-04-12 16:31 编辑

一段验证用户登录的代码如下:

  1. <?php
  2. if (empty($_POST["username"]) && empty($_POST["password"])) {
  3.   echo '<script>alert(" ' . $username_pass_empty_error . ' "); history.go(-1); ' . '</script>';
  4.          } else {
  5.          $username = $_POST["username"];
  6.          $password = $_POST["password"];
  7.          $sqltest = "select count(*) from sc_admin where username = ' ".$username." ' ";
  8.          $testrst = $conn->query($sqltest);
  9.          if ($testrst > 0) {
  10.                  $sqlstr = "select * from sc_admin where username = ' ".$username." ' and password = ' ".$password." ' ";
  11.                  $rst = $conn->query($sqlstr);
  12.                  if (!$rst -> EOF) {
  13.                          if ($rst -> fields[5] == 0) {
  14.                          $_SESSION["id"] = $rst -> fields[0];
  15.                          $_SESSION["name"] = $rst -> fields[1];
  16.                          $_SESSION["roles"] = $rst -> fields[5];
  17.                          $_SESSION["lasttime"] = $rst -> fields[3];
  18.                          $logindate = date("Y-m-d") . date("G:i");
  19.                          $logincount = $rst -> fields[4];
  20.                          $logincount++;
  21.                          $sqlstrud = "update sc_admin set logincount=' ".$logincount." ' , lastlogindate=' ".$logindate." ' where id=' ".$_SESSION['id']." ' ";
  22.                          $conn->query($sqlstrud);
  23.                          echo "<meta http-equiv=\"refresh\" content=\"2; url=index.php \" />";
  24.                 } else if ($rst -> fields[5] == 1) {
  25.                          echo '<script>alert("用户被冻结"); history.go(-1); ' . '</script>';       
  26.                  } else {
  27.                          echo '<script>alert("密码错误"); history.go(-1); ' . '</script>';
  28.                          }
  29.                 }
  30.         } echo '<script>alert("用户不存在"); history.go(-1); ' . '</script>';
  31. }
  32. ?>
复制代码
mysql数据库中是有数据的,在mysql里面都能执行上面代码中的sql语句,返回数据也正常,可是现在的问题是这段php始终无法从mysql数据库中取出数据,点击提交后总是返回用户不存在的错误。
登陆表单提交的内容已经验证过,没有问题。
请各位指点一下问题在哪里?php与mysql的连接也是对的。连接代码如下:
  1. <?php
  2. $host = "localhost";
  3. $database = "test";
  4. $dbname = "test";
  5. $dbpass = "12345678";
  6. $conn = @mysqli_connect($host, $dbname, $dbpass);
  7. if (!$conn)         {
  8.         echo "$connectdb_error";
  9.         exit;
  10.         }
  11. $selectdb = mysqli_select_db($conn, $database);
  12. if (!$selectdb) {
  13.         echo "$selectdb_error" ;
  14.         exit;
  15.         }
  16. ?>
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-04-12 16:35 |只看该作者
感觉是在执行
  1. $sqltest = "select count(*) from sc_admin where username = ' ".$username." ' ";
复制代码
时,返回的值是0,而实际上应该返回1。
不知是什么原因导致这个结果的

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
3 [报告]
发表于 2012-04-12 19:22 |只看该作者
回复 2# frank533


    ' ".$username." '   这个,单引号和双引号之间有空格,等于查的是两边各有一个空格的用户名。

论坛徽章:
0
4 [报告]
发表于 2012-04-12 20:13 |只看该作者
不是这个原因,去掉空格问题依旧。而且即使直接指定用户名取代变量,还是一样的结果。

论坛徽章:
0
5 [报告]
发表于 2012-04-12 20:41 |只看该作者
google无果,baidu无果,翻书无果。
继续等高手出现。
难道就我一个人遇见这个问题吗?换了几个数据库服务器,问题依旧。看来原因还是在php代码上,继续研究……

论坛徽章:
0
6 [报告]
发表于 2012-04-13 11:11 |只看该作者
求高手出现啊.
重写了几次都是这样,都快疯掉了

论坛徽章:
0
7 [报告]
发表于 2012-04-13 16:13 |只看该作者
$sqltest = "select count(*) from sc_admin where username = ' ".$username." ' ";
echo $sqltest;
看看打印出的sql语句是啥? $username是不是正确传入进来~
这么贴代码 谁能看出来~

论坛徽章:
0
8 [报告]
发表于 2012-04-15 12:25 |只看该作者
代码逻辑的问题,当然,也可能是笔误

$sqltest = "select count(*) from sc_admin where username = ' ".$username." ' ";
$testrst = $conn->query($sqltest);
if ($testrst > 0)
{
}
echo '<script>alert("用户不存在"); history.go(-1); ' . '</script>';

看到了吗?无论if里面怎么执行,最后都要执行echo "用户不存在"。

要么加个else,要么在if里面跳出来

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2012-04-16 08:59 |只看该作者
同意

论坛徽章:
0
10 [报告]
发表于 2012-04-26 11:30 |只看该作者
syfool 发表于 2012-04-15 12:25
代码逻辑的问题,当然,也可能是笔误

$sqltest = "select count(*) from sc_admin where username = ' " ...


就是这个问题,唉,看了那么多次,愣没看出来。不专心的后果啊
谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP