При вбивании в 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>
Новичкам пригодится:
Сначала проанализируй достоверность получения данных и вот подсказки
echo '<pre>';
print_r($checkRegUser);
echo '</pre>';
после $checkRegUser = checkRegUser($newLogin, $newName);
кавычки в коде замени у меня, если будешь копипастить
У тебя либо '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>";
Ответ именно на данный вопрос заключался в замене оператора AND
в sql-запросе на OR
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не могу CURL'ом получить содержимое страницы с сайта kaspikz Пример кода:
В один момент сломался вывод русского теста в консольИ внутри IDE (встроенных терминалах) и в cmd консоли я так и не понял что произошло
Пытаюсь сделать масштабирование pictureboxЧестно говоря, в c# я очень слаб