下一个结果/第2页只重复搜索结果分页脚本的相同结果

时间:2015-03-14 02:18:37

标签: php pdo pagination

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

«<第1页,共2页,显示11个结果中的1-8个>»

但是,当用户点击&gt;转到第2页,URL正确更改为search / 2 /?search_text = query但我得到相同的

«<第1页,共2页,显示11个结果中的1-8个>»

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

这是我点击第2页的下一个箭头时看到的网址: 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

1 个答案:

答案 0 :(得分:0)

点击其中一个页面链接后,您将丢失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,以帮助创建用户输入引号的链接。