我正在尝试为我的表创建一个过滤器选项卡,当单击从表中过滤数据并显示一组新结果时,将有几个不同的选项,每个下拉列表中的一个选项将过滤表结果。 尝试了一些教程无济于事(我是PHP的初学者,js)
这是我的代码;
页面显示表;
<?php
$con=mysqli_connect("localhost","root", "", "database");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM table GROUP BY id DESC LIMIT 25");
if (!$result) {
printf("Error: %s\n", mysqli_error($con));
exit();
}
echo "<table border='5' class='table'>
<tr>
<th>Game ID</th>
<th>Game Name</th>
<th>Category</th>
<th>Suggested LVL</th>
<th>Insert Date</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['gamename'] . "</td>";
echo "<td>" . $row['gamecategory'] . "</td>";
echo "<td>" . $row['gamelevel'] . "</td>";
echo "<td>" . $row['listdate'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
我希望过滤器是什么样的; 这只是一个例子,汽车与我的游戏数据库无关。
<div class="input-group">
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
我只是有点难过从这里去哪里,有没有方便的免费jquery插件,AJAX或任何其他选项?
感谢您的帮助
答案 0 :(得分:0)
您需要一种更灵活的方法来构建查询。一个框架可以使这很容易。这个例子使用的是Laravel。
$q = DB::table('table')->groupBy('id');
if ( isset($_POST['color']) ) {
$q = $q->where('some-column', $_POST['color']);
}
if ( isset($_POST['car']) ) {
$q = $q->where('some-other-column', $_POST['car']);
}
$results = $q->get();
请注意,Laravel的DB类将自动过滤传递给它的变量。
你可以使用直接的PHP做同样的事情,但它需要你写很多boilterplate。
// Store user submitted filters in an array
$where = array();
if ( isset($_POST['color']) ) {
$where[] = "some-column = '".validate_your_user_inputs($_POST['color'])."'";
}
if ( isset($_POST['car']) ) {
$where[] = "some-other-column = '".validate_your_user_inputs($_POST['car'])."'";
}
// Create WHERE clause or empty string that gets put into the SQL
if ( sizeof($where) > 0 ) {
$where = ' WHERE '.implode(' AND ', $where);
} else {
$where = '';
}
$q = sprintf('SELECT * FROM table %s GROUP BY id LIMIT 25', $where);
这显然是一个非常简单的例子,它忽略了在将变量直接传递给MySQL之前需要进行的验证,但它应该让你开始。
答案 1 :(得分:0)
回过头来说,通过在更改select选项时重新查询数据库中的数据,可以做到这一点。
在使用几个不同的框架后,我发现通过在javascript框架中执行此操作变得非常简单易懂(一个很好的选择是angularjs)。但是,通过包装原始选择列表
<div class="input-group">
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
在类似的表单标记中,并将名称attr添加到select标记:
<form action="urltoscript" method="POST">
<div class="input-group">
<select name="changingValues">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
<input type="submit" name="buttonSubmit" />
</form>
允许您使用PHP利用isset isset($_POST["changingValues"])
然后将数据重新查询为$ result,来检索后端上每个项目的选定值。您将在每次更改后刷新页面,并且必须单击“提交”按钮,除非您使用javascript合并了一些AJAX调用。
我再次建议使用JS或PHP框架来完成过滤器等等,但这种方式应该有效,我希望在写完问题时我能够知道这一点。