Использование формы выбора для фильтрации таблицы, запрашиваемой из MySQL с использованием PHP

0

Я пишу PHP для запроса из базы данных MySQL, которую я установил на моем сервере WAMP. Я также изучаю PHP и html javascript по мере того, как я иду, поэтому синтаксис обоих языков все еще немного незнакомо мне.

EDIT: Синтаксическая ошибка была решена, однако теперь я получаю

Неопределенный индекс: семейство

ошибка при компиляции. Я запускаю два файла через мой сервер, front.php и back.php. Фронт содержит форму выбора, в которой пользователь может выбрать фильтр, который будет применяться к запросу php для MySQL. back.php получает выделение с помощью $ _REQUEST и использует это в запросе SELECT. Я разместил код, относящийся к форме выбора в front.php ниже.

<form method="POST">
<select name="family" onchange="showUser (this.value)">
<option value="empty">Select a Family:</option>
<option value="capacitor">capacitor</option>
<option value="resistor">resistor</option>
<option value="ferrite bead">ferrite bead</option>
</select>
</form>

Вот вызов $ _REQUEST в back.php

$sql="SELECT * FROM testv2 WHERE family='".$_REQUEST['family']."'";
$result = mysqli_query($con,$sql);
  • 0
    проблема исходит от $sql="SELECT * FROM testv2 WHERE family ='$_REQUEST['family']'"; посмотрите внимательно
  • 0
    Примечание, что также подлежит инъекции sql.
Показать ещё 2 комментария
Теги:
forms
selector

2 ответа

2

Вы должны изменить строку 24:

$sql="SELECT * FROM testv2 WHERE family ='$_REQUEST['family']'";

Для того, чтобы:

$sql="SELECT * FROM testv2 WHERE family ='" . $_REQUEST['family'] . "'";

Поскольку это должно исправить ошибку синтаксиса, но все же использование вышеуказанного кода является плохой идеей, так как код имеет уязвимость SQL Injection.

Я советую вам использовать подготовленный отчет PDO, если вы учитесь. http://php.net/manual/en/pdo.prepared-statements.php

1

Вы лечите

$sql="SELECT * FROM testv2 WHERE family ='$_REQUEST['family']'";

как целое, рассматривайте его как строку, сделайте следующее:

$sql="SELECT * FROM testv2 WHERE family ='".$_REQUEST['family']."'";

Другое предложение - использовать LIKE

Примечание: LIKE увеличит данные из базы данных, поэтому имейте это в виду, если у вас много данных

EDIT: в соответствии с запросом используйте $ _POST непосредственно вместо $ _REQUEST, пожалуйста, проверьте среди $ _REQUEST, $ _GET и $ _POST

Ещё вопросы

Сообщество Overcoder
Наверх
Меню