2013-08-24 51 views
0

嗨,大家好,我一直工作了12個小時,我似乎無法找到解決辦法。 我試圖比較用戶輸入數據庫結果例如$username == $result回聲「用戶名已被採取,但問題是它通過2個語句沒有中斷,如果我把一箇中斷退出循環,它總是檢查爲$email == $result2儘管在場上沒有進入任何電子郵件的PHP mysql bug查詢

if (isset($_POST['username']) or isset($_POST['email'])) { 
    $extract = mysql_query(" 
     SELECT 
      `username`, `email` 
     FROM `users` 
     WHERE `username`='$username' OR `email`='$email' 
    "); 

    $resultq = mysql_num_rows($extract); 
    while ($row = mysql_fetch_array($extract)) { 

     $result = $row['username']; 
     $result2 = $row['email']; 

     echo " " . $result; 
     echo " " . $result2; 

     if ($username == $result) { 
      echo " Username is already Taken!"; 
      // break; //whenever i put break, it always gives me the else if statement echo, despite not entering any email in the field 
     } //$pass = $_POST['pass']; 
     else if ($email == $result2) { 
      echo "Email Address is already used!"; 
      // break; 
     } else { 
     } 
    } 
} 
+0

向我解釋這是不同於[mysql phpmyadmin用戶輸入比較數據庫](http://stackoverflow.com/questions/18407734/mysql-phpmyadmin-user-input-compare-database) - 您可以使用變體我的解決方案也適用於此... –

+0

您的腳本容易受到SQL注入的影響。 – Gumbo

回答

2

從MySQL升級到庫MySQLi或PDO

不過;

$extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'"); 

$resultq = mysql_num_rows($extract); 
    if($resultq > 0) { 
     echo 'Either your username, or email is already taken!'; 
     return; 
    } 
0

見sniko爲回答您的INI問題。不過,看到下面......

你沒有定義$用戶名或$電子郵件

if ($username == $result)應該

if ($_POST['username'] == $result) 

,或者你可以在的開頭定義$ username和$電子郵件有條件的。

你也應該改變這樣的:

isset($_POST['username']) or isset($_POST['email']) 

這樣:

isset($_POST['username']) && isset($_POST['email']) 

,因爲你既取決於您的查詢。

和sniko一樣,切換到mysqli或PDO。 mysql_已被棄用。

全樣本:

if(isset($_POST['username']) && isset($_POST['email'])) 
{ 
    $username = $_POST['username']; 
    $email = $_POST['email']; 

    $extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'"); 

    $resultq = mysql_num_rows($extract); 
    if($resultq > 0) { 
     echo 'Either your username, or email is already taken!'; 
     return; 
    } 

} 

另外請注意,你不消毒的輸入。你可能會被這個輸入黑客攻擊。切換到mysqli或pdo並使用準備好的語句將有助於此。

+0

我在if語句之前有這個,這是一樣的嗎? $ email = $ _POST ['email']; $ username = $ _POST ['username']; – Daryl

+0

是的,它幾乎相同,只要分配去,但你仍然在查詢中調用兩個,所以你需要將它分離成兩個查詢或使這兩個字段都需要 –

+0

我要瘋了,我在想如何才能網站確定是否使用電子郵件或用戶名或只是兩個...這似乎是不可能沒有任何解決方案,但我找不到答案:(我很困擾這個我不能移動 – Daryl