<?php
$username = htmlspecialchars($_POST['username']);
$password = MD5($_POST['password']);//包含数据库连接文件
include('conn.php');//检测用户名及密码是否正确
$check_query = mysql_query("SELECT `uid` FROM `user` WHERE `username`='$username' AND `password`='$password' LIMIT 1");if($result = mysql_fetch_array($check_query)){
    //登录成功
    $_SESSION['username'] = $username;
    echo "ok";
    exit;
} else {
    exit('登录失败!点击此处 <a href="javascript:history.back(-1);">返回</a> 重试');
}
?>
请看看代码哪里出错了 明明数据库里存在输入的用户名的 但还是登录失败 
但是如果将`password`='$password'去掉 用户名是可以查询到的 但是密码随便输入什么都可以登录成功

解决方案 »

  1.   


    $result = mysql_query("SELECT uid FROM user WHERE username`='$username' AND `password`='$password'");
    echo mysql_num_rows($result)."<br/>";//看一下这个结果是否为1,如果不是,则你的用户名或者密码有问题
    if($mysql_num_rows($result)==1){
    $row=mysql_fetch_array($result));
    $_SESSION['username'] = $row['username'];
    echo "登录成功";
    }else{
    echo "登录失败";
    }
      

  2.   

    你在php页面打印出你接收到的$password看看 和数据库里面是不是一样的
    你也可以直接打印一下sql语句去数据库执行一下 看有没有数据
      

  3.   


    //把上面的$result改成这个
    $result = mysql_query("SELECT uid FROM user WHERE username='$username' AND password='$password'");
      

  4.   

    出现这些东西 用户名和密码都输入的对的啊  数据库里也有这些信息的
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in E:\php\bbs\log.php on line 10
    Notice: Undefined variable: mysql_num_rows in E:\php\bbs\log.php on line 11Fatal error: Function name must be a string in E:\php\bbs\log.php on line 11
      

  5.   

    就把这两行粘进去看什么结果 $result = mysql_query("select uid FROM user where username='$username' and password='$password'");
    echo mysql_num_rows($result);
      

  6.   

    $result = mysql_query("select uid FROM user where username='$username'");
    echo mysql_num_rows($result);
    如果把and password='$password'去掉 出来的是1
      

  7.   

    果然,那就是你的用户名或者密码跟数据库中的不匹配。
    这样的话就不太好办了,首先你先看一下你数据库中的密码是否是经过md5函数加密的。
    如果不是那么就,去掉外层的函数
    $username =$_POST['username'];
    $password =$_POST['password'];
    如果是,那么就先去掉POST外层的函数
    然后直接进入数据库强行把密码修改成明文
    update 语句会不?
    之后在运行我给你的那个语句,直到结果是1为止
      

  8.   

    谢谢 有这几个问题哦
    1 数据库里的密码是MD5的   
    2 那么就先去掉POST外层的函数 这是什么意思啊
    3 直接进入数据库强行把密码修改成明文 (意思是不要MD5的密码吗)
      

  9.   

    是这样的,你的问题出在你的PHP密码和数据库中的密码不一致,我觉得可能的原因是
    1.你数据库中存放密码的字段长度不够,这样就导致了你加密后PHP密码长度>数据库中的密码长度
    2.问题出在注册的时候,假设你有a,b两个页面,b页面负责接收a页面传过来的用户名和密码,如果直接运行b页面即便密码传过来的是空值,经过md5函数之后也是可以插入成功的。这样就导致数据库中的密码其实根本不是你输入的密码,而是加密后的空值。
    我觉得第一种可能性比较大。
    你先打开你数据库的用户表,然后看你字段password的类型,如果小于varchar(32)的话那就是问题1,我的表设置的是varchar(50)
    确保长度足够后
    首先打开PHP页面输出md5($password);这是一串加密后的32位数字你需要将这个复制下来
    然后打开你的数据库 update user set password='你刚才复制的那串32位的数字' where username='用户名你需要手动输入进来'这样就强行把数据库的密码进行了更新,下面的变量还这么写不需要改动
    $username = htmlspecialchars($_POST['username']);
    $password = MD5($_POST['password']);
    然后在运行
    $result = mysql_query("select uid FROM user where username='$username' and password='$password'");
    echo mysql_num_rows($result);
    看看结果是不是1