#php #html #mysql
#php #HTML #mysql
Вопрос:
У меня есть HTML-форма с текстовым полем, в котором вы вводите имя пользователя и кнопку входа. Когда пользователь нажимает кнопку входа в систему, я хочу, чтобы был запрошен запрос к базе данных, и если есть совпадение, эхо-запрос. У меня есть такой код:
<form class="login_box" method="POST">
<input id="input-boxes1" type="text" name="username" value="" placeholder="Username">
<input id="button-1" type="submit" name="login" value="Login">
</form>
// Checks if login button is pressed
if (isset($_POST['login'])) {
$enteredUser = $_POST['username'];
$sql = "SELECT * FROM user WHERE username='$enteredUser'";
if ($result = mysqli_query($link, $sql)) {
echo 'it works';
}
}
Я хочу, чтобы он выдавал «это работает», если есть совпадение. Однако он всегда повторяет это, несмотря ни на что. База данных работает так, как я ее добавил и выбрал из нее в других файлах, и база данных также правильно связана с этой формой.
Любая помощь была бы отличной, спасибо!
Комментарии:
1. Единственный раз, когда сообщение не повторяется, — это когда запрос не выполняется (отсутствие совпадения не квалифицируется как сбой). Вы должны проверить, сколько строк было выбрано.
2. Кроме того, кажется, что вы только учитесь. Ваш код уязвим для внедрения SQL, и, хотя поначалу это может показаться сложным, вам будет лучше начать обучение
PDO
с подготовленных параметризованных запросов. Вот хороший учебник по PDO .3. @El_Vanja Ах, хорошо, это имеет смысл, я думаю. Есть ли способ сделать так, чтобы он отображался только при совпадении? Я также использовал echo «Возвращаемые строки: » . mysqli_num_rows($result); который вернул правильное количество строк, когда было введено действительное имя пользователя, и 0 в противном случае.
4. Да, конечно. Проверьте, сколько строк возвращает ваш запрос. Для успешного входа в систему он должен возвращать ровно одну строку.
5. @droopsnoot Итак, должен ли у меня быть оператор if, который проверяет, равно ли количество возвращаемых строк 1, и если да, то повторяет оператор?
Ответ №1:
Спасибо @El_Vanja и @droopsnoot за помощь. Теперь мне удалось найти решение. Как они правильно указали, я должен был посмотреть, равно ли количество возвращаемых строк 1, а затем повторить утверждение, если да.
Мой исправленный код выглядит следующим образом:
if (isset($_POST['login'])) {
$enteredUser = $_POST['username'];
$sql = "SELECT * FROM user WHERE username='$enteredUser'";
$result = mysqli_query($link, $sql);
if (mysqli_num_rows($result) == 1) {
echo 'it works';
}
}
Комментарии:
1. Рад, что это работает. Теперь вам нужно прочитать о «Подготовленных операторах», как прокомментировал @El_Vanja выше, вместо объединения строк в ваш запрос.