我得到了分页控件,我的搜索结果显示5个结果很好。但是当我点击第二页时,所有搜索结果都会消失。即使我搜索的内容,数据库中也有超过5个结果。如果你愿意,请在一秒钟内看到更新代码。这是我的电子邮件芽以防万一:raminrahim [at] hotmail [dot] com请。谢谢。
<?php
$paginationCTRLS = '';
$textline1 = '';
$textline2 = '';
$list = '';
if (isset($_GET['search_item'])) {
$search_item = $_GET['search_item'];
if (!empty($search_item)) {
if (strlen($search_item)>=3) {
// This query is just to get total count of rows
$query= "SELECT COUNT(item_id) FROM items"; // $sql
$query_run = mysqli_query($mysqli, $query); // $query
$query_row = mysqli_fetch_row($query_run); // $row
// $rows: here we have the total row count
$rows = $query_row[0]; // pgRows = row[]
// This is the number of results we want displayed per page
$page_rows = 5;
// This tells us the page number of our last page
$last = ceil($rows/$page_rows);
// This makes sure last cannot be less than 1.
if ($last < 1)
{
$last = 1;
}
// Establish the $pagenum variables
$pagenum = 1;
// Get pagenum from URL vars if it present, else it is = 1
if(isset($_GET['pn'])){
$pagenum = preg_replace('#[^0-9]#', '', $_GET['pn']);
}
if ($pagenum < 1) {
$pagenum = 1;
} else if ($pagenum > $last) {
$pagenum = $last;
}
$limit = 'LIMIT ' .($pagenum - 1) * $page_rows .',' .$page_rows;
$query = "SELECT `item_id`, `featured_Items` FROM `items` WHERE
`featured_Items` LIKE
'%".mysql_real_escape_string($search_item)."%' $limit";
$query_run = mysqli_query($mysqli, $query);
$query_num_rows = mysqli_num_rows($query_run);
if ($query_num_rows>=1)
{
echo $query_num_rows. ' results found:<br>' . '<br>';
while ($query_row = mysqli_fetch_assoc($query_run))
{
echo $query_row['featured_Items'].'<br>' . '<hr>';
}
}
else
{
echo 'No result found' . '<hr>';
}
} else {
echo 'Not enough keywords to predict your search' . '<hr>';
}
}
$textline1 = "Result:" . '(<b>$rows</br>)';
$textline2 = "Page <b>" . '$pagenum' . "</b> of <b>" . '$last' . "</b>";
if ($last != 1){
if ($pagenum > 1) {
$previous = $pagenum - 1;
$paginationCTRLS .= '<a href='.$_SERVER['PHP_SELF'].'?pn='.$previous.'">Back</a> ';
for($i = $pagenum-4; $i < $pagenum; $i++){
if($i>0){
$paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> ';
}
}
}
$paginationCTRLS .= ''.$pagenum.' ';
for ($i = $pagenum+1; $i <= $last; $i++) {
$paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> ';
if($i >= $pagenum+4) {
break;
}
}
if ($pagenum != $last) {
$next = $pagenum +1;
$paginationCTRLS .= ' <a href="'.$_SERVER['PHP_SELF'].'?pn='.$next.'">Next</a> ';
}
}
$list = '';
while($row = mysqli_fetch_array($query_run, MYSQLI_ASSOC)) {
$id = $row["item_id"];
$availablesITEMS = $row["featured_Items"];
$list .= '<p><a href="boxbar.php?id='.$id.'">'.$availablesITEMS.'</a><br>.</p>';
}
}
echo $list . '<br/>';
echo $paginationCTRLS . '<br/>';
?>
答案 0 :(得分:2)
您需要设置查询才能接受起点。 像这样:
LIMIT 0, 10
如果第一个数字对应于您将从中获取结果的起始行,则第二个数字等于您从该点开始获得的结果数量。 因此,就您的代码而言,您必须将其设置为:
$query = "SELECT `item_id`, `featured_Items` FROM `items` WHERE
`featured_Items` LIKE
'%".mysql_real_escape_string($search_item)."%'
LIMIT ".($pagenum-1)*5.",5";
如果这清楚了你的疑问,请告诉我。
编辑:
至于通过您的方式启用分页,只需将表单中的方法更改为GET语句即可。
<form action="your_page.php" method="get">
然后从您的代码中可以使用
$_GET['search_item']
方法而不是POST。这反过来使您可以在锚标记上使用这些变量进行分页。
$paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> ';`
EDIT2: 你有这段代码:
for($i = $pagenum-4; $i < $pagenum; $i++){
if($i>0){
$paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> ';
}
}
这将始终在任何时候输出相同数量的页面,即5。
现在你所需要的只是输出你真正需要的分页。例如,设置此变量:
$pages = ceil($row/$page_rows);
为您提供总页数,然后您可以迭代到它:
for($i = 1; $i <= $pages; $i++){
if($i>0){
$paginationCTRLS .= '<a href="'.$_SERVER['PHP_SELF'].'?search_item='.$search_item.'&pn='.$i.'">'.$i.'</a> ';
}
}