【问题标题】:How do i create pagination for my search results如何为我的搜索结果创建分页
【发布时间】:2018-08-17 07:25:00
【问题描述】:

我正在尝试为我的搜索结果创建分页。如果我放弃搜索功能(即不包括if (isset($_POST['submit-search']))LIKE %search%),我可以创建一个工作分页,但是一旦我包括这些,如下面的代码所示,当我点击时我只会得到一个空白页下一页,好像 sql 术语没有保存在内存中。

<?php 
    if (isset($_POST['submit-search'])) {
        $results_per_page = 2;      
        $search = mysqli_real_escape_string($conn, $_POST['search']);
        $sql = "SELECT * FROM article WHERE a_title LIKE '%$search%' OR a_text LIKE '%$search%'";
        $result = mysqli_query($conn, $sql);
        $queryResult = mysqli_num_rows($result);
        $number_of_pages = ceil($queryResult/$results_per_page);    

// determine which page number visitor is currently on   
if (!isset($_GET['page'])) {
       $page = 1;
    } else {
       $page = $_GET['page'];
    }

       $this_page_first_result = ($page-1)*$results_per_page;
       $sql = "SELECT * FROM article WHERE a_title LIKE '%$search%' OR a_text LIKE '%$search%'LIMIT ".$this_page_first_result.",".$results_per_page." ";
       $result = mysqli_query($conn, $sql);

// echoing the search results
while ($row = mysqli_fetch_assoc($result)) {

    echo "<h3>".$row['title']."</h3>
          <p>".$row['text']."</p>";
}

// echoing the pagination    
    for ($page=1;$page<=$number_of_pages;$page++) {
        echo "<li><a href='search_results.php?page=".$page."'>".$page."</a></li>";  
    }   
        }
    ?>

html

<form action="search_results.php" method="POST">
        <input type="text" name="search"placeholder="Search">
        <button type="submit" name="submit-search">go</button>
</form>

【问题讨论】:

  • 我想你已经说明了问题。导航到下一页时,search 值是否作为 POST 重新提交?我一直在使用 GET 进行类似的搜索。解决了这个问题并让您共享一个指向您的结果的链接,使请求可移植。如果不再次提交,那么您将需要使用会话或其他东西来保持它。
  • 当您转到下一页时,您并没有发布,它是一个简单的 url,只附加了一个页面变量。那么$search 是如何定义的呢?它不会把它保存在内存中,正确的。也许将其存储在用户会话中或作为 get 参数。
  • 当您说“空白页”时,您是遇到错误还是只是表格没有结果?
  • 只是没有结果^

标签: php html search mysqli pagination


【解决方案1】:

逻辑错了。

// this code is only executed on the initial search.
if (isset($_POST['submit-search'])) {

当用户进入下一页时:

echo "<li><a href='search_results.php?page=".$page."'>".$page."</a></li>";

只给出了一个页码,并且由于没有发布任何内容而丢失了搜索参数,因此第一个 if 语句将不会再次运行。

你可以这样做:

echo "<li><a href='search_results.php?page=".$page."&search=$search'>".$page."</a></li>";

还有:

if(isset($_POST['submit-search']) || isset($_GET['search'])){
    $search = ...;
}

【讨论】:

  • 当我点击一个页面时,我在 $search 代码行上得到一个“通知:未定义索引:搜索”,页面显示所有结果而不是搜索结果,这是因为我需要将搜索词存储在用户会话中以在我浏览分页页面时保留它?
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 2020-02-20
  • 2014-03-26
  • 2017-02-24
  • 2018-02-17
相关资源
最近更新 更多