2012-06-08 189 views
1

我想檢查一下用戶名和密碼是否存在於我的數據庫中,但是我的代碼有問題,我找不到它。檢查用戶名和密碼

$result=mysql_query("SELECT C_ID FROM customer WHERE C_NNAME ='".$_POST['username']."' AND C_PASS = '".$_POST['pass']."'"); 

if($result=='FALSE'){ 
    $word .= select_key('keyword', 'K_ID', 'password'); 
} 
else 
{ 
    $word.= select_key('keyword', 'K_ID', 'Please Complete Feilds');  
} 
+1

請格式化你的問題,使其可讀性,也請說明應該發生什麼以及實際發生了什麼? –

+5

[Bobby tables](http://bobby-tables.com/)再次騎行; [不要使用'mysql_query'](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)。 – Quentin

+0

停止使用mysql_ *函數並開始使用PDO或mysqli(你很容易被sql注入(就像Quentin提到的那樣)。你也不是指$ _POST ['username']而不是$ post ['username']? – Bono

回答

2

除了你的SQL注入的問題,您使用的是超全局數組$_POST錯誤(因爲你是它命名$post)。

嘗試使用正確的超全局變量名稱 - 以及Google for SQL注入。

+0

你當然不知道,雖然它可能是這樣,但從問題來看,還有_is_ a可能存在這樣一個變量,並且保存着與$ _POST相同的數據。 – blockhead

+0

@blockhead你是完全正確的 - 我根據他的代碼的其餘部分做出這個假設 – Repox

1
$name = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['pass']); 
$result = mysql_query("SELECT C_ID FROM customer WHERE C_NNAME ='$name' AND C_PASS = '$password'"); 

if(mysql_num_rows($result) > 0) { 
    // There's a match 
} else { 
    // There's no match 
} 

另外請不要使用mysql_函數使用mysqli_或存儲過程。 該代碼是不安全的反對SQL注入不是一個好主意,在公共網站上使用它。

+0

在mysql函數上使用'mysqli'函數不guara防止SQL注入攻擊,因爲您仍然可以使用'mysqli'編寫不安全的SQL。在mysqli API中使用準備好的語句是保護手段之一。 – user7116

+0

我沒有說任何關於mysqli_函數在防止sql注入方面更好。我說上面的代碼是不安全的。準備好的語句是幫助防止sql注入的方法。 –

0

您需要使用mysql_num_rows來查看是否有任何結果。