嘿,我仍然试图为我的分页脚本选择多个过滤器,但不知道如何做到这一点对于php和编程来说是非常新的。
因此,在我的分页中,当用户点击“营销”按钮(链接)时,它只查询数据库中的=营销类别。其他2个过滤器按钮也是如此,如下面的脚本所示。 (汽车,运动)。
问题是,我希望能够选择多个过滤器,例如市场营销和汽车或汽车和体育,例如,如果我点击营销过滤器,然后点击汽车,它将显示与营销相同的类别,以及汽车
我不知道如何做到这一点,所以我来找专家来帮助我。
这是我正在处理的脚本:
<h3>Filter results by:</h3>
<a href='pagi_test.php?category=marketing'>marketing</a>
<a href='pagi_test.php?category=automotive'>automotive</a>
<a href='pagi_test.php?category=sports'>sports</a>
<br />
<h3>Results:</h3>
<?php
//connecting to the database
$error = "Could not connect to the database";
mysql_connect('localhost','root','root') or die($error);
mysql_select_db('ajax_demo') or die($error);
//max displayed per page
$per_page = 3;
//get start variable
$start = $_GET['start'];
$category = mysql_real_escape_string($_GET['category']);
//count records
$record_count = mysql_num_rows(mysql_query("SELECT * FROM explore WHERE category='$category'"));
//count max pages
$max_pages = $record_count / $per_page; //may come out as decimal
if (!$start)
$start = 0;
//display data
$get = mysql_query("SELECT * FROM explore WHERE category='$category' LIMIT $start, $per_page");
?>
<table width="800px">
<?php
while ($row = mysql_fetch_assoc($get))
{
// get data
$id = $row['id'];
$site_name = $row['site_name'];
$site_description = $row['site_description'];
?>
<tr>
<td><?php echo $id; ?></td>
<td><?php echo $site_name; ?></td>
<td><?php echo $site_description; ?></td>
</tr>
<?php
}
//setup prev and next variables
$prev = $start - $per_page;
$next = $start + $per_page;
//show prev button
if (!($start<=0))
echo "<a href='pagi_test.php?category=$category&start=$prev'>Prev</a> ";
//show page numbers
//set variable for first page
$i=1;
for ($x=0;$x<$record_count;$x=$x+$per_page)
{
if ($start!=$x)
echo " <a href='pagi_test.php?category=$category&start=$x'>$i</a> ";
else
echo " <a href='pagi_test.php?category=$category&start=$x'><b>$i</b></a> ";
$i++;
}
//show next button
if (!($start>=$record_count-$per_page))
echo " <a href='pagi_test.php?category=$category&start=$next'>Next</a>";
?>
对此的任何帮助都会很棒。谢谢。
- 编辑 -
如果有人使用多个过滤器进行分页系统的方法比上面的更好,请告诉我。
答案 0 :(得分:1)
选择第二个过滤器时,您可以添加类别 例如:
首先你的变量$ category有
$category="Marketing";
当用户过滤另一个类别时,假设汽车然后使用分隔符将其添加到$ category,现在
$category="Marketing:Automotive";
当你通过GET访问时使用爆炸:
$cat=explode(":",$_GET['category']);
并写下你的病情
$condition="category=category[0]";
for($i=1; $i<sizeof($cat); $i++)
{
$condition="AND category=$cat[$i]";
}
$where="WHERE $condition";
在你的查询中使用$ where,比如
$record_count = mysql_num_rows(mysql_query("SELECT * FROM explore $where"));
答案 1 :(得分:1)
我看到两个不同的问题
每个我都有解决方案!
如何允许用户选择多个类别进行过滤
表格将是最直接的方法。
<h3>Filter results by:</h3>
<form action="pagi_test.php" method="GET">
<input type="checkbox" name="category[]" value="marketing" id="cat_marketing"/>
<label for="cat_marketing">Marketing</label>
<br/>
<input type="checkbox" name="category[]" value="automotive" id="cat_automotive"/>
<label for="cat_automotive">Automotive</label>
<br/>
<input type="checkbox" name="category[]" value="sports" id="cat_sports"/>
<label for="cat_sports">Marketing</label>
<br/>
<input type="submit" value="Filter!" />
</form>
现在,$_GET['category']
将是所选类别的数组。
$categories = $_GET['category'];
$inClause = "'" . implode( "','", array_map( 'mysql_real_escape_string', $categories ) ) . "'";
//count records
$record_count = mysql_num_rows(
mysql_query( "SELECT * FROM explore WHERE category IN($inClause)" )
);
当然,您可能希望在此处添加一项检查,以确保在执行查询之前$categories
不为空。
您还需要修改实际的选择查询
//display data
$get = mysql_query("SELECT * FROM explore WHERE category IN($inClause) LIMIT $start, $per_page");
宾果!现在那部分已经完成了!
如何将这些选择传播到分页链接
由于我们已经在$categories
中存储了所选类别的数组,因此使用http_build_query()这将是微不足道的。
//setup prev and next variables
$prev = $start - $per_page;
$next = $start + $per_page;
// Get the categories in an HTML-safe array
$requestVars = array_map( 'htmlspecialchars', $categories );
//show prev button
if (!($start<=0))
{
$requestVars['start'] = $prev;
echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '">Prev</a> ';
}
//show page numbers
//set variable for first page
$i=1;
for ( $x = 0; $x < $record_count; $x = $x + $per_page )
{
$requestVars['start'] = $x;
if ( $start != $x )
{
echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '">'. $i .'</a> ';
} else {
echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '"><b>'. $i .'</b></a> ';
}
$i++;
}
//show next button
if (!($start>=$record_count-$per_page))
{
$requestVars['start'] = $next;
echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '">Next</a> ';
}
现在,这个实现中仍有漏洞。
<form>
打印到页面,因此无法预先选择代表当前过滤器选项的复选框。你绝对可以改变。SELECT count(*) ...
的单独查询要好得多。