2016-07-25 81 views
-2

我已經搜索了很長一段時間,但沒有運氣。我想檢查一個給定的用戶名和密碼是否正確,然後回顯一些內容,但它不起作用。在此之後,我想運行另一個查詢。如何檢查是否有東西被提取,然後運行多個查詢

<?php 
    require "conn.php"; 
    $status=1; 
    $user_name = $_POST["user"]; 
    $user_pass = $_POST["pass"]; 

    $sql = "select * from tbl_client where username = :user and password = :pass"; 
    $sth = $dbL->prepare($sql); 
    $sth->execute(array(':user => $user_name' , ':pass => $user_pass')); 
    //$sth->execute(':user' => $user_name, ':pass' => $user_pass); 

    $row = $sth->fetch(PDO::FETCH_NUM); 
    if ($row) { 
     echo 'login success , Hello'; 
    } else { 
     echo 'login failed'; 
    } 

    $sql = 'insert into login_status (username, status) values (:user, :status)'; 
    $sth = $dbL->prepare($sql); 
    $sth->execute(array(':user => $username' , ':status => $status')); 
?> 
+3

**決不店純文本密碼!**請使用PHP的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼安全性。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。確保你*** [不要越獄密碼](http://stackoverflow.com/q/36628418/1011527)***或在哈希之前使用其他任何清理機制。這樣做*更改密碼並導致不必要的附加編碼。 –

+0

好的建議感謝 –

回答

1
$sth->execute(array(':user => $username' , ':pass => $user_pass')); 

這是完全錯誤的!你的數組包含2個字符串,它應該包含2個鍵 - 值對(在SQL查詢鍵=參數值=你想傳遞給數據庫驅動程序是什麼)

試試這個

$sth->execute(array(':user' => $username , ':pass' => $user_pass)); 
+0

OP爲什麼要「試試這個」?爲什麼它「完全錯誤」?一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。 –

+3

大部分正確!我只會提出兩點建議,這也會影響代碼片段中的最後一行('$ sth-> execute(array(':user'=> $ user_name,':status'=> $ status));'' ),而變量實際上是'$ user_name'而不是'$ username'。 –

+0

@ChrisForrence仍然沒有運氣兄弟,它不起作用,即使用正確的用戶和傳球,它也會回顯「登錄失敗」。 –

相關問題