2013-01-17 70 views
0

我已經爲我正在開發的應用上的用戶創建了一個任意的登錄系統,並且我正在使用mysqli從MySQL切換。不過,我有問題,因爲無論您輸入什麼數據,它都會成功登錄。顯然這是錯誤的,我認爲這與我的讀取語句有關。下面是代碼:mysqli bind_result和提取

$sid = /* arbitrary value */ 
$con = new mysqli($mysql_host,$mysql_user,$mysql_password,$mysql_database); 

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=?"); 

$stmt->bind_param("i", $sid); 
$stmt->execute(); 

$stmt->bind_result($schoolid, $password); 
$stmt->fetch(); 

$stmt->close(); 

有人知道是怎麼回事,並能夠描述它用簡單的英語,以相對編碼新手?

編輯:其餘的代碼是這樣的檢查系統。輸入的用戶ID是$sid,輸入的和加密的密碼是$cleanpwd

if ($sid == $schoolid and $cleanpwd == $password) { 
    header('Location: loginsuccess.php'); 
    } 

else { 
    header('Location: login.php?error=1'); } 
+0

「i」在哪裏定義? – Madbreaks

+0

你有表格嗎?哪個發送密碼/用戶名的數據?如果是這樣,參考$ _POST ['密碼']與$密碼,如果匹配然後登錄,否則重定向回主頁 –

+0

@Madbreaks你是什麼意思'我'?解釋哪一行?因爲我沒有看到'我'? –

回答

0

看來,如果這是一個登錄表單,你是首先獲取數據,然後處理,如果它是正確的?或者你是否試圖處理它是否正確(SQL中的用戶名和密碼組合)?因爲從這裏開始,您只需放入一個用戶標識並獲取用戶標識和密碼,而不檢查輸入的密碼是否與該用戶標識關聯的數據庫密碼匹配。

如果你想看看在SQL的用戶名和密碼匹配,你應該試試這個:

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=? AND pass=?"); 
$stmt->bind_param("is", $sid,$form_password); 
$stmt->execute(); 

否則,你需要檢查,如果數據以後相匹配。

if($_POST['form_pass'] == $password){ 
//log the user in 
}