2013-03-25 71 views
1

我在我的註冊頁面有這一行。PHP mysql結果問題

if (device_id_exists($_POST['device_id']) == true) { 
      $errors[] = 'Sorry the Serial Number \'' . htmlentities($_POST['device_id']) . '\' does not exist.'; 
    } 

我在我的功能頁面有這個。

function device_id_exists($device_id) { 
    $device_id = sanitize($device_id); 
    $query = mysql_query("SELECT COUNT(`numbers`) FROM `devicenumbers` WHERE `numbers` = '$numbers'"); 
    return (mysql_result($query, 0) == 0) ? true : false; 

如果我運行此查詢SELECT COUNT(數字) FROM devicenumbers WHERE= '1234567890' (有效數字),則返回1 =找到匹配吧?如果我輸入一個假編號,它將返回一個「0」。 發生了什麼事情時,有一個有效的號碼,它仍然返回錯誤號碼不存在。如果我將結果更改爲== 1,它會提交任何數字?即時通訊DB新手呼籲任何幫助表示讚賞。我希望我提供了足夠的信息。

+0

in device_id_exists()$數字來自哪裏?它應該是$ device_id? – Waygood 2013-03-25 17:29:00

+0

無關:'return(mysql_result($ query,0)== 0)? true:false;'可以簡化爲'return(mysql_result($ query,0)== 0);' – scones 2013-03-25 17:30:07

+0

IRRELEVANT:read [this](http://stackoverflow.com/questions/129677/whats-the-best - 方法 - 消毒 - 用戶輸入與php)關於衛生。 – cygorx 2013-03-25 17:34:29

回答

2

看起來像你在調用不正確的變量。在device_id_exists()函數中,您接受一個名爲$device_id的變量。但是,當您執行查詢時,您會調用看似未定義的變量:$numbers。我懷疑$numbers應改名爲$device_id

我看到您的$device_id來自表單帖子。我強烈建議你逃避變量,使用mysql_real_escape_string()來確保你的SQL注入受到保護。請注意,sanitize()不能防止SQL注入!

在另外一個音符,我建議utilizng mysql_num_rows()而不是mysql_result()因爲mysql_result()居然問數據庫服務器返回一個實際的結果,當你真正關心的是項是否存在,而不是它的實際值。

function device_id_exists($device_id) { 
    $device_id = sanitize($device_id); 
    $device_id = mysql_real_escape_string($device_id); 
    $query = mysql_query("SELECT COUNT(`numbers`) FROM `devicenumbers` WHERE `numbers` = '$device_id'"); 
    return mysql_num_rows($query) ? True : False; 
} 
+0

這是當你的註冊/登錄頁面上工作1:30時會發生什麼:)謝謝!我出於某種原因不停地看着它,並用true/false或0/1來思考它。 – sectech 2013-03-25 17:42:13

+0

我知道這種感覺很好!同時開發我建議打開PHP的顯示錯誤和錯誤報告輕鬆捕捉這些類型的場景。 – 2013-03-25 17:44:05

+0

有沒有一種方法可以強制它成爲用戶帖子的數字?所以我知道不會有任何字母,我知道它將始終在40以下。現在它不重要,但希望控制。 – sectech 2013-03-25 17:59:50

0

我曾與MySQL結果集類似的問題,它會返回nums_rows == 1,即使沒有記錄(在使用MAX()選擇查詢裏面 - 你的情況,你已經使用數())。 ..而不是檢查mysqlquery爲0,檢查它是否結果集爲空(這就是我如何解決我的問題)..例如。如果(!empty(mysql_result($ query)))?真假;