Как предотвратить дублирование имен пользователей при регистрации? PHP / MySQL

Я делаю систему регистрации / регистрации, и я приближаюсь к завершению моей регистрационной части кода. Единственная проблема, с которой я сталкиваюсь, – это сделать так, чтобы пользователи не могли регистрироваться с дублированными именами пользователей. Я хочу, чтобы он работал так, чтобы моя база данных не принимала эту информацию, и она сообщит пользователю об ошибке. Любая помощь приветствуется.

Мой PHP

<?php include ('database_connection.php'); if (isset($_POST['formsubmitted'])) { $error = array();//Declare An Array to store any error message if (empty($_POST['name'])) {//if no name has been supplied $error[] = 'Please Enter a name ';//add to array "error" } else { $name = $_POST['name'];//else assign it a variable } if (empty($_POST['e-mail'])) { $error[] = 'Please Enter your Email '; } else { if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) { //regular expression for email validation $Email = $_POST['e-mail']; } else { $error[] = 'Your EMail Address is invalid '; } } if (empty($_POST['Password'])) { $error[] = 'Please Enter Your Password '; } else { $Password = $_POST['Password']; } if (empty($error)) //send to Database if there's no error ' 

Вы можете сделать это так, когда пользователь отправит имя пользователя, например, и нажмите «Отправить», вы можете написать этот код или добавить его в свой код с вашей модификацией:

 <?php $connect = mysql_connect('whatever','whatever','whatever'); $database = mysql_select_db('your dbname'); $username = $_POST['username']; if(isset($username)){ $mysql_get_users = mysql_query("SELECT * FROM table_name where username='$username'"); $get_rows = mysql_affected_rows($connect); if($get_rows >=1){ echo "user exists"; die(); } else{ echo "user do not exists"; } } ?> 

Я думаю, что что-то вроде этого – то, что вы ищете:

 if (isset($_POST['user'])) { $user = $_POST['user']; if (mysql_num_rows(yourFunctionForQueryingMySQL("SELECT * FROM tablename WHERE user='$user'"))) echo "Name is taken"; else echo "Name available"; } 

Есть две вещи, которые вы должны сделать.

  1. Сделайте имя пользователя основным ключом в таблице базы данных. Это легко сделать с помощью phpmyadmin.

  2. Подтвердить перед вставкой.

Для второго шага, вот алгоритм. Вы можете реализовать его по-своему, используя pdo, mysqli или даже mysql (хотя сейчас это не рекомендуется).

Алгоритм в конце вашего кода (т. Е. Если нет ошибок) …

Выберите записи, соответствующие USERNAME, поставленные в сообщении.

Если он существует, выведите ошибку.

Если он не существует, вставьте его.

Надеюсь, это поможет.

Я использовал метод PDO и class, может быть полезным.

 //function for checking if the user already exists in the database public function userExists($username){ //prepared statements for added security $query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?"); $query->bindValue(1, $username); try{ //execute the query $query->execute(); $rows = $query->fetchColumn(); //if a row is returned...user already exists if($rows == 1){ return true; }else{ return false; } //catch the exception }catch (PDOException $e){ die($e->getMessage()); } }//end function userExists 

обратите внимание на подготовленные заявления – определенно путь вперед

вы можете сделать вот так:

 <?php //---put this code before "if (empty($error))"------ $username = $_POST['username']; //---if your table user is "table_user" and fieldname username is "username" $query = 'SELECT username FROM table_user WHERE username = "' . $username . '" LIMIT 1'; $result = mysql_query($query) $totalNumRowResult = mysql_num_rows($result); if($totalNumRowResult > 0) { $error[] = 'User exist'; } ?> 

Надеюсь, это поможет.

Вы должны (можете) сделать условие, запрещающее регистрацию, если имя пользователя уже существует.

  $sql="SELECT username FROM tablename WHERE username='".$username."'";//looking through existing usernames $resul=mysql_query($sql); $num = mysql_num_rows($resul); if ($num !=0){ //If there is already such username... die("There is user with that username."); // ...kill the script! } else //continue with the script