php分页编号页面链接
问题描述:
这是一个用于导航的分页代码,任何想法如何让这个代码显示链接的页面的简单列表?php分页编号页面链接
if (isset($_GET['pageno'])) {
$pageno = $_GET['pageno'];
}
else {
$pageno = 1;
}
if(isset($_GET['niche']))
{
$query = "SELECT count(*) FROM studies WHERE niche = '{$_GET['niche']}'";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);
}
$query_data = mysql_fetch_row($result);
$numrows = $query_data[0];
$rows_per_page = 4;
$lastpage = ceil($numrows/$rows_per_page);
$pageno = (int)$pageno;
if ($pageno > $lastpage) {
$pageno = $lastpage;
}
if ($pageno < 1) {
$pageno = 1;
} // if
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
$query = "SELECT * FROM studies WHERE niche = '{$_GET['niche']}' $limit";
$result = mysql_query($query, $connection) or trigger_error("SQL", E_USER_ERROR);
和...
if ($pageno == 1) {
echo "<div class='container'>FIRST PREV ";
} else {
echo "<div class='container'> <a href='{$_SERVER['PHP_SELF']}?pageno=1&niche={$_GET['niche']}'>FIRST</a> ";
$prevpage = $pageno-1;
echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$prevpage&niche={$_GET['niche']}'>PREV</a> ";
} // if
echo " (Page $pageno of $lastpage) ";
if ($pageno == $lastpage) {
echo " NEXT LAST</div><br />";
} else {
$nextpage = $pageno+1;
echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$nextpage&niche={$_GET['niche']}'>NEXT</a> ";
echo " <a href='{$_SERVER['PHP_SELF']}?pageno=$lastpage&niche={$_GET['niche']}'>LAST</a></div><br /> ";
} // if
?>
答
试试这个:
$totalpages = ceil($numrows/$rows_per_page);
if($totalpages >= 1){ $pagelinkcount = 1; } else { $pagelinkcount = 0; }
while($pagelinkcount <= $totalpages && $totalpages > 1) {
echo "<a href=\"/page/{$pagelinkcount}\">{$pagelinkcount}</a> ";
$pagelinkcount++;
}
在一个侧面说明,伊恩·艾略特在你的问题的评论中指出,在使用$ _GET SQL查询会使数据库非常脆弱,因此被认为是非常不安全的编码实践。在将其传递给数据库之前,您应该努力转义并解析您需要的$ _GET数据。
答
这是我一直用于分页的功能。如果只有一个页面,它将返回任何内容,最多返回15个带数字的页面,然后添加一个下拉菜单,当超过15页时,可以跳到第10页。它依赖于一些prev/next图像,但你可以很容易地把它拿出来。
function paginate($items_per_page, $number_of_results) {
if(isset($_REQUEST['page'])) {
$page = $_REQUEST['page'];
} else {
$page = 1;
}
$url = htmlentities(preg_replace('/(\?|&)page=[\d]+/', '', $_SERVER['REQUEST_URI']).'&');
$html = '';
$numbers_html = '';
$navigation_html = '';
if($number_of_results > $items_per_page) {
$html .= '<div class="pagination">';
if($page == 1 or $page == '1') {
$numbers_html .= '<img src="images/prev.png" alt="← prev" class="inactive" /> - ';
} else {
$numbers_html .= '<a href="'.$url.'/page'.($page-1).'"><img src="images/prev.png" alt="← prev" /></a> - ';
}
$count = 0;
$total_pages = ceil($number_of_results/$items_per_page)-1;
while($count <= $total_pages) {
$count++;
if($total_pages > 12 and floor($count/10) != floor($page/10)) {
while($count < $total_pages and floor($count/10) != floor($page/10)) {
if($count == 1) {
$endpage = 9;
} elseif($count + 9 < $total_pages) {
$endpage = $count + 9;
} else {
$endpage = $total_pages + 1;
}
$ten_group = floor($count/10);
if($ten_group == 0) {
$navigation_html .= '<option value="'.$url.'page='.$count.'">page 1</option>';
} else {
$navigation_html .= '<option value="'.$url.'page='.$count.'">page '.($ten_group*10).'</option>';
}
$count += 10;
}
$count -= 2;
} else {
if($page == $count) {
$numbers_html .= '<span class="current">'.$count.'</span>';
if($count == 1) {
$endpage = 9;
} elseif($count + 9 < $total_pages) {
$endpage = $count + 9;
} else {
$endpage = $total_pages + 1;
}
if($total_pages > 15) {
$ten_group = floor($count/10);
if($ten_group == 0) {
$navigation_html .= '<option value="'.$url.'page='.$count.'" selected="selected">page 1</option>';
} else {
$navigation_html .= '<option value="'.$url.'page='.$count.'" selected="selected">page '.($ten_group*10).'</option>';
}
}
} else {
$numbers_html .= '<a href="'.$url.'/page'.$count.'">'.$count.'</a>';
}
if(($total_pages > 12 and $count % 10 == 9) or $count == $total_pages+1) {
} else {
$numbers_html .= ' - ';
}
}
}
if($page != $count) {
$numbers_html .= ' - <a href="'.$url.'/page'.($page+1).'"><img src="images/next.png" alt="next →" /></a>';
} else {
$numbers_html .= ' - <img src="images/next.png" alt="next →" class="inactive"/>';
}
$count++;
$html .= '<div class="pagination_numbers">'.$numbers_html.'</div>';
if($navigation_html) {
$html .= '<div class="pagination_navigation">skip to: <select onchange="window.location=this.value">'.$navigation_html.'</select> of '.($total_pages+1).'</div>';
}
$html .= '</div>';
}
return $html;
}
答
如果你有很多的网页显示,你可能要考虑“对数”页naviagtion,正如我在我的答案在这里描述:
How to do page navigation for many, many pages? Logarithmic page navigation
(样本PHP代码只处理分页显示 - 不是数据库查询)。
尽管您在20分钟前发布了此消息,但我想第三次指出您不希望在SQL查询中使用$ _GET请求。这样做可能会破坏整个数据库。 – 2009-06-30 16:25:38