Проверьте, существует ли имя пользователя с помощью PHP

Я хотел бы проверить, нет ли имени пользователя в моей базе данных. Если да, то я хотел бы перенаправить обратно на мою страницу регистрации. Код, который у меня есть, позволяет добавлять имена пользователей, но не проверяет, существует ли имя пользователя. Пожалуйста помоги!!! Это код для страницы register.php. Код полностью пропускает проверку на «имя пользователя» и вставляет в базу данных, если она существует или нет.

<?php error_reporting (E_ALL ^ E_NOTICE); include ('dbconn.php'); session_start(); $GLOBALS[$error_message]; $GLOBALS[$username]; if(isset($_POST['submit'])) { $error = array(); if(empty($_POST['username'])) { $error[] = 'Please enter a username. '; } else { $username = mysqli_real_escape_string($connection, $_POST['username']); } if(empty($_POST['password'])) { $error[] = 'Please enter a password. '; } else { $password = mysqli_real_escape_string($connection,$_POST['password']); } if(empty($_POST['cpassword'])) { $error[] = 'Please confirm password. '; } else { $cpassword = mysqli_real_escape_string($connection,$_POST['cpassword']); } if($password == $cpassword) { $mainpassword= $password; } else { $error[] = 'Your passwords do not match. '; } if(empty($error)) { $query = "SELECT * from User WHERE username=' ".$username." ' "; $result = mysqli_query($connection, $query) or die (mysqli_error($connection)); if(mysqli_num_rows($result)> 0) { $multi = "Sorry ! This Username is not available...Please choose another"; } else{ $sql="INSERT INTO user(username,password)VALUES ('$username','$password')"; mysqli_query($connection, $sql) or die(mysqli_error($connection)); header('Location:/MySQLi/confirmation.php'); } } else { $error_message = '<span class="error">'; foreach($error as $key => $values) { $error_message.="$values"; } $error_message.="</span><br/><br/>"; } } ?> 

Вы вручную добавляете пробелы вокруг своего имени пользователя, чтобы он выглядел так, как будто его не существует:

 $query = "SELECT * from User WHERE username=' ".$username." ' "; ^ ^ 

Должно быть:

 $query = "SELECT * from User WHERE username='".$username."' "; 

Использование подготовленного заявления позволит избежать этой проблемы и потенциальных проблем с внедрением sql за один раз:

 $query = "SELECT * from User WHERE username=?"; 

Также убедитесь, что вы последовательно используете свои имена таблиц и столбцов: User не обязательно совпадает с user .

Также обратите внимание, что вы никогда не должны хранить пароли открытого текста в базе данных, вы должны солировать и хешировать их .

Имена таблиц SQL могут быть чувствительны к регистру, поэтому «пользователь» и «пользователь» не совпадают. Если ваша таблица имеет имя «пользователь» с нижним регистром, тогда «SELECT * FORM User» с верхним регистром может не дать никаких результатов.

Если вы просто хотите проверить существование, вы можете выбрать «1» и добавить ограничение 1, чтобы запрос не просматривал всю таблицу, например:

 "SELECT 1 FROM user WHERE username='" . $username . "' LIMIT 1"; 

Или вы можете сделать свой столбец имени пользователя UNIQUE, тогда инструкция INSERT завершится с ошибкой, если имя пользователя уже существует, что дает вам простой запрос с одним запросом, который может вставлять нового пользователя, а также сообщать вам, если это имя уже выполнено.

Наконец, ваш код широко открыт для атак SQL Injection. Всегда избегайте ввода пользователем или используйте подготовленные заявления.