Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

Divisione in pagine di query SQL

Cerchi consigli per migliorare il tuo sito? Vuoi aprire un sito in poco tempo?
Discuti con altri webmaster, chiedi chiarimenti ed opinioni in tutta libertà.
Lo spam verrà cancellato.

Divisione in pagine di query SQL

Messaggioda nannolo » sab mar 28, 2009 6:14 pm

Il titolo non rispecchia molto il mio problema, comunque...
Sto aiutando un mio amico a fare uno pseudo blog all'interno del quale vuole inserire degli articoli. Ormai è ultimato tutto, dal CMS alla gestione delle sessioni, tuttavia ho un problema nel limitare il numero di pagine della navigazione. Mi spiego meglio...
Cliccando su "Archivio" viene eseguita questa query:
Codice: Seleziona tutto
$query = "SELECT * FROM Articoli ORDER BY id_art DESC LIMIT $start,$step";

Con "$start" indico l'articolo dal quale limitare la query e "$step" è il numero effettivo di articoli da visualizzare per pagina. In seguito estraggo i record dalla tabella risultante e li visualizzo. Vi risparmio la parte di visualizzazione. Subito dopo c'è la parte con cui ho un problema.
Codice: Seleziona tutto
<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">
<tbody><tr><td style="text-align: left; width: 33%;">
<?
   $current_page = $start / $step;
   if ($start>0){
      $back_page = (($start - $step) / $step) + 1;
      echo "<a href=index.php?id=surf&page=$back_page>Successivi</a>";
   }
   $query = "SELECT count(*) AS tot FROM Articoli";
   $result = mysql_query($query, $db);
   $row = mysql_fetch_array($result);
   $pages = intval(($row[tot]-1) / $step)+1;
?>
</td><td style="text-align: center; width: 33%;">
<?
   $i = 0;
   while($i < $pages){
      $page = $i + 1;
      echo $page;
      if ($i == $current_page){
         echo "<a href=index.php?id=surf&page=$page><u>" . $page . "</u></a> ";
      }else{
         echo "<a href=index.php?id=surf&page=$page>" . $page . "</a> ";
      }
      $i++;
   }
?>
</td><td style="text-align: right; width: 33%;">
<?
   if ($start + $step < $row[tot]){
      $next_page = (($start + $step) / $step) + 1;
      echo "<a href=index.php?id=surf&page=$next_page>Precedenti</a>";
   }
?>
</td></tr></table>

Il mio problema è sul while dove vengono visualizzate le pagine. Se sono 3 viene scritto "1 2 3" se sono 20 viene scritto "1 2 3 ... 20". Vorrei limitare il numero di pagine per 5 o 10 alla volta o se possibile farlo come vengono divise qui sul forum. Il fatto è che non mi viene in mente come implementarlo. Avevo pensato agli array ma non so se siano abbastanza performanti (si dice?).

Se non vi è chiaro qualcosa del codice ditemelo così posso chiarirvelo. Grazie in anticipo.
By golly, I'm beginning to think Linux really *is* the best thing since sliced bread.
Avatar utente
nannolo
Bronze Member
Bronze Member
 
Messaggi: 585
Iscritto il: mar ott 14, 2008 4:47 pm

Re: Divisione in pagine di query SQL

Messaggioda ste_95 » sab mar 28, 2009 7:41 pm

Non è che mi sia chiaro il tuo scopo... Se già vengono "troncate" le pagine di mezzo, cos'altro vuoi fare?
«A volte è meglio tacere e sembrare stupidi che aprir bocca e togliere ogni dubbio.» Oscar Wilde
Avatar utente
ste_95
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 17271
Iscritto il: lun ago 06, 2007 11:19 am

Re: Divisione in pagine di query SQL

Messaggioda nannolo » sab mar 28, 2009 7:57 pm

con troncate intendi questo? "1 2 3 ... 20"
I puntini era per dire che viene scritto "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20", non che vengono effettivamente i puntini.
By golly, I'm beginning to think Linux really *is* the best thing since sliced bread.
Avatar utente
nannolo
Bronze Member
Bronze Member
 
Messaggi: 585
Iscritto il: mar ott 14, 2008 4:47 pm


Re: Divisione in pagine di query SQL

Messaggioda ste_95 » sab mar 28, 2009 8:03 pm

E tu vuoi ottenere un effetto simile a quello dei puntini, ma mostrando solo le prime 5 pagine e poi puntini,giusto? Dovrebbe bastare cerare una variabile con valore 0 che incrementi ogni volta nel ciclo, poi crei un if dentro il while nel quale verifichi che la variabile non sia più grande di 5; se lo è mostri un punto, se non lo è prosegui normalmente.
«A volte è meglio tacere e sembrare stupidi che aprir bocca e togliere ogni dubbio.» Oscar Wilde
Avatar utente
ste_95
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 17271
Iscritto il: lun ago 06, 2007 11:19 am

Re: Divisione in pagine di query SQL

Messaggioda nannolo » sab mar 28, 2009 8:18 pm

Ci avevo già pensato ma poi avevo il problema di non sapere da quale indice far partice la "i" nel while. Comunque mentre mangiavo mi è venuto in mente di fare così e ho risolto:
Codice: Seleziona tutto
<?
function writepage($indice,$current){
   if($indice == $current)
      echo "<a href=index.php?id=surf&page=".($indice+1)."> <u>".($indice+1)."</u> </a>";
   else
      echo "<a href=index.php?id=surf&page=".($indice+1)."> ".($indice+1)." </a>";
}

$inf=$current_page-2;
if ($inf<0)
   $inf=$inf * -1;
else
   $inf=0;

for ($i=-2; $i<3 ; $i++){
   $index=$current_page+$i+$inf;
   if ($index<$pages)
      writepage($index , $current_page);
}
?>


Scusate il disturbo. [bleh]
By golly, I'm beginning to think Linux really *is* the best thing since sliced bread.
Avatar utente
nannolo
Bronze Member
Bronze Member
 
Messaggi: 585
Iscritto il: mar ott 14, 2008 4:47 pm

Re: Divisione in pagine di query SQL

Messaggioda ste_95 » sab mar 28, 2009 8:49 pm

[^]
«A volte è meglio tacere e sembrare stupidi che aprir bocca e togliere ogni dubbio.» Oscar Wilde
Avatar utente
ste_95
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 17271
Iscritto il: lun ago 06, 2007 11:19 am


Torna a Sviluppo Web

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising