Если вы разрешаете пользователю входить в систему со своим именем пользователя и паролем, вы должны убедиться, что каждый пользователь имеет уникальное имя пользователя.

Когда пользователь переходит на регистрацию на вашем сайте, проверьте имя пользователя либо после отправки формы, либо проверьте его с помощью AJAX при входе.

В этом руководстве я использую Jquery AJAX для проверки доступности имени пользователя.

1. Структура таблицы

Я использую таблицу users в учебном примере.

CREATE TABLE `users` ( 
   `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, 
   `username` varchar(80) NOT NULL, 
   `name` varchar(80) NOT NULL, 
   `password` varchar(80) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2. Конфигурация

Создайте новый файл config.php.

Завершенный код

<?php 
$host = "localhost"; /* Host name */ 
$user = "root"; /* User */ 
$password = ""; /* Password */ 
$dbname = "tutorial"; /* Database name */ 
$con = mysqli_connect($host, $user, $password,$dbname); 
// Check connection 
if (!$con) { 
    die("Connection failed: " . mysqli_connect_error()); 
}

3. HTML

Создание <div id='div_reg'>, содержащего поля регистрационной формы.

С полем ввода имени пользователя также создано <div id='uname_response' class='response'> для отображения сообщения на экране.

Завершенный код

<div class="container"> 
   <div id="div_reg"> 
     <h1>Registration</h1> 
     <div> 
       <input type="text" class="textbox" id="txt_name" name="txt_name" placeholder="Name"/> 
     </div> 
     <!-- Username --> 
     <div> 
        <input type="text" class="textbox" id="txt_uname" name="txt_uname" placeholder="Username" /> 
        <div id="uname_response" class="response"></div> 
     </div> 
     <div> 
        <input type="password" class="textbox" id="txt_pwd" name="txt_pwd" placeholder="Password"/> 
     </div> 
     <div> 
        <input type="password" class="textbox" id="txt_repwd" name="txt_repwd" placeholder="Re-type Password"/> 
     </div> 
     <div> 
        <input type="submit" value="Submit" name="but_submit" id="but_submit" /> 
     </div> 
  </div> 
</div>

4. CSS

/* Container */ 
.container{ 
  margin: 0 auto; 
  width: 70%; 
} 
/* Registration */ 
#div_reg{ 
  border: 1px solid gray; 
  border-radius: 3px; 
  width: 470px; 
  height: 370px; 
  box-shadow: 0px 2px 2px 0px gray; 
  margin: 0 auto; 
} 
#div_reg h1{ 
  margin-top:0px; 
  font-weight: normal; 
  padding:10px; 
  background-color: cornflowerblue; 
  color:white; 
  font-family: sans-serif; 
} 
#div_reg div{ 
  clear: both; 
  margin-top: 10px; 
  padding: 5px; 
} 
#div_reg .textbox{ 
  width: 96%; 
  padding: 7px; 
} 
#div_reg input[type=submit]{ 
  padding: 7px; 
  width: 100px; 
  background-color: lightseagreen; 
  border: 0px; color: white; 
} 
/* Response */ 
.response{ 
  padding: 6px; 
  display: none; 
} 
.not-exists{ 
  color: green; 
} 
.exists{ 
  color: red; 
}

5. PHP

Создайте новый файл uname_check.php отсюда, проверив значение $_POST['uname'] в таблице user и вернув количество строк.

Завершенный код

<?php 
include "config.php"; 
/* Get username */ 
$uname = $_POST['uname']; 
/* Query */ 
$query = "select count(*) as cntUser from user where username='".$uname."'"; 
$result = mysqli_query($con,$query); 
$row = mysqli_fetch_array($result); 
$count = $row['cntUser']; echo $count; 
?>

6. jQuery

Отправьте запрос AJAX на событие поля имени пользователя change и передавайте его значения в виде данных.

При успешной проверке значение ответа больше 0 или нет. Если оно больше 0, то отображается Username already in use сообщение в <div id='uname_response'>, иначе Available сообщение.

Завершенный код

<script> 
$(document).ready(function(){ 
  $("#txt_uname").change(function(){ 
    var uname = $("#txt_uname").val().trim(); 
    if(uname != ''){ 
      $("#uname_response").show(); 
      $.ajax({ 
        url: 'uname_check.php', 
        type: 'post', 
        data: {uname:uname}, 
        success: function(response){ 
           if(response > 0){ 
              $("#uname_response").html("<span class='not-exists'>* Username Already in use.</span>"); 
           }else{ 
              $("#uname_response").html("<span class='exists'>Available.</span>"); 
           } 
        } 
      }); 
    }else{ 
      $("#uname_response").hide(); 
    } 
   }); 
});
</script>

7. Заключение

В этом уроке я показал, как вы можете проверить, занято ли имя пользователя кем-то или нет с помощью AJAX. Вы можете отправить запрос AJAX на другие события, например. keyup, keydown и т. д. вместо change.

Первоначально опубликовано на makitweb.com.