2009-09-18 4 views
0

J'ai eu du mal à paginer le code ci-dessous. Je pense qu'il s'agit de passer la variable GET $ find à la page suivante.Pagination lors de l'utilisation d'une variable GET

De toute façon, comment pourrais-je paginer le code ci-dessous, de sorte que le tableau ci-dessous montre seulement 100 lignes par page?

Merci à l'avance,

John

<?php 
ob_start(); 
session_start(); 
$find = strip_tags($_GET['find']); 
$illegal = array("'", ".", "/", "\"", ";", "{", "}", "[", "]", "\\", "''", "'''", "''''", "'''''", "\\\\", "\\\\\\", "\\\\\\\\"); 
$find = str_replace($illegal, '', $find); 
$find = trim ($find); 
$find = strtolower($find); 
$find = stripslashes($find); 
$_SESSION['find'] = $find; 
?> 

<? 
if ($searching =="yes") 
{ 

if ($find == "") 
{ 
session_write_close(); 
header("Location:http://www.site.com/index.php"); 
exit; 
unset($_SESSION['find']); 

} 

mysql_connect("mysqlv10", "username", "password") or die(mysql_error()); 
mysql_select_db("database") or die(mysql_error()); 
$find = mysql_real_escape_string($find); 

$result=mysql_query("SHOW TABLES FROM database LIKE '$find'") 
or die(mysql_error()); 

if(mysql_num_rows($result)>0){ 
while($table=mysql_fetch_row($result)){ 
print "<p class=\"topic\">$table[0]</p>\n"; 
$r=mysql_query("SELECT * , votes_up - votes_down AS effective_vote FROM `$table[0]` WHERE site != '' ORDER BY effective_vote DESC"); 

print "<table class=\"navbar\">\n"; 
while($row=mysql_fetch_array($r)){ 

$effective_vote = $row['votes_up'] - $row['votes_down']; 

print "<tr>"; 

print "<td class='sitename'>".'<a type="amzn" category="products" class="links2">'.$row['site'].'</a>'."</td>"; 

print "<td class='votes'>".'<span class="votes_count" id="votes_count'.$row['id'].'">'.number_format($effective_vote).'</span>'."</td>"; 
print "<td class='ballot'>".'<span class="button" id="button'.$row['id'].'">'.'<a href="javascript:;" class="cell1" id="'.$row['id'].'">'.vote.'</a>'.'</span>'."</td>"; 
} 
print "</tr>\n"; 
} 
print "</table>\n"; 

} 
?> 

Répondre

0

vous devez utiliser

LIMIT (<pagenumber*amount of records you want to display>,< amount of records you want to display >) 

dans votre instruction SQL

2

Vous devez utiliser LIMIT dans votre requête pour dire la base de données combien de lignes vous voulez et par où commencer.

Transmettez un paramètre qui indique au script que vous voulez un autre segment des résultats et pas seulement le premier.

Donc, pour le lien que vous pouvez transmettre le paramètre page:

example.com/results.php?page=2 

page= dira le script page que vous voulez revenir.

Ensuite, vous aurez besoin de LIMIT le nombre de lignes retournées à chaque fois afin que vous ayez une pagination cohérente.

$results_cnt = 100; //--rows you want per page of results 

maintenant dans votre script, vous allez vérifier pour voir si la variable page a été défini. Si ce n'est pas le cas, par défaut, la ligne de départ doit revenir à la première. Mais comme vous voulez retourner différentes pages/ensembles de résultats, un peu de maths est nécessaire pour commencer à la bonne rangée.

if(isset($_GET["page"]) //--see if the variable is even there 
{ 
    $page_num = (int)$_GET["page"]; //--forcing it to always be an integer 

    $start_row = $results_cnt * ($page_num - 1); 

    /* -- 
    what happens: 
     ($results_cnt currently at 100) 

    on page one (page=1), start at row 0 
     math: 100 * (1 - 1) = 0 

    on page two (page=2), start at row 100 
     math: 100 * (2 - 1) = 100 

    on page three (page=3), start at row 200 
     math: 100 * (3 - 1) = 200 

    etc. 
    */ 
} 
else 
    $start_row = 0; 

Maintenant, après avoir mis la ligne de départ correcte, régler la requête SQL pour utiliser les variables comme ceci:

$r = mysql_query("SELECT *, votes_up - votes_down AS effective_vote 
        FROM `$table[0]` 
        WHERE site != '' 
        ORDER BY effective_vote DESC 
        LIMIT $start_row, $results_cnt"); 

Chaque fois que vous appuyez sur la page, il va vérifier pour voir si $_GET["page"] est là . Sinon, affichez à partir de la première rangée. Si c'est le cas, faites les calculs et calculez le nombre de lignes à passer et affichez la page suivante de.