php中搜索后分页
我有一个搜索按钮,用于在类别和产品表中搜索。 所以我使用了两个下拉列表,当页面在第一个下拉列表中加载时,显示类别,当用户在第二个下拉列表中选择类别时,显示该类别中的产品。此外,当页面加载时,将运行显示所有产品的默认查询。因此,搜索功能运行良好 问题是我也在使用分页。在搜索之前,分页工作正常(每页15条记录),但在搜索之后,如果我选择一个类别并进行搜索,它将显示该类别的所有记录,当我转到下一页时,它将运行默认查询并显示默认结果。我希望它显示我搜索的结果php中搜索后分页,php,sql,ajax,Php,Sql,Ajax,我有一个搜索按钮,用于在类别和产品表中搜索。 所以我使用了两个下拉列表,当页面在第一个下拉列表中加载时,显示类别,当用户在第二个下拉列表中选择类别时,显示该类别中的产品。此外,当页面加载时,将运行显示所有产品的默认查询。因此,搜索功能运行良好 问题是我也在使用分页。在搜索之前,分页工作正常(每页15条记录),但在搜索之后,如果我选择一个类别并进行搜索,它将显示该类别的所有记录,当我转到下一页时,它将运行默认查询并显示默认结果。我希望它显示我搜索的结果 将表单方法从post更改为get,其中有类别
将表单方法从post更改为get,其中有类别选择和搜索按钮
<form method="get"></form>
<?php
$listperpage = 15;
$_SESSION['category'] = $_POST['category'];
$_SESSION['product'] = $_POST['product'];
/** clear_search is the name of your clear search button */
if(isset($_POST["clear_search"])){
unset($_SESSION['category']);
unset($_SESSION['product']);
}
if(!empty($_SESSION['category'])){
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = ". $_SESSION['category'];
$result = mysql_query($query) or die (mysql_query());
}
else if(!empty($_SESSION['category']) && !empty($_SESSION['product'])){
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " AND rank_name = ". $_SESSION['product'];
$result = mysql_query($query) or die (mysql_query());
}else{
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category";
$result = mysql_query($query) or die (mysql_query());
echo "else one";
}
$result_num = mysql_num_rows($result);
//total pages
$pages = ceil($result_num/$listperpage);
//which number the user is crrrently on
if (!isset($_GET['page'])) {
$page = 1;
} else{
$page = $_GET['page'];
}
//sql limit starting number of results on th page
$strt_limit_no = ($page - 1)*$listperpage;
if(isset($_POST["search"])){
if(empty($_SESSION['category'])){
echo "<span class='form-error'>Select Category first!</span>";
}
else if(!empty($_SESSION['category']) && !empty($_SESSION['product'])){
$queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " AND rank_name = " . $_SESSION['product'] . " LIMIT ". $strt_limit_no .','. $listperpage;
$results = mysql_query($queryn) or die (mysql_query());
}
else{
$queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " LIMIT ". $strt_limit_no .','. $listperpage;
$results = mysql_query($queryn) or die (mysql_query());
}
}
else{
$queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category LIMIT ". $strt_limit_no .','. $listperpage;
$results = mysql_query($queryn) or die (mysql_query());
echo "else end";
}
?>
将这些值添加到分页
<div class="pagination">
<?php
$cat = $prod = '';
if(!empty($_GET['category'])){ $cat = '&category='.$_GET['category']; }
if(!empty($_GET['product'])){ $prod = '&product='.$_GET['category']; }
for ($page=1; $page <= $pages ; $page++) {
echo '<a style="color: #000000;
float: left;
padding: 8px 16px;
text-decoration: none;
"href="list.php?page='. $page. $cat. $prod .'">'. $page .'</a> ';
}
?>
</div>
注意:如果搜索时未发送“page”参数,则在搜索表单中设置一个名为page的输入
<input type="hidden" name="page" value="<?php echo $page; ?>"
能否再添加一个按钮以清除搜索?如果可能的话,您可以将发布的数据$u POST['category']和$u POST['product']保存到会话中,并检查会话是否可用,而不必应用where子句。并单击“清除搜索”按钮清除存储的会话。第二种方法是,您可以通过GET而不是POST发送数据,如果数据可用,则将其附加到页面后面的分页链接。@AlokMali我想使用第二种方法,您能否给我一个代码示例,说明如何执行此操作。您的前两个ifs有问题if(!empty($c)){}else if(!empty($c)&&&!empty($n){/code>。如果我没有弄错,else if
将永远不会执行,因为如果$c
不是空的,它将进入第一个如果并且如果$c
是空的,那么它将不会执行如果或者elseif
。(我不认为这导致了您的问题,但我注意到了这一点)并且mysql\u query
已被弃用,不应使用。我强烈建议;但就目前情况而言,您的脚本对sql注入是开放的,因为变量直接打印到您的station中,而无需mysqli\u real\u escape\u字符串
或(更好)PDO或mysqliI的参数化查询已经盯着你的代码看了一段时间了,我想不出来。我不完全确定这里发生了什么。这可能有助于将你的代码分成两个脚本。一个脚本用于默认查询,另一个脚本用于类别。我也没有看到类别选择器的html,也没有看到html whi您的ajax请求取决于(具有id=category
和id=product
的元素。因此@AlokMali这不起作用。搜索现在不起作用,分页正在工作,但在进入第2页后,它会显示默认结果,并在else中显示查询结果。您能告诉我们如何使用会话吗?@bro1o1,尽管第一个解决方案也应该起作用,但是我已经发布了另一个解决方案。@bro1o1,你得到你想要的解决方案了吗?它现在起作用了吗?
<input type="hidden" name="page" value="<?php echo $page; ?>"
<?php
$listperpage = 15;
$_SESSION['category'] = $_POST['category'];
$_SESSION['product'] = $_POST['product'];
/** clear_search is the name of your clear search button */
if(isset($_POST["clear_search"])){
unset($_SESSION['category']);
unset($_SESSION['product']);
}
if(!empty($_SESSION['category'])){
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = ". $_SESSION['category'];
$result = mysql_query($query) or die (mysql_query());
}
else if(!empty($_SESSION['category']) && !empty($_SESSION['product'])){
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " AND rank_name = ". $_SESSION['product'];
$result = mysql_query($query) or die (mysql_query());
}else{
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category";
$result = mysql_query($query) or die (mysql_query());
echo "else one";
}
$result_num = mysql_num_rows($result);
//total pages
$pages = ceil($result_num/$listperpage);
//which number the user is crrrently on
if (!isset($_GET['page'])) {
$page = 1;
} else{
$page = $_GET['page'];
}
//sql limit starting number of results on th page
$strt_limit_no = ($page - 1)*$listperpage;
if(isset($_POST["search"])){
if(empty($_SESSION['category'])){
echo "<span class='form-error'>Select Category first!</span>";
}
else if(!empty($_SESSION['category']) && !empty($_SESSION['product'])){
$queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " AND rank_name = " . $_SESSION['product'] . " LIMIT ". $strt_limit_no .','. $listperpage;
$results = mysql_query($queryn) or die (mysql_query());
}
else{
$queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = " .$_SESSION['category']. " LIMIT ". $strt_limit_no .','. $listperpage;
$results = mysql_query($queryn) or die (mysql_query());
}
}
else{
$queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category LIMIT ". $strt_limit_no .','. $listperpage;
$results = mysql_query($queryn) or die (mysql_query());
echo "else end";
}
?>