<?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'去掉 用户名是可以查询到的 但是密码随便输入什么都可以登录成功
$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'去掉 用户名是可以查询到的 但是密码随便输入什么都可以登录成功
$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 "登录失败";
}
你也可以直接打印一下sql语句去数据库执行一下 看有没有数据
//把上面的$result改成这个
$result = mysql_query("SELECT uid FROM user WHERE username='$username' AND password='$password'");
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
echo mysql_num_rows($result);
echo mysql_num_rows($result);
如果把and password='$password'去掉 出来的是1
这样的话就不太好办了,首先你先看一下你数据库中的密码是否是经过md5函数加密的。
如果不是那么就,去掉外层的函数
$username =$_POST['username'];
$password =$_POST['password'];
如果是,那么就先去掉POST外层的函数
然后直接进入数据库强行把密码修改成明文
update 语句会不?
之后在运行我给你的那个语句,直到结果是1为止
1 数据库里的密码是MD5的
2 那么就先去掉POST外层的函数 这是什么意思啊
3 直接进入数据库强行把密码修改成明文 (意思是不要MD5的密码吗)
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