在这里,当我在搜索过滤器中搜索关键字以基于使用分页的搜索过滤器从数据库中缩短行时,它显示正确但是当我单击第二页时,它离开搜索过滤器并捕获第二个查询并且仅用于分页,
这是我的分页代码
<ul class="pagination">
<?php
for($i=1;$i<=$total_page;$i++)
echo"<li class='".($page_id == $i? 'active' : '')."'><a href='index.php?page=".$i."'>$i</a></li>";
?>
</ul>
这是点击第二页时的代码,它离开搜索 session 并再次进入正常分页部分
<?php
$total_num_page=1;
if(isset($_GET['page']))
{
$page_id=$_GET['page'];
}
else
{
$page_id=1;
}
if(isset($_POST['submitSearch']) || $_SESSION['search'])
{
if($_POST['submitSearch']){
$_SESSION['search']=$_POST['search'];
}
$all_post_query= "select * from files where recieved_by like '%". $_SESSION["search"]. "%' or processed_by like '%".$_SESSION["search"]."%' or purpose like '%".$_SESSION["search"]."%' or file_name like '%".$_SESSION["search"]."%' order by date desc";
$all_post_run=mysqli_query($con,$all_post_query);
$all_post=mysqli_num_rows( $all_post_run);
$total_page=ceil($all_post/$total_num_page);
$page_start_from=($page_id-1)*$total_num_page;
}
else
{
$all_post_query="select * from files order by date desc";
$all_post_run=mysqli_query($con,$all_post_query);
$all_post=mysqli_num_rows($all_post_run);
$total_page=ceil($all_post/$total_num_page);
$page_start_from=($page_id-1)*$total_num_page;
}?>
这是从数据库中获取数据到表中的代码
<?php
$p_query="select * from files order by date desc limit $page_start_from, $total_num_page";
$p_run=mysqli_query($con,$p_query);
if(mysqli_num_rows($p_run)){
while($row=mysqli_fetch_array($p_run))
{
$c_id=$row['id'];
$file=$row['file_name'];
$purpose=$row['purpose'];
$recieve=$row['recieved_by'];
$processed=$row['processed_by'];
$address=$row['address'];
$contact=$row['contact_no'];
$date=$row['date'];
?>
<tr>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $c_id;?></a></td>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $file;?></a></td>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $purpose;?></a></td>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $recieve;?></a></td>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $processed;?></a></td>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $address;?></a></td>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $contact;?></a></td>
<td><a href="post.php?post_id=<?php echo $c_id?>"><?php echo $date;?></a></td>
?>
所以请帮助我,我知道代码容易受到 SQL 注入(inject)的攻击,我会在完成后防止这种情况发生。
最佳答案
您的代码有几个问题:
首先,当您选择要显示表格的数据时,您没有考虑搜索参数,因此您永远不会显示通过搜索过滤的记录。
此外,您不需要执行“SELECT * FROM..”来获取所有记录的计数,执行“SELECT COUNT(id) as count FROM..”效率更高
如果您将搜索参数存储在 $_SESSION 中,请确保您的 PHP 脚本之上有 session_start()
关于php - 使用 php 和 mysql 的搜索过滤器分页问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47195548/