Как лучше сделать проверку на занятость логина?
$login = filter_input(INPUT_POST, 'login', FILTER_SANITIZE_STRING);Заблуждения программистов об именахЗаблуждения программистов об именах — с примерами
Также рекомендую: о времени и о адресах
Правила ты можешь устанавливать на логин и пароль, но не на имя.
У логина проверяй только длину и допустимые символы, это все можно записать одной регуляркой или несколькими if'ами.
Дальше пытаешся вставить в базу, там конечно unicue на поле login, и при ошибке duplicate показывай клиенту, что уже занято.
$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>";
            }
    }