Мне интересно, как реализовать фильтр в моей таблице, я хочу фильтровать по категориям. Есть простой способ сделать это?
Это то, что я получил до сих пор:
Это раскрывающийся список:
<select name="category" id="category">
<option value="Alcoholic">Alcohol</option>
<option value="Canned">Canned Food</option>
<option value="Dairy">Dairy</option>
<option value="Dessert">Dessert</option>
<option value="Frozen">Frozen Food</option>
<option value="Fruit">Fruit</option>
<option value="Junk Food">Junk Food</option>
<input type="submit" name="submit" value="Search"/>
</select>
Это код, который реализует таблицу:
<?php
$conn = pg_connect("host=db.dcs.aber.ac.uk port=5432
dbname=teaching user=csguest password=********");
$res = pg_query($conn, "SELECT Foodtype, Manufacturer, Description, Price FROM food
ORDER BY Category ASC");
echo "<table id=\"myTable\" border='1'>";
while ($a = pg_fetch_row($res)) {
echo "<tr>";
for ($j = 0; $j < pg_num_fields($res); $j++) {
echo "<td>" . $a[$j] . "</td>";
}
echo "<td><form id='cart' name='cart' method='POST' action='addToBasket.php'>
<input type='submit' name='Select' id='Select' value='Add To Basket'>
</form></td>";
echo "</tr>\n";
}
echo "</table>\n";
?>
И вот моя попытка кодирования команды SQL, которая должна фильтровать таблицу:
$Alcoholic = pg_query("SELECT Foodtype, Manufacturer,
Description, Price FROM food WHERE Category = Alcoholic");
Вот ошибка, которую я получаю:
Предупреждение: pg_query(): запрос не выполнен: ОШИБКА: столбец "алкоголик" не существует LINE 2:... Описание, Цена от еды WHERE Категория = Алкогольная ^ in/ceri/homes1/s/sec17/public_html/cs25010/database. php в строке 94
Я пытаюсь выполнить поиск в столбце категории, а не в категории "категория". Но я застрахован, как это сделать.
Вам нужно инкапсулировать название своей категории в одинарные кавычки, иначе оно будет рассматриваться как столбец, а не значение.
$Alcoholic = pg_query("SELECT Foodtype, Manufacturer,
Description, Price FROM food WHERE Category = 'Alcoholic'");
Таким образом, чтобы реализовать это с помощью вашего фильтра, вы должны проверить, размещена ли форма, и построить запрос с условным условным выражением.
<?php
$conn = pg_connect("host=db.dcs.aber.ac.uk port=5432
dbname=teaching user=csguest password=********");
// set empty var that will be populated if the form is submitted
$where = '';
if (isset($_POST['submit'])) {
if (!empty($_POST['category'])) {
// build the where conditional that will be used in the SQL query
$where = " WHERE Category = '".pg_escape_string($_POST['category'])."'";
}
}
$res = pg_query($conn, "SELECT Foodtype, Manufacturer, Description, Price
FROM food $where
ORDER BY Category ASC");
echo "<table id=\"myTable\" border='1'>";
while ($a = pg_fetch_row($res)) {
echo "<tr>";
for ($j = 0; $j < pg_num_fields($res); $j++) {
echo "<td>" . $a[$j] . "</td>";
}
echo "<td><form id='cart' name='cart' method='POST' action='addToBasket.php'>
<input type='submit' name='Select' id='Select' value='Add To Basket'>
</form></td>";
echo "</tr>\n";
}
echo "</table>\n";
?>
Если вы передаете параметры в базу данных, используйте pg_query_params, см. Пример использования.
Не используйте конкатенацию строк для передачи параметров, потому что кто-то взломает вас.