2012-10-03 27 views
1

所以我有這個驗證碼。除了輸入錯誤的用戶名時,其他所有功能都可以使用。它只是一直顯示在頁面中:「無法運行查詢:」< - 僅此。我不知道什麼是錯的。請幫忙。無法運行查詢:??沒有查詢錯誤消息導致我無處可以

這裏是我的那部分代碼:

if($UserN){ 
    if($UserP){ 
     require("connect.php"); 

     $query = mysql_query("SELECT * FROM customer WHERE UserName = '$UserN'"); 
     $numrows = mysql_num_rows($query) or die ('Unable to run query:'.mysql_error()); 

     if($numrows == 1){ 
      $row = mysql_fetch_assoc($query)or die ('Unable to run query:'.mysql_error()); // fetch associated: get function from a query for a database 
      $dbpass = $row['PassWord']; // read password of inputted user from the query. 
      $dbuser = $row['UserName']; // read username from the query 
      $dbactive = $row['Active']; // read if user is active 
      $dbid = $row['CustNum']; 

      if($UserP == $dbpass){ 
       if($dbactive == 1){ 
       //set session information 
       $_SESSION['CustNum'] = $dbid; 
       $_SESSION['UserName'] = $dbuser; 

       echo "<br><br><center><b>You have been logged in as <b>$dbuser</b>. <a href='orderform.php'>Click here</a> to go to the member page.</b></center><br><br>"; 
       } 
       else 
        echo "$form <center><b>You need to activate your account.</b></center></br>"; 
      } 
      else 
       echo "$form <center><b>You did not enter a correct password.</b></center> </br>"; 
     } 
     else 
      echo "$form <center><b>The username you entered was not found.</b></center></br> "; 

     mysql_close(); 
    } 
    else 
     echo "$form <center><b>You must enter your password. </b></center></br>"; 
} 
else 
    echo "$form <center><b>You must enter your username. </b></center></br>"; 
+4

您的代碼很容易受到SQL注入的位置:'的mysql_query( 「SELECT * FROM客戶其中username = '$用戶N'」);' –

+1

更好的希望Little Bobby Tables永遠不會嘗試登錄。 –

+0

這是非常不安全的,不應該暴露給公衆。一個[自動SQL漏洞測試工具](http://sqlmap.org/)將有一個與此相關的現場日。如果你有這樣的代碼,只是被黑客攻擊纔是時間問題。 – tadman

回答

2

您的問題似乎是,mysql_num_rows()返回0,在無效的用戶名的情況。

你可以調整你的代碼是這樣的:

$numrows = mysql_num_rows($query); 
if ($numrows === FALSE) 
    die ('Unable to run query:'.mysql_error()); 
if ($numrows === 0) { 
    echo "User not found!"; 
} 

注意使用===測試mysql_num_rows()是否返回0或FALSE。

+0

這幫了很多。謝謝! :D – user1717305

+0

@ user1717305如果它幫助了很多,請單擊複選標記。 –

0
$numrows = mysql_num_rows($query) or die ('Unable to run query:'.mysql_error()); 

如果您的查詢返回0行,那麼這第一部分將評估爲false。那將觸發die()

0

將此行更改爲if($numrows == 1){if($numrows !== FALSE && $numrows >= 1){,因爲您希望條件檢查通過,如果有任何結果集返回。

或者,如果有會一直只有1返回的記錄,然後if($numrows !== FALSE && $numrows === 1){