2014-05-22 87 views
0

我的註冊頁面出現問題。您可以通過使用其他電子郵件註冊一個已經註冊了用戶名的新用戶。使用不同的用戶名和電子郵件註冊新用戶

例如,第一次註冊:

用戶名:用戶1
密碼:123
電子郵件:[email protected]

消息接收:「您正在註冊」

另一註冊:

用戶名:用戶1
密碼:123
電子郵件:[email protected]

收到消息:「你註冊」

頁應顯示「用戶名已存在「但這不是偶然。我真的不知道缺少什麼。

下面是代碼:

<?php 

if(isset($_POST["register"])){ 

$username = $_POST['username']; 
$password = $_POST['password']; 
$email = $_POST['email']; 

if (!empty($username) && !empty($password) && !empty($email)){ 
    $checkusername = mysql_query("SELECT `id` FROM `user` WHERE `username` = '".$username."'") or die(mysql_error()); 
    $checkemail = mysql_query("SELECT `id` FROM `user` WHERE `email` = '".$email."'") or die(mysql_error()); 

    if(mysql_num_rows($checkusername) == 1){ 
     ?><p><?php echo "Username already exists"; ?></p><?php 
    } 
    if(mysql_num_rows($checkemail) == 1){ 
     ?><p><?php echo "Email already exists"; ?></p><?php 
    } 
    else{ 
     mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error()); 
     ?><p><?php echo "You are Registered"; ?></p><?php 
    } 
} 
else{ 

    if(empty($username)){ 
     $error[] = "Please insert a username"; 
    } 
    if(empty($password)){ 
     $error[] = "Please insert a password"; 
    } 
    if(empty($email)){ 
     $error[] = "Please insert a email"; 
    } 
    foreach ($error as $value) { 
     ?><p><?php echo "'".$value."'<br>"; ?></p><?php 
    } 
} 
} 
?> 

編輯:

感謝您的幫助球員,但我發現這個問題更好的解決方案。我使用$值也顯示「用戶名已存在」「電子郵件已存在」也改變mysql_num_rows($ checkusername)== 1mysql_num_rows($ checkusername)> 0爲你們中的一些人建議。下面是新的代碼:

<?php 
include "header.php"; 

if(isset($_POST["register"])){ 

$username = $_POST['username']; 
$password = $_POST['password']; 
$email = $_POST['email']; 

if (!empty($username) && !empty($password) && !empty($email)){ 

    $checkusername = mysql_query("SELECT `id` FROM `user` WHERE `username` = '".$username."'"); 
    $checkemail = mysql_query("SELECT `id` FROM `user` WHERE `email` = '".$email."'"); 

    if(mysql_num_rows($checkusername) == 0 && mysql_num_rows($checkemail) == 0){ 

     mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error()); 
     ?><p><?php echo "You are Registered"; ?></p><?php 
    } 
    else{ 
     if(mysql_num_rows($checkusername) > 0){ 
      $error[] = "Username already exists"; 
     } 
     if(mysql_num_rows($checkemail) > 0){ 
      $error[] = "Email already exists"; 
     } 
     foreach ($error as $value) { 
      ?><p><?php echo "'".$value."'<br>"; ?></p><?php 
     } 
    } 
} 
else{ 

    if(empty($username)){ 
     $error[] = "Please insert a username"; 
    } 
    if(empty($password)){ 
     $error[] = "Please insert a password"; 
    } 
    if(empty($email)){ 
     $error[] = "Please insert a email"; 
    } 
    foreach ($error as $value) { 
     ?><p><?php echo "'".$value."'<br>"; ?></p><?php 
    } 
} 
} 
?> 
+0

快速猜測> 0而不是==(或清除表格)。例如你已經有一個以上的用戶叫Fred了。 –

+1

您正在使用已棄用和過時的mysql連接。而且,你非常容易受到SQL注入的攻擊。另外,你的'if'是錯誤的。如果用戶名匹配,但電子郵件不會繼續創建新用戶。 – GolezTrol

+0

你爲什麼對此感到驚訝?你檢查重複的用戶名,但不要對這些信息做任何事情。你只是盲目地插入新的記錄。另外,你很容易受到[sql注入攻擊](http://bobby-tables.com) –

回答

1

你的第二個if應該是elseif

if(mysql_num_rows($checkusername) == 1){ 
    ?><p><?php echo "Username already exists"; ?></p><?php 
} 
elseif(mysql_num_rows($checkemail) == 1){ 
    ?><p><?php echo "Email already exists"; ?></p><?php 
} 
else{ 
    mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error()); 
    ?><p><?php echo "You are Registered"; ?></p><?php 
} 

你寫的方式,INSERT完成每當電子郵件測試失敗,但用戶名測試不會停止。

您還應該爲表中的用戶名和電子郵件列創建唯一鍵,以便無法創建重複項。

0

除上述之外,如果您有兩個用戶1已經從以前的測試== 1會返回false?嘗試> = 1?

我不確定||。 mysql_die()也是個好主意,但可能不是問題。

0

您是否可以在數據庫中擁有多個擁有此用戶名的用戶?可以嘗試這樣的事情

mysql_num_rows($checkusername) > 0 
0

條件在if是錯誤造成您插入用戶如果輸入的電子郵件不存在。

但是,檢查有點冒險。您檢查匹配數是否爲,正好爲 1.這表示如果由於某種原因用戶已經在數據庫中存在兩次,則可以繼續添加具有相同名稱的更多用戶。

最後,除了修復腳本中的所有邏輯之外,還要確保在用戶名字段中添加一個唯一索引,並在電子郵件字段中添加一個類似的索引。這樣,無論腳本中存在什麼缺陷,創建重複用戶在技術上都是不可能的。

儘管如此,您仍然需要修復聯繫MySQL的方式。你現在怎麼做已經過時了,非常危險。

相關問題