【问题标题】:Next Results/Page 2 just repeats same results of search results pagination scriptNext Results/Page 2 只是重复搜索结果分页脚本的相同结果
【发布时间】:2015-05-16 16:08:41
【问题描述】:

我有一个带有分页页面的搜索结果,该页面仅适用于第一个结果页面 1。当用户输入具有 11 个结果的搜索关键字时,他们会转到 search.php 并正确查看结果:

« ‹ 第 1 页,共 2 页,显示 1-8 个结果,共 11 个结果 › »

但是,当用户单击 > 转到第 2 页时,URL 正确更改为 search/2/?search_text=query 但我得到了相同的结果

« ‹ 第 1 页,共 2 页,显示 1-8 个结果,共 11 个结果 › »

前 8 个结果相同,而不是预期的后 3 个结果

这是我单击第 2 页的下一个箭头时看到的 URL: http://example.com/search/2/?search_text=usertext

这里是完整的代码:

$search = $_GET['search_text'];   

try {

// Find out how many items are in the table
$total = $dbh->query("
SELECT
COUNT(*)
FROM
stories
WHERE
stories.category = \"$search\"
")
->fetchColumn();

// How many items to list per page
$limit = 8;

// How many pages will there be
$pages = ceil($total / $limit);

// What page are we currently on?
$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT,
array(
'options' => array(
    'default'   => 1,
    'min_range' => 1,
),
)));

// Calculate the offset for the query
$offset = ($page - 1)  * $limit;

// Some information to display to the user
$start = $offset + 1;
$end = min(($offset + $limit), $total);

// The "back" link
$prevlink = ($page > 1) ? '<a href="?page=1" title="First page">&laquo;</a>   
<a href="?page=' . ($page - 1) . '" title="Previous page">&lsaquo;</a>' : 
'<span class="disabled">&laquo;</span> <span class="disabled">&lsaquo;
</span>';

 // The "forward" link
$nextlink = ($page < $pages) ? '<a href="?page=' . ($page + 1) .
'&search_text=' . $search . '" title="Next page">&rsaquo;</a> <a href="
?page=' . $pages . '" title="Last page">&raquo;</a>' : '<span
class="disabled">&rsaquo;</span> <span class="disabled">&raquo;</span>';

// Display the paging information
echo '<div id="paging"><p>', $prevlink, ' Page ', $page, ' of ', $pages, '
pages, displaying ', $start, '-', $end, ' of ', $total, ' results ',
$nextlink, ' </p></div>';



 // Prepare the paged query
 $stmt = $dbh->prepare('
    SELECT
        *
    FROM
        stories
    WHERE
        (stories.category = :input)
    ORDER BY
        SID
    LIMIT
        :limit
    OFFSET
        :offset
');

// Bind the query params
$stmt->bindParam(':input', $search, PDO::PARAM_STR);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();


// Do we have any results?
if ($stmt->rowCount() > 0) {
    // Define how we want to fetch the results
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    $iterator = new IteratorIterator($stmt);

    // Display the results

【问题讨论】:

    标签: php pdo pagination


    【解决方案1】:

    一旦单击页面链接之一,您就会丢失 POST 数据。

    所以$search = $_POST['search_text']; 不起作用。除非您有理由不这样做,否则我不明白您为什么不能使用 $_GET 代替,然后将 search_text 放入您的链接中。例如,

    '<a href="?page=1&search_text=' . $search . '" title="First page">&laquo;</a>'
    

    并且不要忘记将表单更改为使用方法 GET。

    我会查看 php 函数 http_build_query 以帮助创建链接,以防用户输入引号。

    【讨论】:

    • 糟糕,我使用了 search_term 而不是你的 search_text。
    • 看起来您在 &search_text 之前缺少单引号
    • 如果在第二次查询之前打印出$offset,是-8吗?
    • 这不是说 $page 的值为 0 吗?因为 $offset = ($page - 1) * $limit = (0 - 1) * 8 = -8。所以也许你的第一个查询返回了一个空结果或者 filter_input() 有问题
    • 好的。使用 GET 方法使搜索结果页面正常工作并且没有错误。应该有 11 个结果,每页限制为 8 个。但是,当我单击下一步按钮并转到第 2 页时,它只会给我相同的 8 个结果,而不是最后 3 个结果。因此,尽管切换到 GET 方法,我还是回到了第一方
    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 2013-03-19
    • 2012-07-31
    • 1970-01-01
    • 2016-12-03
    • 2014-03-26
    • 2017-02-24
    相关资源
    最近更新 更多