2010-02-08 43 views
2

一種不明確的問題,但我試圖檢查用戶名是否已被佔用。我現在的代碼沒有錯誤,但它也不起作用,當回顯$ username變量時我什麼都沒有。將一個sql查詢的結果設置爲一個if語句中的一個變量,在php中

$sql="SELECT people_username FROM people WHERE people_username='{$_POST['username']}'"; 

    //Set the result of the query as $username and if the select fails echo an error message 
    if ($username = !mysql_query($sql,$con)) { 
     die('Error: ' . mysql_error()); 
    } 

    else if ($_POST['username'] == $username){ 
     $errors[ ] = 'This username is already in use, please try again...sorry'; 
    } 

它是語法錯誤還是我的邏輯錯誤?

+1

SQL注入攻擊風險,從'$ _POST'拉動方向 - 使用mysql_escape_real_string。 – 2010-02-08 21:32:45

+0

我已經用 $ _POST ['username'] = filter_var($ _ POST ['username'],FILTER_SANITIZE_STRING)過濾了它。 – CNJ 2010-02-08 21:34:42

+0

嘗試用真正的用戶名編碼$ _POST ['用戶名']來檢查數據庫連接是否首先啓動。 – Yada 2010-02-08 21:36:18

回答

2

我只想做

$resource = mysql_query("SELECT people_username FROM people WHERE people_username='".mysql_escape_string($_POST['username'])."'"); 
if(!$resource) { 
    die('Error: ' . mysql_error()); 
} else if(mysql_num_rows($resource) > 0) { 
    $errors[ ] = 'This username is already in use, please try again...sorry'; 
} else { 
    //username is not in use... do whatever else you need to do. 
} 
+0

謝謝,這就是我一直在尋找的! – CNJ 2010-02-08 21:41:37

+0

不要複製和粘貼,我沒有包括mysql_real_escape_string,以及我剛剛做的。 – seventeen 2010-02-08 21:50:35

+0

是的,我已經消毒了,謝謝。 – CNJ 2010-02-08 21:52:27

0

你的代碼是錯誤的。

應該是這樣的:

$sql="SELECT people_username FROM people WHERE people_username='".mysql_escape_string($_POST['username'])."'"; 

//If the select fails echo an error message 
if (!($result = mysql_query($sql,$con))) { 
    die('Error: ' . mysql_error()); 
} 

$data = mysql_fetch_assoc($result); 

if ($data == null){ 
    $errors[ ] = 'This username is already in use, please try again...sorry'; 
} 

注意,出於安全考慮,你需要逃避你的SQL查詢使用字符串。

1

如果一些厚顏無恥的用戶偶然嘗試:'; DROP people; --作爲用戶名,您會遇到很大麻煩。

您可能需要檢查以下堆棧溢出後關於這一主題延伸閱讀:

至於其他的問題,其他的答案已經解決的有效解決方案。但是,請確保先修復SQL注入漏洞。這永遠不會太早。

+0

我想你不能再那樣做了。你可以擴展select,但是確保mysql_query只執行1個查詢。 – useless 2010-02-09 01:10:27

0
  1. mysql_query($sql,$con)返回一個結果(可能爲空)
  2. 你是不是測試與if($var = !'value')任何情況下,你只是分配一個否定的結果集的變量$username(什麼野獸是,我不知道)

我的建議:簡化代碼,不要用多個任務重載代碼行。 3.列表項目

+0

對於ifs,我們經常忘記使用==:所以這是錯誤的if($ a = 3),因爲它是一個將$ a的值更改爲3並且總是爲真的賦值。要檢查'$ a'是否等於'3',我們需要'if($ a == 3)' – 2010-02-08 21:45:35

相關問題