Задать вопрос
IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

Как лучше сделать проверку на занятость логина?

Здравствуйте.

Есть таблица users

* id

* login

* name

* password

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

Есть код:
$login = $_POST['login'];
  $name = filter_var(trim($_POST['name']),FILTER_SANITIZE_STRING);
  $password = filter_var(trim($_POST['password']),FILTER_SANITIZE_STRING);


  if (mb_strlen($login) < 3 || mb_strlen($login) > 91) {
    echo "Логин должен быть от 3 до 91 символов.";
    exit();
  } else if (mb_strlen($name) < 3 || mb_strlen($name) > 99) {
    echo "Имя должно быть от 3 до 99 символов.";
    exit();
  } else if (mb_strlen($password) < 6 || mb_strlen($password) > 99) {
    echo "Пароль должен быть от 6 до 99 символов.";
    exit();
  }

  $mysqli = new mysqli('localhost', 'root', '123', 'db');
  $mysqli->query("INSERT INTO `users` (`login`, `password`, `name`)
    VALUES('$login', '$password', '$name')");


    $mysqli->close();
    header("Location: ".$_SERVER["HTTP_REFERER"]);


Подскажите пожалуйста, как лучше сделать? Расположить в блоке if или ещё как-то. И вообще какую лучше дать команду в БД для этого. Облазил достаточно много сайтов, но на большинстве из них только устаревшая информация.

Заранее спасибо каждому, кто поможет.
  • Вопрос задан
  • 545 просмотров
Подписаться 1 Простой 11 комментариев
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
$login = filter_input(INPUT_POST, 'login', FILTER_SANITIZE_STRING);


Заблуждения программистов об именах
Заблуждения программистов об именах — с примерами

Также рекомендую: о времени и о адресах

Правила ты можешь устанавливать на логин и пароль, но не на имя.
У логина проверяй только длину и допустимые символы, это все можно записать одной регуляркой или несколькими if'ами.

Дальше пытаешся вставить в базу, там конечно unicue на поле login, и при ошибке duplicate показывай клиенту, что уже занято.
Ответ написан
@Asjacker
$rs_username = $mysqli->query("SELECT * FROM users WHERE login='$login'")->rowCount();

проверяем, есть ли такой логин
если запрос отдал 0, то идет запись в бд
if($rs_username == 0) {
 $mysqli->query("INSERT INTO `users` (`login`, `password`, `name`)
    VALUES('$login', '$password', '$name')");
}
если такой логин уже существует то вылезает ошибка:
else {
                echo "<script>alert('Такой логин уже существует!')</script>";
            }


Вот код полностью :
if(isset($_POST['login'])) {
$login = $_POST['login'];
  $name = filter_var(trim($_POST['name']),FILTER_SANITIZE_STRING);
  $password = filter_var(trim($_POST['password']),FILTER_SANITIZE_STRING);


  if (mb_strlen($login) < 3 || mb_strlen($login) > 91) {
    echo "Логин должен быть от 3 до 91 символов.";
    exit();
  } else if (mb_strlen($name) < 3 || mb_strlen($name) > 99) {
    echo "Имя должно быть от 3 до 99 символов.";
    exit();
  } else if (mb_strlen($password) < 6 || mb_strlen($password) > 99) {
    echo "Пароль должен быть от 6 до 99 символов.";
    exit();
  }

  $mysqli = new mysqli('localhost', 'root', '123', 'db');
 $rs_username = $mysqli->query("SELECT * FROM users WHERE login='$login'")->rowCount();
  if($rs_username == 0) {
 $mysqli->query("INSERT INTO `users` (`login`, `password`, `name`)
    VALUES('$login', '$password', '$name')");
}{
$mysqli->close();
    header("Location: ".$_SERVER["HTTP_REFERER"]);}
else {
                echo "<script>alert('Такой логин уже существует!')</script>";
            }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы