为mysql,php表创建过滤器

时间:2014-12-15 03:48:30

标签: php jquery html mysql ajax

我正在尝试为我的表创建一个过滤器选项卡,当单击从表中过滤数据并显示一组新结果时,将有几个不同的选项,每个下拉列表中的一个选项将过滤表结果。 尝试了一些教程无济于事(我是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或任何其他选项?

感谢您的帮助

2 个答案:

答案 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框架来完成过滤器等等,但这种方式应该有效,我希望在写完问题时我能够知道这一点。