При регистрации постоянно выдает ошибку "Пользователь с таким логином уже существует в базе данных" Что не так? помогите разобраться. PHP: <? // Страница регистрации нового пользователя if(isset($_POST['submit'])) { $err = []; // проверям логин if(!preg_match("/^[a-zA-Z0-9]+$/",$_POST['login'])) { $err[] = "Логин может состоять только из букв английского алфавита и цифр"; } if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30) { $err[] = "Логин должен быть не меньше 3-х символов и не больше 30"; } // проверяем, не сущестует ли пользователя с таким именем $query = mysqli_query($link, "SELECT COUNT(user_id) FROM users WHERE user_login='".mysqli_real_escape_string($link, $_POST['login'])."'"); if(mysqli_num_rows($query) > 0) { $err[] = "Пользователь с таким логином уже существует в базе данных"; } // Если нет ошибок, то добавляем в БД нового пользователя if(count($err) == 0) { $login = $_POST['login']; // Убераем лишние пробелы и делаем двойное шифрование $password = md5(md5(trim($_POST['password']))); mysqli_query($link,"INSERT INTO users SET user_login='".$login."', user_password='".$password."'"); header("Location: user-login.php"); exit(); } else { echo "<center><b>При регистрации произошли следующие ошибки: </b>"; foreach($err AS $error) { print $error."</center>"; } } } ?>
Вы не автор кода, так? Дело в том, что COUNT по-любому вернет вам строку с результатом. Вы проверяете не значение которое он вернул, а именно количество строк. Их всегда будет больше нуля. А вообще проверку уникальности лучше делать на стороне БД, через выставление уникального индекса на логин и проверки, не вернула ли БД ошибку нарушения индекса во время запроса на запись. Если не вернула, то ок, запись прошла. Если вернула - ой, логин не уникальный. --- Добавлено --- P.S. Не используйте шорттаги <?, используйте <?php
@Паша92 строка 35 нефильтрованый $login по теме строка 20 возвращает ноль а ноль уже строка надо так Код (Text): if($query > 0)
Ну в твоем случае можно сделать так: PHP: $query = mysqli_query($link, "SELECT COUNT(user_id) as cnt FROM users WHERE user_login='".mysqli_real_escape_string($link, $_POST['login'])."'"); $usr = mysqli_fetch_array($query, MYSQLI_ASSOC); if($usr['cnt'] > 0) { $err[] = "Пользователь с таким логином уже существует в базе данных"; }