2009-06-30 5 views
2

Ceci est un code de pagination utilisé pour la navigation, des idées comment obtenir ce code pour afficher simplement une liste numérotée des pages en tant que liens?php pagination pages numérotées liens

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); 

et ...

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

Bien que vous ayez posté ceci il y a 20 minutes, je voudrais souligner pour la 3ème fois que vous ne voulez pas utiliser une requête $ _GET dans une requête SQL. Cela pourrait détruire toute votre base de données. –

+0

http://xkcd.com/327/ – McAden

Répondre

3

Essayez ceci:

$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++; 

} 

Sur une note côté, comme Ian Elliot a souligné dans les commentaires de votre question, en utilisant $ _GET dans un La requête SQL laisse votre base de données TRÈS vulnérable et est donc considérée comme une pratique de codage extrêmement peu sûre. Vous devriez échapper et analyser les données $ _GET dont vous avez besoin avec diligence avant de les transmettre à la base de données.

1

Voici une fonction que j'utilise depuis longtemps pour la pagination. Il ne renvoie rien s'il n'y a qu'une seule page, renvoie jusqu'à 15 pages avec des nombres, puis ajoute une liste déroulante qui vous permet de passer à une 10e page s'il y a plus de 15 pages. Il s'appuie sur certaines images prev/next, mais vous pouvez facilement l'enlever.

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; 
}