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

123
13 апреля 2021, 21:10

Есть таблица 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"]);

Я попробовал сделать так:

$r = "SELECT `id` FROM `users` WHERE `login`=$logincheck";
else if ($login == $logincheck) {
    echo "Логин занят";
    exit();
  }

Но ничего не получается. Этот код просто напросто игнорируется.

UPD.

  $login = $_POST['login'];
  $name = filter_var(trim($_POST['name']),FILTER_SANITIZE_STRING);
  $password = filter_var(trim($_POST['password']),FILTER_SANITIZE_STRING);

$mysqli = mysqli_connect('localhost', 'root', '123', 'db');
$r = $mysqli->query("SELECT `id` FROM `users` WHERE `login`= $logincheck");
// узнаем количество строк, если не 0 - логин уже занят
$result = $r->num_rows;
if($result > 0) {
  echo "Логин занят";
  exit();
}

  if (mb_strlen($login) < 3 || mb_strlen($login) > 21) {
    echo "Логин должен быть от 3 до 21 символов.";
    exit();
  }
  else if (mb_strlen($name) < 3 || mb_strlen($name) > 19) {
    echo "Имя должно быть от 3 до 19 символов.";
    exit();
  } else if (mb_strlen($password) < 6 || mb_strlen($password) > 99) {
    echo "Пароль должен быть от 6 до 99 символов.";
    exit();
  } else if ($login == $logincheck) {
    echo "занято";
    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"]);

Не понимаю, почему не работает

Answer 1
$r = $mysqli->query("SELECT `id` FROM `users` WHERE `login`= $logincheck");
// узнаем количество строк, если не 0 - логин уже занят
$result = $r->num_rows;
if($result > 0) {
    echo "Логин занят";
    exit();
}
Answer 2
/*Если нажата кнопка на регистрацию,
     начинаем проверку*/
     if(isset($_POST['submit']))
     {
        //Утюжим пришедшие данные
        if(empty($_POST['email']))
            $err[] = 'Поле Email не может быть пустым!';
        else
        {
            if(emailValid($_POST['email']) === false)
               $err[] = 'Не правильно введен E-mail'."\n";
        }
        if(empty($_POST['pass']))
            $err[] = 'Поле Пароль не может быть пустым';
        if(empty($_POST['pass2']))
            $err[] = 'Поле Подтверждения пароля не может быть пустым';
        //Проверяем наличие ошибок и выводим пользователю
        if(count($err) > 0)
            echo showErrorMessage($err);
        else
        {
            /*Продолжаем проверять введеные данные
            Проверяем на совподение пароли*/
            if($_POST['pass'] != $_POST['pass2'])
                $err[] = 'Пароли не совподают';
            //Проверяем наличие ошибок и выводим пользователю
            if(count($err) > 0)
                echo showErrorMessage($err);
            else
            {
                /*Проверяем существует ли у нас 
                такой пользователь в БД*/
                $sql = 'SELECT `login` 
                        FROM `'. BEZ_DBPREFIX .'reg`
                        WHERE `login` = :login';
                //Подготавливаем PDO выражение для SQL запроса
                $stmt = $db->prepare($sql);
                $stmt->bindValue(':login', $_POST['email'], PDO::PARAM_STR);
                $stmt->execute();
                $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
                if(count($rows) > 0)
                    $err[] = 'К сожалению Логин: <b>'. $_POST['email'] .'</b> занят!';
                //Проверяем наличие ошибок и выводим пользователю
                if(count($err) > 0)
                    echo showErrorMessage($err);
                else
                {
                    //Получаем ХЕШ соли
                    $salt = salt();
                    //Солим пароль
                    $pass = md5(md5($_POST['pass']).$salt);
                    /*Если все хорошо, пишем данные в базу*/
                    $sql = 'INSERT INTO `'. BEZ_DBPREFIX .'reg`
                            VALUES(
                                    "",
                                    :email,
                                    :pass,
                                    :salt,
                                    "'. md5($salt) .'",
                                    0
                                    )';
                    //Подготавливаем PDO выражение для SQL запроса
                    $stmt = $db->prepare($sql);
                    $stmt->bindValue(':email', $_POST['email'], PDO::PARAM_STR);
                    $stmt->bindValue(':pass', $pass, PDO::PARAM_STR);
                    $stmt->bindValue(':salt', $salt, PDO::PARAM_STR);
                    $stmt->execute();
                    header('Location:'. BEZ_HOST .'/');
                    exit;
                }
            }
        }
     }
READ ALSO
Не выводит записи в блоге WP

Не выводит записи в блоге WP

Всем привет, ситуация следующаяЕсть главная страница, типа лендинга, ее сделала через файл index

106
Не выводится пагинация WordPress

Не выводится пагинация WordPress

Есть следующий код, но почему-то нумерация страниц вообще не выводится, не могу понять в чем причина

90
Как записать во внешнюю переменную значение полученное в Observable в RxJava2?

Как записать во внешнюю переменную значение полученное в Observable в RxJava2?

Не могу записать в переменную typesOfResponsibility значение it, полученное из ObservablefromCallable при подписке subscribe

116
Вывод stacktrace от Exception и Thread

Вывод stacktrace от Exception и Thread

Недавно обнаружил, что stacktrace, вызываемый у Exception на один метод короче, чем stacktrace вызываемый у ThreadПочему то Exception не добавляет в конец stacktrace...

111