Не пишет ошибку PHP

181
29 апреля 2022, 01:00

При вбивании в input существующего имени не пишит ошибку ВЫБРАННОЕ ИМЯ УЖЕ ЗАНЯТО, а всё остальное работает. В чём может быть глюк?

function checkRegUser($newLogin, $newName) {
    global $mysqli;//переменная общего подключения к бд
    $sql = "SELECT * FROM users WHERE login = '$newLogin' AND name = '$newName'";
    $result = mysqli_query($mysqli, $sql);
    $a = mysqli_fetch_assoc($result);
    return $a;
}
if(isset($_POST['newReg'])) {
    $newLogin = $_POST['newLogin'];
    $newName = $_POST['newName'];
    $newPass = $_POST['newPass'];
    
    $checkRegUser = checkRegUser($newLogin, $newName);
    if($checkRegUser['login'] == $newLogin) {$errors = "<p>Выбранный логин уже занят</p>";}
    if($checkRegUser['name'] == $newName) {$errors = "<p>Выбранное имя уже занято</p>";}
    if(empty($_POST['newLogin'])) {$errors = "<p>Вы не ввели логин</p>";}
    if(empty($_POST['newName'])) {$errors = "<p>Вы не ввели имя</p>";}
    if(empty($_POST['newPass'])) {$errors = "<p>Вы не ввели пароль</p>";}
}

<form action="" method="post">
                        <input type="text" name="newLogin" placeholder="Введите логин">
                        <br>
                        <input type="text" name="newName" placeholder="Введите имя">
                        <br>
                        <input type="password" name="newPass" placeholder="Введите пароль">
                        <br>
<?=$errors?>
                        <button type="submit" name="newReg">Регистрация</button>
                        <br>
</form>
Answer 1

Новичкам пригодится:

Сначала проанализируй достоверность получения данных и вот подсказки

  1. Напиши
echo '<pre>';
print_r($checkRegUser);
echo '</pre>';

после $checkRegUser = checkRegUser($newLogin, $newName);

кавычки в коде замени у меня, если будешь копипастить

  1. Заполни поля и нажми кнопку Регистрация
  2. Посмотри есть ли в массиве заполненный или вообще хотя бы существующий 'name'. А массив отобразится тут же на экране из-за введённого кода print_r
  3. Если 'name' нет, значит из базы не дёргает данные и смотри в стороны получения данных из mysql

У тебя либо 'name' не прилетает в ответном массиве, либо ‘name' пустой, либо с кодировкой что-то

Спасение для первоначального анализа

echo '<pre>';
print_r($checkRegUser);
echo '</pre>';

ещё есть

var_export($checkRegUser);

И дальше ты сможешь понять что не так с ‘name’ в массиве, который возвращается из базы данных

Если данных нет, от укажите четвёртым параметром в mysqli-connect() название базы данных php.net function.mysqli-connect.php

Ответ на вопрос:

Добавляем $errors = ""; перед if(isset($_POST['newReg'])) { и правим в такой вид каждый $errors .=

И имеем:

$errors = "";
if(isset($_POST['newReg'])) {
    $newLogin = $_POST['newLogin'];
    $newName = $_POST['newName'];
    $newPass = $_POST['newPass'];
    
    $checkRegUser = checkRegUser($newLogin, $newName);
    if($checkRegUser['login'] == $newLogin) {$errors .= "<p>Выбранный логин уже занят</p>";}
    if($checkRegUser['name'] == $newName) {$errors .= "<p>Выбранное имя уже занято</p>";}
    if(empty($_POST['newLogin'])) {$errors .= "<p>Вы не ввели логин</p>";}
    if(empty($_POST['newName'])) {$errors .= "<p>Вы не ввели имя</p>";}
    if(empty($_POST['newPass'])) {$errors .= "<p>Вы не ввели пароль</p>";}
}

У тебя всегда в конце выводился крайний $errors, так как он перезаписывал собой остальные. А необходимо либо складывать их в массив, либо конкатенацию производить, что я привёл в примере.

С массивом было бы как

$errors = [];
$errors[] = "<p>text</p>";
$errors[] = "<p>text</p>";
Answer 2

Ответ именно на данный вопрос заключался в замене оператора AND в sql-запросе на OR.

READ ALSO
Проблема с CURL получением содержимого

Проблема с CURL получением содержимого

Не могу CURL'ом получить содержимое страницы с сайта kaspikz Пример кода:

181
Поиск по JSON | MySql

Поиск по JSON | MySql

Есть json столбец

121
не выводит русский в консоль windows

не выводит русский в консоль windows

В один момент сломался вывод русского теста в консольИ внутри IDE (встроенных терминалах) и в cmd консоли я так и не понял что произошло

200
Ошибка при попытке масштабирвоания изображения picturebox

Ошибка при попытке масштабирвоания изображения picturebox

Пытаюсь сделать масштабирование pictureboxЧестно говоря, в c# я очень слаб

141