php
  • pdo
  • 2013-11-10 76 views -3 likes 
    -3

    我想知道我的下面的代碼有什麼問題。它所做的是檢查我的數據庫中是否存在用戶,如果它存在,則檢查它是否被禁用,然後檢查密碼輸入是否正確。無論如何,我有一個小問題,我有一個帳戶在我的數據庫下的'用戶'和用戶名'admin',但當我嘗試登錄時,它顯示:用戶管理不存在用戶不存在問題

    $check = $dbh->prepare("SELECT * FROM users WHERE username = '$username'"); 
    var_dump($check); 
    $check_array = $check->fetch(); 
    
    if ($check_array == 0){ 
        var_dump($check_array); 
        $error.= 'The user <strong>'.$username.'</strong> does not exist.<br>'; 
    }else{ 
        $r = ($check_array); 
        if ($r["banned"] == '1') { 
         $error.= 'You are currently banned, you can not log in.<br>'; 
        }else{ 
         $r = ($check_array); 
         if($r["password"] !== $password){ 
          $error.= 'The password you entered is incorrect.<br>'; 
         }else{ 
    

    這是在PHP編寫,PDO

    +0

    從哪裏得到這個'$ r [「禁止」]來自 –

    +0

    'var_dump'的結果是什麼? – Lion

    +0

    @ Mr.Alien $ r [「banned」]來自$ r =($ check_array);這意味着要高於$ r [「禁止」],我剛剛解決了這個問題 – user2963430

    回答

    2

    我相信這裏的關鍵問題是,你從來沒有執行的SQL語句,你只是準備了。然後提取會失敗,並且0將truthy設置爲false,這是fetch()返回的內容。請添加$ check-> execute();在你的第一個var_dump($ check)之前;並讓我們知道。

    也是重要的:

    請注意,你不應該在變量直接傳遞給準備語句,並應改用bind_param方法

    $check = $dbh->prepare("SELECT * FROM users WHERE username = ?"); 
    $check->bind_param(1, $username, PDO::PARAM_STR); 
    $check->execute(); 
    

    這是消毒用戶的更安全的方法輸入並應該支撐漏洞。

    +0

    謝謝,完美的作品。我現在可以登錄,只需要將其他部分的代碼修復一下就可以了。 – user2963430

    相關問題