【发布时间】:2019-05-25 13:07:56
【问题描述】:
我有一个搜索按钮,用于在类别和产品表中进行搜索。 因此,当页面在第一个下拉列表中加载显示类别时,我使用 2 个下拉列表,当用户在第二个下拉列表中选择类别时,它显示该类别中的产品。此外,当页面加载时,默认查询会运行,它会显示所有产品。所以搜索功能运行良好。
问题是我也在使用分页。在搜索之前,分页工作正常(每页 15 条记录),但在搜索后,如果我选择一个类别并搜索,它会显示该类别的所有记录,当我转到下一页时,它会运行默认查询并显示默认结果。我希望它显示我搜索的结果。
<?php
$listperpage = 15;
$c = $_POST['category'];
$n = $_POST['product'];
if(!empty($c)){
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = '$c'";
$result = mysql_query($query) or die (mysql_query());
}
else if(!empty($c) && !empty($n)){
$query = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = '$c' AND rank_name = '$n'";
$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"])){
$c = $_POST['category'];
$n = $_POST['product'];
if(empty($c)){
echo "<span class='form-error'>Select Category first!</span>";
}
else if(!empty($c) && !empty($n)){
$queryn = "SELECT * FROM tbl_category INNER JOIN tbl_product ON tbl_category.id = tbl_product.fk_id_category WHERE fk_id_category = '$c' AND rank_name = '$n' 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 = '$c' 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";
}
?>
<script type="text/javascript">
$(document).ready(function() {
$("#category").on('click',function(){
var category = $(this).val();
if(category){
//alert('3213');
$.ajax({
type:'POST',
url:'process.php',
data:'category=' + category,
success:function(html){
$("#product").html(html);
}
});
}
});
});
</script>
<div align="center" class='maintabledivdaily' style='width:100%; padding: 20px 0 15px 0;' >
<table border="1" cellpadding="5" cellspacing="2" width="80%" >
<thead>
<tr>
<th colspan="9" bgcolor="#CCCCCC">List of all Ranks</th>
</tr>
<tr>
<th>ID</th>
<th>Category</th>
<th>Product Name</th>
</tr>
</thead>
<tbody>
<?php while ($row = mysql_fetch_array($results)): ?>
<tr></tr>
<tr align="center" dir="rtl" style="font-style:">
<td><?php echo $row['id']; ?></td>
<td><?php echo $row['category']; ?></td>
<td><?php echo $row['product']; ?></td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<br>
<div class="pagination">
<?php
for ($page=1; $page <= $pages ; $page++) {
echo '<a style="color: #000000;
float: left;
padding: 8px 16px;
text-decoration: none;
"href="list.php?page='. $page .'">'. $page .'</a> ';
}
?>
</div>
【问题讨论】:
-
你能再添加一个按钮来清除搜索吗?如果可能的话,您可以将发布的数据 $_POST['category'] 和 $_POST['product'] 保存到会话中,并检查会话是否可用,而不是应用 where 子句。并通过单击清除搜索按钮清除存储的会话。第二种方法是您可以通过 GET 而不是 POST 发送数据,如果数据可用,则将其附加到分页链接,在页面之后。
-
@AlokMali 我想采用第二种方法,你能给我一个代码示例来说明如何做到这一点。
-
你的前 2 个 if 有问题。
if (!empty($c)){} else if (!empty($c) && !empty($n){}。如果我没记错的话,else if永远不会执行,因为如果$c不为空,它将进入第一个if,如果$c为空,那么它也不会执行@987654330 @ 或elseif。 (我不认为这会导致您的问题,但我注意到了) -
并且
mysql_query已被弃用,不应使用。我强烈推荐PDO;但就目前而言,您的脚本对 sql 注入是开放的,因为变量直接打印到您的语句中,没有mysqli_real_escape_string或(更好)使用 PDO 或 mysqli 的参数化查询 -
我一直盯着你的代码看了一会儿,我想不通。我不完全确定这里发生了什么。将您的代码分成两个脚本可能会有所帮助。一个脚本用于默认查询,另一个脚本用于类别。我也没有看到类别选择器的 html,也没有看到您的 ajax 请求所依赖的 html(带有
id=category和id=product的元素。