Фильтр не влияет на таблицу postgreSQL

1

Мне интересно, как реализовать фильтр в моей таблице, я хочу фильтровать по категориям. Есть простой способ сделать это?

Это то, что я получил до сих пор:

Это раскрывающийся список:

<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

Я пытаюсь выполнить поиск в столбце категории, а не в категории "категория". Но я застрахован, как это сделать.

Теги:

2 ответа

0

Вам нужно инкапсулировать название своей категории в одинарные кавычки, иначе оно будет рассматриваться как столбец, а не значение.

$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";
?>
  • 0
    Это убрало ошибку, но не влияет на таблицу, когда я нажимаю кнопку выбора. Что-то не так с кнопкой?
  • 1
    Большое спасибо, высоко ценится!
0

Если вы передаете параметры в базу данных, используйте pg_query_params, см. Пример использования.

https://secure.php.net/manual/en/function.pg-query-params.php#refsect1-function.pg-query-params-examples

Не используйте конкатенацию строк для передачи параметров, потому что кто-то взломает вас.

Ещё вопросы

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