2013-08-23 57 views
0

我是PHP和Mysql的新手,因爲某些原因,它只會檢查語句,如果($ email == $ result2)輸入是用戶名或電子郵件。我不知道爲什麼?有人可以從邏輯上解釋它,我堅持幾個小時搞清楚它。 :(謝謝請善待。我不知道這段代碼有什麼問題SQL

<?php 
session_start(); 
include_once("connect.php"); 

$email = $_POST['email']; 
$username = $_POST['username']; 
//echo $_POST['email']; 



if(isset($_POST['email'])) 
{ 
$extract= mysql_query("SELECT username, email FROM users"); 
$resultq = mysql_num_rows($extract); 
while($row= mysql_fetch_array($extract)) 
{ 

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


    //$pass = $_POST['pass']; 

    if($email == $result2) 
    { //check if there is already an entry for that username 
     echo "Email Address is already used!"; 
     exit(); //break; 
    } 
    if ($username == $result) 
    { 
     echo " Username is already Taken!"; 
      //mysql_query("INSERT INTO users (Username, Password) VALUES ('$user', '$pass')"); 
      //header("location:index.php"); 
     exit(); //break; 
    } 
    else 
    { 

    } 
} 

}

+0

什麼意思 –

+0

這可能會非常慢。如果你的用戶表中有大量的行呢?這是很多數據要返回和迭代。我認爲你應該重構這個以在你的查詢中包含電子郵件和用戶名參數*,並讓數據庫爲你完成工作。 –

+0

刪除'exit()'。刪除空的'else'。如果你希望第二個條件只在第一個條件爲false時被檢查,那麼使用'else if'。如果沒有,使用'if'。無論哪種情況,我都不需要'exit()'。 – Ariane

回答

0

我想你更好地使用你的電子郵件地址和用戶名欄中唯一的,那麼你就不需要再檢查一下,MySQL會爲你做的!

4

這就像寫的。如果任if()測試成功,你告訴腳本exit()行爲。

拆下出()調用...

你也真的需要在查詢中學習WHERE條款。您正在吮吸整個用戶表並逐個比較記錄。這相當於駕車去雜貨店,購買整個商店的庫存,把它帶回家......然後把它扔在垃圾裏,因爲你真正想要的只是一塊糖果。

+0

,但它只檢查($ email == $ result2),即使我的輸入是與數據庫匹配的用戶名,它也會說已經使用的電子郵件地址。我不知道是什麼問題... – Daryl

+0

所以開始調試。看看你的表單是否正確提交。看看$ email是否應該是你認爲的。看看$ result2是你認爲它應該是什麼,等等...... –

+0

每當我刪除isset()時它都很奇怪,它會檢查並運行我所有的語句,但給我一個錯誤,無法識別的索引,只要我把isset()錯誤消失,我的問題回來了......任何解釋?我試過WHERE子句,但使用where子句我只能檢查是否((用戶名==數據庫)&&(密碼==數據庫)),沒有明確標識是否用戶名或密碼被採取,這一直強調我12小時,我可以找不到任何解決方案 – Daryl

0

試試這個

if($email == $result2) 
{ //check if there is already an entry for that username 
    echo "Email Address is already used!"; 
    //---------removed that line 
} 
else if ($username == $result) //add else if instead of if 
{ 
    echo " Username is already Taken!"; 
     //mysql_query("INSERT INTO users (Username, Password) VALUES ('$user', '$pass')"); 
     //header("location:index.php"); 
    //----------removed that line 
} 
else 
{ 

} 

編輯:

改變這種

if(isset($_POST['email'])) 

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

此功能來檢查他們。你正在檢查電子郵件那就是爲什麼你沒有得到第二個如果。

0

在註釋掉第一個if語句(if($ username == $ result))後,它會進入第二個if語句(if($ username == $ result))嗎?

如果是這樣,那麼它會持續觸及exit()函數。

0

夥計們,我有點猜測了你的意見。由於某種原因,我需要包含isset($ _ POST ['username'])以及isset($ _ POST ['email']),以便我的if語句全部執行......也許它是isset檢查是否存在是用戶名的值。

+0

檢查我編輯的答案。 –

0

改變這一行的下面一行:

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

然後使用where子句如下:「它只是檢查聲明」

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