2013-04-30 55 views
0

我在我的应用程序中使用了curl协议。检查mybb密码丢失应用程序用CURL登录

在我的论坛中的用户只允许使用这个应用程序日志后把这个应用程序扔在我的论坛上他的帐户,但我有一个问题在PHP端进行密码检查。 我认为我的php代码有问题,因为使用正确的用户名和密码我有这个错误: (不正确的用户名和/或密码)。

<?php 
// Database info 
$MySQL_Host = "localhost"; 
$MySQL_User = "lol"; 
$MySQL_Pass = "lol2"; 
$MySQL_DB = "lol3"; 
$tbl_name = "mybb_users"; 

function ParsePost() 
{ 
    $username = ''; 
    $password = ''; 

    $post = file_get_contents("php://input"); 

    $post = str_replace("&", " ", $post); 

    sscanf($post, "%s %s", $username, $password); 

    return array('user' => $username, 
        'pass' => $password 
       ); 
} 

function mysql_fetch_full_result_array($result) 
{ 
    $table_result = array(); 
    $r = 0; 

    if($result === true) 
    { 
     return $result; 
    } 

    if(mysql_num_rows($result) == 0) 
    { 
     return $result; 
    } 

    while($row = mysql_fetch_assoc($result)) 
    { 
     $arr_row = array(); 
     $c = 0; 

     while ($c < mysql_num_fields($result)) 
     {  
      $col = mysql_fetch_field($result, $c); 
      $arr_row[ $col -> name ] = $row[ $col -> name ];   
      $c++; 
     } 

     $table_result[ $r ] = $arr_row; 
     $r++; 
    } 

    return $table_result; 
} 

class DWAuth 
{ 
    var $keys; 

    function AddDWValue($val) 
    { 
     $this->keys[] = $val; 
    } 

    function GetAuthString() 
    { 
     $result = ""; 

     foreach($this->keys as $c) 
     { 
      $result .= $c."#"; 
     } 

     return $result; 
    } 
} 

class DB 
{ 
    var $connection; 
    var $started; 

    function start() 
    { 
     global $MySQL_Host, $MySQL_User, $MySQL_Pass, $MySQL_DB; 

     $this->connection = mysql_connect("$MySQL_Host", "$MySQL_User", "$MySQL_Pass"); 
     mysql_select_db("$MySQL_DB", $this->connection); 
    } 

    function query($query) 
    { 
     $result = mysql_query($query, $this->connection); 

     if($result) 
     { 
      return mysql_fetch_full_result_array($result); 
     } 
     else 
     { 
      return $result; 
     } 
    } 

    function end() 
    { 
     mysql_close($this->connection); 
    } 

    function isStarted() 
    { 
     return $started; 
    } 
} 

class Login 
{ 

    function CheckLogin($username, $password) 
    { 
     $db = new DB(); 
     $db->start(); 

     $query = "SELECT id, password, email FROM $tbl_name WHERE username='".$username."' AND password='".md5($password)."';"; 

     $result = $db->query($query); 

     $db->end(); 

     if($result == false) 
      return false; 
      fwrite($fh, $result); 
      fclose($fh); 


     if(md5(md5($row['salt']).md5($password)) == $result[ 0 ][ 'password' ]) 
     { 
      return array('id' => $result[ 0 ][ 'id' ], 
          'mail' => $result[ 0 ][ 'email' ], 
          'user' => $username 
         ); 
     } 
    } 
} 

$packet = new DWAuth(); 
$result = ParsePost(); 

if((empty($result[ 'user' ])) || (empty($result[ 'pass' ]))) 
{ 
    $packet->AddDWValue("fail"); 
    $packet->AddDWValue("Username and/or password is empty."); 
    $packet->AddDWValue(1); 
    $packet->AddDWValue("Anonymous"); 
    $packet->AddDWValue("[email protected]"); 
    $packet->AddDWValue(0); 

    echo $packet->GetAuthString(); 

    die(); 
} 

$login = new Login(); 
$result = $login->CheckLogin($result[ 'user' ], $result[ 'pass' ]); 

if($result == false) 
{ 
    $packet->AddDWValue("fail"); 
    $packet->AddDWValue("incorrect username and/or password."); 
    $packet->AddDWValue(1); 
    $packet->AddDWValue("Anonymous"); 
    $packet->AddDWValue("[email protected]"); 
    $packet->AddDWValue(0); 
} 
else 
{ 
    $sessionID = md5(rand()); 
    // How to make the return 
    $packet->AddDWValue("ok"); // fail or ok 
    $packet->AddDWValue("Success."); // Success or error 
    $packet->AddDWValue($result[ 'id' ]); // UserID 
    $packet->AddDWValue($result[ 'user' ]); // Username 
    $packet->AddDWValue($result[ 'mail' ]); // email 
    $packet->AddDWValue($sessionID); // sessionID 

    $db = new DB(); 
    $db->start(); 

    $query = "UPDATE users SET sid='".$sessionID."' WHERE id=".$result[ 'id' ]; 

    $result = $db->query($query); 
    $db->end(); 
} 

echo $packet->GetAuthString(); 

?> 
+0

嗨,这是太多的代码和方式太少的具体信息来帮助你。你能试着找出更多的问题吗?到底在哪里? – 2013-04-30 12:16:57

+0

我有“类登录”其实我不知道mybb使用什么方法来编码密码,因为我不能使用PHP代码来检查密码是否正确的问题。 – user1973003 2013-04-30 13:19:29

回答

1

我知道这可能有点太晚了,但我相信问题在您的查询本身。

变化:

$query = "SELECT id, password, email FROM $tbl_name WHERE username='".$username."' AND password='".md5($password)."';"; 

$query = "SELECT id, password, email FROM $tbl_name WHERE username='".$username."' OR email='".$username."';"; 

记住使用它们与数据库之前清空你的字符串!