我已经编写了一些css和php来查询mysql表。我还有一个下拉框形式的过滤器,允许用户选择一个“系列”,无论是“电容器”、“电阻器”还是“铁氧体磁珠”(我已经在下面附上了这看起来像什么的图片)。
我的问题是:一旦元素按族过滤,如何为它们创建排序系统?也就是说,如果我想从mysql查询对应于asc值“voltage”的表,我该怎么做?当选择排序方法时,我需要保留过滤器。到目前为止,我已经在图片下面包含了我的代码。谢谢你的帮助!
(下面:1,加载整个表:2,只加载与“capacitor”匹配的族条目)
代码:(文件名,index.php)
<html>
<form action="index.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>
<head>
<meta charset = "UTF-8">
<title>test.php</title>
<style>
table {
border-collapse: collapse;
width: 50%;
}
th, td {
input: "text";
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
$family = "";
if(isset($_POST['family'])) {
$family = $_POST['family'];
}
try {
$con= new PDO('mysql:host=localhost;dbname=mysql', "root", "kelly188");
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(!empty($family)) {
$query = 'SELECT * FROM testv2 WHERE family = "'.$family.'"';
}
else {
$query = "SELECT * FROM testv2";
}
//first pass 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 foreach
print " </tr>";
//second query gets the data
$data = $con->query($query);
$data->setFetchMode(PDO::FETCH_ASSOC);
foreach($data as $row){
print " <tr>";
foreach ($row as $name=>$value){
print " <td>$value</td>";
} //end field loop
print " </tr>";
} //end record loop
print "</table>";
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
} // end try
?>
</p>
</body>
</html>
6条答案
按热度按时间wsxa1bj11#
如果您不想使用专用的表排序库,您应该可以自己完成。下面是一个从提供的数据数组中提取所有数据的解决方案,您应该能够使用php轻松地提供这些数据。
yquaqz182#
以下是您如何对表格进行数字排序:
1) 给目标表一个id(在我的代码中是主表)
2) 每次单击表头时调用排序函数(包括列号,第一个是0,每次添加更多列时,函数名内的数字增加1,在本例中为sorttable(0),sorttable(1),。。。。
最后的结果是这样的(测试这个例子,它是有效的):
下面是生成列号所需的操作:
tgabmvqs3#
数据表https://datatables.net/ 也很酷。正常的功能是使用javascript,但是您可以将其配置为使用服务器资源,在服务器上处理日期,并只显示结果。一旦你掌握了窍门就很容易了。
每次对数据进行排序或筛选时,datatable都会发送一个包含所有必要信息的数组,这样您只需扫描该数组并相应地生成查询。
a1o7rhls4#
nfzehxib5#
您可以在表单中添加排序下拉列表,并在查询中使用它。通过这种方式,您可以让用户选择排序方法并在服务器端进行处理。
在php中:
在您的if声明中:
f45qwnt86#
您可以将$\u post['family']保存在一个隐藏字段中(可能是$\u post['hidden\u family'])。当您进行下一级搜索时,您可以检查它,如果它不是空的,则每次都将其附加到您的搜索中。