2009-06-30 71 views
2

这是一个用于导航的分页代码,任何想法如何让这个代码显示链接的页面的简单列表?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 
?> 
+2

尽管您在20分钟前发布了此消息,但我想第三次指出您不希望在SQL查询中使用$ _GET请求。这样做可能会破坏整个数据库。 – 2009-06-30 16:25:38

回答

3

试试这个:

$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>&nbsp;"; 

    $pagelinkcount++; 

} 

在一个侧面说明,伊恩·艾略特在你的问题的评论中指出,在使用$ _GET SQL查询会使数据库非常脆弱,因此被认为是非常不安全的编码实践。在将其传递给数据库之前,您应该努力转义并解析您需要的$ _GET数据。

1

这是我一直用于分页的功能。如果只有一个页面,它将返回任何内容,最多返回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="&larr; prev" class="inactive" /> - '; 
     } else { 
      $numbers_html .= '<a href="'.$url.'/page'.($page-1).'"><img src="images/prev.png" alt="&larr; 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 &rarr;" /></a>'; 
     } else {  
      $numbers_html .= ' - <img src="images/next.png" alt="next &rarr;" 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; 
}