繁体   English   中英

我怎样才能使搜索结果与分页一起使用?

[英]how could i get search results to work with the pagination?

嗨,朋友们,所以我得到了这个搜索标准的东西,它可以选择一个值或选择所有选项,但是无论如何,这里的问题是我不知道如何在发生分页时保持结果不变?

到目前为止,如果单击“下一步”或任何页面,它将显示空白页面,因为除了页码以外,其他任何内容都没有通过。

这是我的密码

<?php

  $title = clean($_REQUEST['title']);
  $name = clean($_REQUEST['name']);
  $description = clean($_REQUEST['description']);

  $criteria = array();

            if($title !='')
            {
                $criteria[] = "title = '".$title."'";
            }elseif($title =='All')
                criteria[] = "title = ''";
            }

            if($name !='')
            {
                $criteria[] = "name = '".$name."'";
            }elseif($name =='All')
                criteria[] = "name = ''";
            }

            if($description !='')
            {
                $criteria[] = "description = '".$description."'";
            }elseif($description =='All')
                criteria[] = "description = ''";
    }

   try {

    $total = $db->query('SELECT COUNT(*) FROM table WHERE '.implode(' AND ', $criteria).'')->fetchColumn();
    global $per_page;

    $pages = ceil($total / $per_page);

    $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
        'options' => array(
            'default'   => 1,
            'min_range' => 1,
        ),
    )));


    $offset = ($page - 1)  * $per_page;
    $start = $offset + 1;
    $end = min(($offset + $per_page), $total);


   $stmt = $db->prepare('SELECT * FROM table WHERE '.implode(' AND ', $criteria).' ORDER BY id DESC LIMIT :per_page OFFSET :offset'); 

    $stmt->bindParam(':per_page', $per_page, PDO::PARAM_INT);
    $stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
    $stmt->execute();

    if ($stmt->rowCount() > 0) {
        $stmt->setFetchMode(PDO::FETCH_ASSOC);
        $iterator = new IteratorIterator($stmt);
        foreach ($iterator as $row) {           

                echo $row['id'];
        }

    echo '<div id="pagination">
    <div id="pagiCount">';
        $prevlink = ($page > 1) ? '<span id="prev"><a href="?page=1" title="First page">First</a></span> <span id="prev"><a href="?page=' . ($page - 1) . '" title="Previous page"><<</a></span>' : '';
        $nextlink = ($page < $pages) ? '<span id="next"><a href="?page=' . ($page + 1) . '" title="Next page">>></a></span> <span id="next"><a href="?page=' . $pages . '" title="Last page">Last</a></span>' : '';
        echo '<div id="paging"><p><small>', $prevlink, ' Page ', $page, ' of ', $pages, '', $nextlink, '</small></p></div>';        
    echo '</div></div>';
    } else {
        echo '<p>Nothing found.</p>';
    }
} catch (Exception $e) {
    echo '<p>Nothing found.</p>';
}
?>

对于您的帮助,我真的非常感谢。 干杯

您必须使用除页面之外的相同参数重新为其查询字符串。

所以我认为类似的事情会起作用:

//regenerate query string with new page 
$cur_params = $_GET;
unset($cur_params["page"]);
$cur_url = strtok($_SERVER["REQUEST_URI"],"?") . "?" . http_build_query($cur_params, "", "&");
$page_back_url = $cur_url . (empty($cur_params) ? "" : "&") . "page=" . ($page - 1);
$page_next_url = $cur_url . (empty($cur_params) ? "" : "&") . "page=" . ($page + 1);
$page_last_url = $cur_url . (empty($cur_params) ? "" : "&") . "page=$pages";    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM