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

При вбивании в 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>


Ответы (2 шт):

Автор решения: Shturmavik

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

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

  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>";
→ Ссылка
Автор решения: ARTISUC

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

→ Ссылка