Я написал несколько PHP и CSS для запроса таблицы базы данных MySQL, которую я запускаю на сервере WAMP. У меня есть два файла, которые запускаются, index.php и test.php. Индекс содержит селекторный блок, который позволяет пользователю выбирать параметр фильтра из "семейства". В конечном счете, я хотел бы, чтобы выбранная опция была реализована в запросе SELECT, который определяет вывод данных в части PHP test.php.
Например, если пользователь выбирает "конденсатор" из index.php, мне нужна таблица, которая создается для отображения только записей семейства, которые соответствуют "конденсатору" (также как и все соответствующие детали, такие как "емкость", "напряжение",, и "цена"). В настоящее время мой PHP просто извлекает всю таблицу (пример ниже).
Я знаю, что мне нужно использовать супер-глобальный $ _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>
Вы должны захватить запрошенную семью:
$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';
вы можете создать второй запрос в качестве выбора для записей, где семейство - это значение, которое вы зацикливаете, что-то вроде
$data= $con->quaery('SELECT * from testv2 where family = $field');
$data= $con->query("SELECT * from testv2 where family = $field");
, Также запрос написан неправильно.
where
для ограничения возвращаемых данных.