Я делаю систему регистрации / регистрации, и я приближаюсь к завершению моей регистрационной части кода. Единственная проблема, с которой я сталкиваюсь, – это сделать так, чтобы пользователи не могли регистрироваться с дублированными именами пользователей. Я хочу, чтобы он работал так, чтобы моя база данных не принимала эту информацию, и она сообщит пользователю об ошибке. Любая помощь приветствуется.
Мой 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"; }
Есть две вещи, которые вы должны сделать.
Сделайте имя пользователя основным ключом в таблице базы данных. Это легко сделать с помощью phpmyadmin.
Подтвердить перед вставкой.
Для второго шага, вот алгоритм. Вы можете реализовать его по-своему, используя 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