Как построить ограничение на доступность пользователя при регистрации с помощью PHP?

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

Код, который я использовал, приведен ниже в register.php.

<?php       
include"connection.php";          

if (!isset($_POST['submit'])) //if the user clicks the submit button then the PHP code   POST the details 
{
$user_name = $_POST['username']; 
$user_password = $_POST['password']; 
$user_email = $_POST['email']; 

if($user_name && $user_password && $user_email)
    {
        $query = mysql_query("INSERT INTO users (username, password, email, type) 
        VALUES ('$user_name', '$user_password', '$user_email', '0')");
        mysql_query($query); 
echo '<script type="text/javascript">alert("You have been registered");</script>';
}
else {
    echo '<script type="text/javascript">alert("All fields required");</script>'; 
   header("location:user_create.html");
}
}
?> 

person JustLift    schedule 05.04.2014    source источник
comment
Повторяйте за мной: я не буду подвергать своих пользователей опасности из-за наличия уязвимого приложения. stackoverflow.com/ вопросы/60174/   -  person PeeHaa    schedule 05.04.2014


Ответы (2)


Прежде всего:

  • фильтровать данные! Пользователи могут отправлять небезопасные данные, поэтому вам следует использовать функцию mysql_escape_string() (это минимальное требование). Читайте о SQL-инъекциях и XSS.
  • хеш пароль! Минимальное требование — использовать функцию md5, читайте о хешировании паролей: http://www.php.net/manual/en/faq.passwords.php

Используйте SQL-запрос, чтобы проверить, доступен ли логин пользователя:

$result = mysql_query('SELECT * FROM users WHERE username="'.mysql_escape_string($_POST['username']).'"');
if(mysql_fetch_array($result)) {
   // username is unavailable, do something ....
}
else {
  // register user
}

Обратите внимание, что функция mysql устарела с PHP 5.5. Вместо этого используйте функции PDO.

person vanion    schedule 05.04.2014

Используйте ключ UNIQUE в db для поля имени пользователя. Затем вы можете использовать mysql_error(), чтобы поймать ошибку и показать пользователю, что он не может использовать это имя пользователя, потому что оно уже хранится в базе данных.

person MrDevel    schedule 05.04.2014
comment
Разработка, основанная на ошибках, кажется мне неправильным подходом. - person PeeHaa; 05.04.2014
comment
@MrDevel, имя пользователя — это тип данных Varchar, поэтому может ли это быть ключ UNIQUE? - person JustLift; 05.04.2014
comment
@PeeHaa Я так не думаю. Таким образом, он может использовать функции БД, не создавая ничего нового. В противном случае он должен искать другим запросом, если имя пользователя уже сохранено, и это неправильный подход для меня. - person MrDevel; 05.04.2014
comment
@SandeshMgr, мой комментарий был удален, кстати, вы можете использовать УНИКАЛЬНЫЙ ключ для типа данных varchar. Я не знаю, почему мой пост имеет -1, но я думаю, что это может быть хорошим способом решить проблему. - person MrDevel; 07.04.2014