$sql="select * from user where name='".$username."' and password='".$password."'";
这条SQL语句不应这样写,这样有漏洞

解决方案 »

  1.   

    本来更新应该是statu=0所有记录的ID最小的值
    比如表中下边几个字段值是:
    id  user  guanlian_id  statu
    1   aaa     1000           1
    2           1001           0  
    3           1002           0
    4           1005           0
    5           1019           0 
    运行这个程序我想要的结果是:
    id  user  guanlian_id  statu
    1   aaa     1000           1
    2   bbb     1001           1  
    3           1002           0
    4           1005           0
    5           1019           0 
    可现在运行结果却是:id  user  guanlian_id  statu
    1   aaa     1000           1
    2   adf     1001           1  
    3   aeg     1002           1
    4   bbb     1005           0
    5           1019           0 
      

  2.   

    完整代码是这样的:
    <?php
    function CheckUser($username,$password)
    {
      global $db;
      require("conn2.php");
      $sql="select * from users where name='".$username."' and password='".$password."'";
      $obj =SelectQuery($sql);
       if (count($obj)>0) 
      {        require_once("conn.php");
    $sql="select * from user where user_name='".$username."' and user_password='".$password."'";
    $query = $db->query($sql);
    $row=$db->fetch_array($query);
    $num2=$db->num_rows($query);
      if($num2!=0)
        {  
      if ($row)
        { 
     $user['username']=$row["user_name"];
     $user['guanlianname']=$row["guanlian_id"];
         $user['guanlianpassword']=$row["guanlian_password"];
     $user['flag']=1;
         }
    return $user;
    exit;
            } 
      else
        {     $sql="select min(id) from user where statu='0'";
        $query = $db->query($sql);
          if ($row = $db->fetch_array($query))
            {
         $id =$row["min(id)"];
         $sql = "update user set user_name='".$username."',user_password='".$password."',statu='1' where id='".$id."'";
         $query = $db->query($sql);
        }

        $sql="select user_name,guanlian_id,guanlian_password from user where user_name='".$username."' and user_password='".$password."'";
        $query = $db->query($sql);
          if ($row = $db->fetch_array($query))
            {
          $user['username']=$row["user_name"];
          $user['guanlianname']=$row["guanlian_id"];
          $user['guanlianpassword']=$row["guanlian_password"];
          $user['flag']=2;
             }
          return $user;
       exit;
          }  }
      else {
    $user['flag']=3;
    return $user;
      }
    }  
    ?>
      

  3.   

    2   adf     1001           1  
    3   aeg     1002           1
    adf aeg这两个用户是users(第一个查询语句是查users表的)这个表里有的用户。
    大家帮忙看看哪个循环有问题?
      

  4.   

    我觉得你直接用WHILE 的循环 例如:while($result=mysql_fetch_array("运行select * from user where statu=0的结果")  然后用$result[guanlian_id]可以顺序输出所有statu=0的ID,然后你用一个简单的大小判断运行完这个循环,那么就可以得到最小的ID,然后通过UPDATE 就可以实现你的结果了!
      

  5.   

    上面的代码中,最可能出现这种问题的地方就是这里了:if (count($obj)>0) 
    改成if (count($obj)>=0)试一下。
      

  6.   

    SelectQuery($sql)函数是这样的: function SelectQuery($sql)
    {
    $result=@mysql_query($sql,$this->link) or $this->ErrorMessage("Unable to perform this query:<br>\n $sql<br>");
    if (!$result)
    {
    return $none;  // 未找到   返回未定义变量
    }
    $count=0;
    while ($obj=@mysql_fetch_object($result))
    {
    $msgs[$count++]=$obj;
    }
    return $msgs;
    }

    function SelectQuery($sql)
    {
      $mysql=new mysql(dbname);
      $obj=$mysql->SelectQuery($sql);
      $mysql->close();
      return $obj;
    }
      

  7.   

    多条是什么意思?是比你预想的记录多吗?如果是这样可以用Group by或是用Distinct
    还有你最好把你的if语句再优化一下
    比如:
    if($num>0)
       if($row)
    ...
    完全可以:if(!$num && !$row)