2016-06-18 98 views
0

我環顧四周,看到了它做了很多例子,但不幸未能落實到我目前使用的代碼。註冊時防止重複用戶名條目(PHP/MySQL的

我想防止用戶具有相同的用戶名註冊時我的網頁上,但我使用的代碼允許項是相同的。

如何修改下面的代碼,以防止這種情況發生?

<?php 
      require('db.php'); 
      // If form submitted, insert values into the database. 
      if (isset($_POST['username'])){ 
       $username = $_POST['username']; 
       $email = $_POST['email']; 
       $password = $_POST['password']; 
       $username = stripslashes($username); 
       $username = mysql_real_escape_string($username); 
       $email = stripslashes($email); 
       $email = mysql_real_escape_string($email); 
       $password = stripslashes($password); 
       $password = mysql_real_escape_string($password); 
       $trn_date = date("Y-m-d H:i:s"); 

       $res_login = $conn->query("select * from users where username='$username'"); 
       if($res_login -> num_rows > 0) 
       { 
         echo "Username is already exists please try with another username"; 
       } 
       else 
       { 
         $query = "INSERT into `users` (username, password, email, trn_date) VALUES ('$username', '".md5($password)."', '$email', '$trn_date')"; 
         $result = mysql_query($query); 
         if($result) 
         { 
            echo "You are registered successfully.</h3><br/>Click here to <a href='login.php'>Login</a></div>"; 
         } 
         else 
         { 
            echo "error in registration"; 
         } 
       } 
     } 
     ?> 

任何幫助將非常appre ciated。

+1

你爲什麼不使用用戶名作爲您的數據庫中的主鍵? – bhansa

+2

最簡單的方法是在插入之前搜索您的表格以查找用戶名。 –

+0

@u_mulder你能告訴我一個這樣做的例子嗎,對不起,我對此很新穎。 – bcssmc

回答

0

您還可以設置用戶名作爲唯一鍵指數,這將防止重複的行表進入。

及以下

<?php 
    require('db.php'); 
    // If form submitted, insert values into the database. 
    if (isset($_POST['username'])){ 
     $username = $_POST['username']; 
     $email = $_POST['email']; 
     $password = $_POST['password']; 
     $username = stripslashes($username); 
     $username = mysql_real_escape_string($username); 
     $email = stripslashes($email); 
     $email = mysql_real_escape_string($email); 
     $password = stripslashes($password); 
     $password = mysql_real_escape_string($password); 
     $trn_date = date("Y-m-d H:i:s"); 
     $query = "INSERT into `users` (username, password, email, trn_date) VALUES ('$username', '".md5($password)."', '$email', '$trn_date')"; 
     $result = mysql_query($query); 
     if (mysql_errno()) { 
      if (mysql_errno()==1062) { 
       echo "Username already taken."; 
      } 
     }else{ 
      if($result){ 
      echo "You are registered successfully.</h3><br/>Click here to <a href='login.php'>Login</a></div>"; 
     } 
     } 
    }else{ 
?> 

希望這對你的作品的評論代碼....

+0

謝謝你這個完美的作品!我非常感謝這方面的幫助 – bcssmc

0

最好的辦法是在你的數據庫中設置用戶名爲主鍵,它會給你重複的錯誤。

回答你問你的代碼,將搜索用戶名,如果存在,不要添加。

無論如何,你的問題是重複的。 Here

0

檢查唯一性的最佳方法是,您必須將用戶名設置爲數據庫中的主鍵,但是如果要手動檢查,然後使用select查詢來檢查該用戶名是否已存在於數據庫中?

 <?php 
      require('db.php'); 
      // If form submitted, insert values into the database. 
      if (isset($_POST['username'])){ 
       $username = $_POST['username']; 
       $email = $_POST['email']; 
       $password = $_POST['password']; 
       $username = stripslashes($username); 
       $username = mysql_real_escape_string($username); 
       $email = stripslashes($email); 
       $email = mysql_real_escape_string($email); 
       $password = stripslashes($password); 
       $password = mysql_real_escape_string($password); 
       $trn_date = date("Y-m-d H:i:s"); 

       $res_login = mysql_query("select * from users where username='$username'"); 
       $sql_num = mysql_num_rows($res_login); 
       if($sql_num > 0) 
       { 
         echo "Username is already exists please try with another username"; 
       } 
       else 
       { 
         $query = "INSERT into `users` (username, password, email, trn_date) VALUES ('$username', '".md5($password)."', '$email', '$trn_date')"; 
         $result = mysql_query($query); 
         if($result) 
         { 
            echo "You are registered successfully.</h3><br/>Click here to <a href='login.php'>Login</a></div>"; 
         } 
         else 
         { 
            echo "error in registration"; 
         } 
       } 
     } 
     ?> 

請使用準備好的語句進行最佳編程練習。訪問此鏈接: PDO::prepare manual

+0

感謝這似乎是最好的答案, 但是上面的代碼不適合我 – bcssmc

+0

請。用我用過的代碼編輯你的問題。 – Bhavin

+0

您在這裏混合使用API​​,這就是OP說它不起作用的原因。 OOP MySQLi和舊的'mysql_'(就像OP最初使用的那樣)。 – Qirel