2009-06-30 94 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; 
}