mysql — php: изменить значение переменной на основе выпадающего списка

Изучение PHP и возникновение проблемы, которую я не могу понять. Я читал, что PHP имеет область видимости только для функций, поэтому я не уверен, почему мой оператор switch не меняет значение переменных.

Цель: изменить оператор SELECT mysql на основе выбранного пользователем раскрывающегося списка.

Форма:

    <form action="contacts_show.php" method="POST">
<select name="grade" id="grade">
<option value="all">All Levels</option>
<option value="elementary">Elementary</option>
<option value="middle">Middle</option>
<option value="senior">Senior</option>
<input type="submit" name="browse" id="browse" value="Browse" />
</form>

PHP (отредактированный для сокращения кода):

$levelSelected = $_POST['grade'];

if ($levelSelected == "all") {
$querySelect = "SELECT * FROM teachers ORDER BY school ASC";
} else {
$querySelect = "SELECT * FROM teachers WHERE school LIKE %$levelSelected% ORDER BY school ASC";
}

$query = $querySelect;
$result = mysqli_query($connection, $query);
confirm_query($result);

функция verify_query, если необходимо:

    function confirm_query($result_set) {
if (!$result_set) {
die("Database query failed.");
}
}

Если в раскрывающемся списке выбран «Все уровни», код запускается, как и ожидалось. Когда выбрана любая другая опция, моя функция verify_quaery утверждает, что запрос не выполнен.

Я не уверен, почему значения переменной не переключаются.

3

Решение

Чтобы уточнить мой комментарий:

+ Изменить LIKE %elementary% к => LIKE '%elementary%' и сделать то же самое для других.

Вам нужно обернуть соответствие шаблона в кавычки, а также в соответствии с руководством:

mysql> ВЫБЕРИТЕ «Дэвид!» Как «% D% v%»;
mysql> SELECT 10 LIKE ‘1%’;

Вы также не проверяете ошибки БД.

добавлять or die(mysqli_error($connection)) в mysqli_query()

Если это все еще не работает, то это также проблема сферы действия.
Передайте соединение к вашей функции, сделайте не сделать это глобальным.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]