php - 使用 php 和 mysql 的搜索过滤器分页问题

标签 php html mysql

在这里,当我在搜索过滤器中搜索关键字以基于使用分页的搜索过滤器从数据库中缩短行时,它显示正确但是当我单击第二页时,它离开搜索过滤器并捕获第二个查询并且仅用于分页,

这是我的分页代码

 <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/

相关文章:

javascript - Canvas 画得不好

javascript - 通过javascript发布php变量

php - 在下拉列表中列出枚举值 php mysql

javascript - 如何调用动态 ID?

php - Magento 2.2.1 无法保存产品 - 类型推断期间发生错误缩小。请在 bugs.php.net 上提交错误报告

javascript - Intro.js 2页然后返回首页

javascript - Html 添加/删除Child

php - 获取数组并循环

php - 根据另一个表引用 ID 更新/插入大表记录。

php - 使用 PHP 脚本调用 json 数据并从数据库 Grails 中获取数据很慢