2011-08-13 45 views
1

我創建了一個表單並使用php來檢查用戶名是否存在於數據庫中,如果是,則表單將不會提交併回顯用戶名已被佔用的更改我填寫表格,並提交一個名稱,我知道是在數據庫中,我得到的錯誤說,用戶名已存在,但我也得到文字說..感謝您註冊如果重複的用戶名爲

基本上它顯示正確的錯誤,但它仍然提交所有的數據到數據庫

你能看到什麼在我的代碼多數民衆贊成在造成這??

//Check to see if the username is already taken 
$query = "SELECT * FROM clients"; 
$result = mysql_query($query) or die(mysql_error()); // Get an array with the clients 
while($row = mysql_fetch_array($result)){ // For each instance, check the username 
if($row["username"] == $username){ 
    $usernametaken = true; 
}else{$usernametaken = false;} 
} 

// If the username is invalid, tell the user. 
// Or else if the password is invalid, tell the user. 
// Or else if the email or PayPal address is invalid, tell the user. 
// Else, if everything is ok, insert the data into the database and tell 
// the user they’ve successfully signed up. 

if($usernametaken) 
{ 
echo "That username has been taken."; 
} 

if(!preg_match('/^[a-zA-Z0-9]+$/', $username))// If our username is invalid 
{ 
echo "The username can only contain letters or numbers"; // Tell the user 
} 
else if(!preg_match('/^[a-zA_Z0-9]+$/', $password))// If our password is invalid 
{ 
echo "The password can only contain letters or numbers"; // Tell the user 
} 
// If our email or PayPal addresses are invalid 

else if(!preg_match("/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/", $email)) 
{ 
return "The email or PayPal address you entered is invalid."; // Tell the user 
} 
else{ 

// Inserts the data into the database 
$result = mysql_query("INSERT INTO clients (client_ID, username, password, email, paypal)"."VALUES ('', '$username', '$pw', '$email', '$paypal')"); 

echo "Thank you for signing up."; 
} 

?> 

回答

0

如果發現用戶名已被佔用,您沒有任何事情可以告訴腳本停止執行。重構你的if-else語句,如下所示:

if($usernametaken) 
{ 
    echo "That username has been taken."; 
} else { 
    // If username is not taken... 
} 
1

如果用戶名不好,你需要跳出你的函數。如果您不希望最後一行運行,您可以在preg匹配之前添加一個else。基本上你的程序流程是

//if username taken 
//if bunch of cases 
//else add client 

沒有什麼可以分隔你的兩個if語句。

你的SQL語句也是一個熊。你正在循環你的數據庫中的每個客戶端,看它是否是重複的。只需添加一個where語句

$query = "SELECT * FROM clients WHERE clientName = '$clientName'"; 
+0

所以,我會只使用 - $查詢= 「SELECT * FROM客戶其中username = '$用戶名'」; – Gezzamondo

+0

正確。那麼只要你的查詢結果至少有一行,你就知道它已經被使用了。我還會在你的數據庫用戶名列中添加一個唯一的約束。這將防止您的代碼中的錯誤允許用戶創建重複的用戶名。那會造成各種各樣的問題。錯誤發生! – mrtsherman

+0

所以在該行後,仍然使用此代碼 - $結果= mysql_query($查詢)或死(mysql_error()); ($ row = mysql_fetch_array($ result)){//對於每個實例,檢查用戶名 \t if($ row [「username」] == $ username){ \t \t \t $ usernametaken = true; \t} else {$ usernametaken = false;} } – Gezzamondo

0

而不是使用其他幾個ifs我可以推薦使用這種情況的例外情況。

示範:

<?php 
    try 
    { 
     if ($usernametaken) throw new Exception('That username has been taken.'); 


    // If we've reached here we know data has been checked properly 
    $result = mysql_query("INSERT INTO clients (client_ID, username, password, email, paypal)"."VALUES ('', '$username', '$pw', '$email', '$paypal')"); 

    echo "Thank you for signing up."; 

    } 
    catch (Exception $e) 
    { 
     echo $e->getMessage(); 
    } 
?> 
+0

異常情況比if-elses更重要。我不確定爲什麼這將是必要的,除了在視覺上更漂亮的代碼。 – ambagesia

+0

嗯,我相信在這個微不足道的情況下它並不重要.. – kjetilh

相關問題