2011-11-28 60 views
0

我使用下面的代码进行登录。我无法比较匹配的密码客户端和数据库的登录?

$sid = trim($_POST["id"]); 
$pcode = trim(md5($_POST["pcode"])); 
include_once "../conf.php"; 
$pdo = connect(); 
$sql_log = "select * from `manager` where `sid` = $sid limit 1"; 
$do_log = $pdo->prepare($sql_log); 
$do_log->execute(); 
$num_log = $do_log->rowCount(); 
if($do_log){ 
    if($num_log == 1){ 
     while($row_log = $do_log->fetch()){ 
      $pcode_db = $row_log["pcode"]; //md5 password 
     } 

      if(var_dump($pcode == $pcode_db)){ //or $pcode == $pcode_db, both return false 
       return true; 
      }else{ 
       return false; // i get false for any password} 
     } 
    } 
} 

我无法登录到正确的密码!我在数据库中手动设置MD5密码与phpMyAdmin

+4

首先阅读这个 - > http://php.net/manual/en/security.database.sql-injection.php – ManseUK

+1

你是否在if条件中使用var_dump,你不能直接匹配它们吗? var_dump为变量var_dump($ pcode)== var_dump($ pcode_db) – sumi

+0

'md5($ _ POST [“pcode”],true)'给出了什么? – idm

回答

1

我不知道为什么这个工作,但它。我使用phpMyAdmin(插入)手动设置了md5密码(使用PHP执行md5)!

structure column pcode >>varchar(32) 

的MD5密码有32个字符,但是当它从插入在phpMyAdmin设置,P码列只包含31个字符。所以我使用了SQL在phpMyAdmin用于设置MD5密码!

update `manager` set `pcode` = MD5("my password") where `sid` = 7283 

然后它被完全设置为32个字符。有人能解释为什么发生这种情况?

+0

这就是我所说的。 MySQL MD5与PHP MD5不同。你需要使用一个或另一个。如果您使用的是SQL和MD5,则会得到与使用PHP和MD5不同的结果。 – phpmeh

-1

我在数据库中手动设置MD5密码与phpMyAdmin

MySQL的MD5是不一样的algoritham作为PHP MD5。你需要使用一个或另一个。

+0

您正在使用您的PDO错误,从而失去了内置于PDO中的sql注入保护。请阅读关于参数的文档。 – phpmeh

+0

我使用php并在我的数据库中设置md5。谢谢 – user1068953

-1

下面的代码就像你的代码,但很少更改sql查询。

$sid = trim($_POST["id"]); 
$pcode = trim(md5($_POST["pcode"])); 
include_once "../conf.php"; 
$pdo = connect(); 
$sql_log = "select * from `manager` where `sid` = $sid and `pcode` = $pcode"; 
$do_log = $pdo->prepare($sql_log); 
$do_log->execute(); 

if($do_log){ // if incoming sid and pcod will match 
    return true; 
}else{ 
    return false; 
} 

我不知道如何使用connect()函数。另一种连接SQL的方式是这样的:

$sid = trim($_POST["id"]); 
$pcode = trim(md5($_POST["pcode"])); 
include_once "../conf.php"; 

mysql_connect('server_name','user_name','password'); 
mysql_select_db('DB_name'); 
$query = mysql_query("select * from `manager` where `sid` = $sid and `pcode` = $pcode"); 
if(mysql_fetch_array($query)){ 
    return true; 
}else { 
    return false; 
    } 
+0

pcode不是我认为的数字 –

+0

如果id和pcode有validate函数,没关系。 –

+0

不幸的是,它的确如此 –

相关问题