Советы по PHP Data Table взяты из MySQL

0

Я написал несколько PHP и CSS для запроса таблицы базы данных MySQL, которую я запускаю на сервере WAMP. У меня есть два файла, которые запускаются, index.php и test.php. Индекс содержит селекторный блок, который позволяет пользователю выбирать параметр фильтра из "семейства". В конечном счете, я хотел бы, чтобы выбранная опция была реализована в запросе SELECT, который определяет вывод данных в части PHP test.php.

Например, если пользователь выбирает "конденсатор" из index.php, мне нужна таблица, которая создается для отображения только записей семейства, которые соответствуют "конденсатору" (также как и все соответствующие детали, такие как "емкость", "напряжение",, и "цена"). В настоящее время мой PHP просто извлекает всю таблицу (пример ниже).

Изображение 174551

Я знаю, что мне нужно использовать супер-глобальный $ _POST для получения пользовательского ввода и поместить его в запрос SELECT, но я не уверен, как это сделать.

EDIT: Когда я пытаюсь сузить возвращаемые данные с помощью модификатора WHERE, я получаю следующую ошибку

ОШИБКА: SQLSTATE [42S22]: Колонка не найдена: 1054 Неизвестный столбец "конденсатор" в разделе "where"

Ниже приведен индекс index.php

<form action="test.php" method="post">
   <select name="family">
      <option value="" selected="selected">Any family</option>
      <option value="capacitor">capacitor</option>
      <option value="resistor">resistor</option>
      <option value="ferrite bead">ferrite bead</option>
   </select>
   <input name="search" type="submit" value="Search"/>
</form>

</html>

Ниже приведено test.php

<!DOCTYPE html>
<html lang = "en-US">
   <head>
      <meta charset = "UTF-8">
      <title>test.php</title>
      <style>
         table {
         border-collapse: collapse;

         width: 50%;
         }
         th, td {
         text-align: left;
         padding: 8px;
         }
         th {
         background-color: SkyBlue;
         }
      tr:nth-child(odd) {background-color: #f2f2f2;}
      tr:hover {background-color: AliceBlue;} 
      </style>
   </head>

   <body>    
      <p>
      <?php

      try {
         $con= new PDO('mysql:host=localhost;dbname=mysql', "root", "kelly188");
         $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         $query = "SELECT * FROM testv2";

         //first query just gets the column names
         print "<table>";
         $result = $con->query($query);

         //return only the first row (we only need field names)
         $row = $result->fetch(PDO::FETCH_ASSOC);
         print " <tr>";
         foreach ($row as $field => $value){
            print " <th>$field</th>";
            }
         // end loop
         print " </tr>";

         //second query gets the data
         $data = $con->query(**PERTAINS TO EDIT**);
         $data->setFetchMode(PDO::FETCH_ASSOC);
         foreach($data as $row){
            print " <tr>";
               foreach ($row as $name=>$value){
              print " <td>$value</td>";
               } //end row loop
            print " </tr>";
            } //end record loop
         print "</table>";
      } catch(PDOException $e) {
         echo 'ERROR: ' . $e->getMessage();
      } // end try
      ?>
      </p>
   </body>
</html>
  • 0
    Зачем выполнять один и тот же запрос дважды? Вы должны использовать предложение where для ограничения возвращаемых данных.
  • 0
    Смотрите мое редактирование. Что-то в моем втором запросе не так, просто не уверен, что именно.
Теги:
pdo

2 ответа

2
Лучший ответ

Вы должны захватить запрошенную семью:

$filter_key = "";
if(isset($_POST['family'])){
    $filter_key = $_POST['family'];
}

они должны соответствовать вашему запросу, используя установленный фильтр:

if(!empty($filter_key))
    $query = 'SELECT * FROM testv2 WHERE family = "'.$filter_key.'"';
else
    $query = 'SELECT * FROM testv2';
0

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

$data= $con->quaery('SELECT * from testv2 where family = $field');
  • 0
    Вам нужно использовать двойные кавычки, если вы используете этот синтаксис, например. $data= $con->query("SELECT * from testv2 where family = $field"); , Также запрос написан неправильно.

Ещё вопросы

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