第一种:<?php
$id=$_POST['id'];
$password=$_POST['password'];
 $conn=mysql_connect("localhost","root","root");
 if (!$conn){
 die("连接失败:".mysql_errno());
 }
 mysql_select_db("emp",$conn) or die(mysql_errno());
 mysql_query("set names utf8")or die(mysql_errno());
$sql = "select count(id) from admin where id='".$id."' and password='".md5($password)."'";
$res = mysql_query($sql,$conn);
$num = mysql_num_rows($res);
if($num){
   header("location:empManage.php");
   exit();
}else{
  header("location:login.php?errno=1");
  exit();
}
mysql_free_result($res);
mysql_close($conn);
 
?>
此方法无论密码是否和数据库匹配都可以登陆
方法二:<?php
$id=$_POST['id'];
$password=$_POST['password'];
 $conn=mysql_connect("localhost","root","root");
 if (!$conn){
 die("连接失败:".mysql_errno());
 }
 mysql_select_db("emp",$conn) or die(mysql_errno());
 mysql_query("set names utf8")or die(mysql_errno());
 $sql="select password from admin where id=$id";
 $res=mysql_query($sql,$conn);
 if ($row=mysql_fetch_assoc($res)){
 
 if ($row['password']==md5($password)){
 header("location:empManage.php"); }
 }
header("location:login.php?errno=1");mysql_free_result($res);
mysql_close($conn);
?>
此方法即使id和密码都正确都无法登陆求高人指点,看看哪里错了导致无法登陆

解决方案 »

  1.   

    第一种方法的SQL查询结果实际是
     | count(*) |
     ------------
     |  0       |
    用mysql_num_rows的结果永远是1,因为有一列,不管这个列的值是不是0.
    修改方法自然是fetch取出count列的值再比较
      

  2.   

    很明显,方法二是错误的!
    header("location:empManage.php");
    之后没有终止程序,
    header("location:login.php?errno=1");
    始终被执行
    既然浏览器收到两条 Location 指令,当然是后一条被优先执行
      

  3.   

    忘了还有第二个了。
    逻辑问题我想
    if ($row=mysql_fetch_assoc($res)){   
        if ($row['password']==md5($password)){
           header("location:empManage.php");
        }
    }
    header("location:login.php?errno=1");假设成功,先header("location:empManage.php"),可到最后仍然会执行header("location:login.php?errno=1")。 header()函数并不会执行后立即发送消息报头给浏览器,于是后面的覆盖了前面的。不过没测试过所以不敢打保票。
    把逻辑理顺了看看if ($row=mysql_fetch_assoc($res)){   
        if ($row['password']==md5($password)){
           header("location:empManage.php");
           exit();
        }
    }
    header("location:login.php?errno=1");
      

  4.   

    对于第一种方法,需这样
    $sql = "select id from admin where id='".$id."' and password='".md5($password)."'";
      

  5.   

    哈哈,大神们高深莫测。这个
     $sql="select password from admin where id=$id";id是不是要这样
     $sql="select password from admin where id='$id'";
    加引号?
      

  6.   

    $num = mysql_num_rows($res);
    if($num){
       header("location:empManage.php");
    这里错了,应该是 读取count值,然后判断count是否为1则可