problema con la paginazione di dati estratti dal DB

ciao,

ho un problema con la paginazione dei risultati di una ricerca nel DB.

in pratica, se da una ricerca ottengo ad esempio 20 record su un totale di 100 e la paginazione mi visualizza 10 record per pagina, quando passo alla seconda pagina perdo il criterio di ricerca e mi stampa TUTTI  i 100 record presenti nel DB.

la cosa strana è che questo succede SOLO  sul server, mentre in locale funziona tutto regolarmente.

non riesco a capire quale possa essere il problema.

è forse una questione di configurazione del server? se si cosa dovrei controllare?

posto il file per la paginazione:

<?php

ini_set('arg_separator.output', '&');

function paging($query,$x_pag=5,$num_links=5)
{
 //conteggio i record presenti
 $resource =  mysql_query($query);
 $righe = mysql_num_rows($resource);
 
 echo "<div class=\"risultato\">\n<p>Sono stati trovati <span class=\"col_res\">".$righe."</span> risultati</p></div>\n<table class=\"tabella\">\n";
 
 if ($righe == 0){ return false; }

 //calcolo il numero di pagine necessarie per visualizzare i dati
 $numpages = ceil($righe/$x_pag);
 
 //ottengo il numero di pagina, se manca lo imposto ad 1
 $pag = isset($_GET['pag'])? $_GET['pag'] : 1;
 
 //imposto il primo estremo del limit
 $da = ($pag-1) * $x_pag;
 
 //appendo il limit alla query originaria
 $query .= " LIMIT $da,$x_pag";
 
 //gesisco la propagazione della query string
 $querystring = '';
    foreach($_GET as $k => $v)
     {
      if ($k != 'pag')
        {
          $querystring .= "&amp;".$k."=".$v;
       }
     }
 
 //inizializzo una stringa vuota in cui appenderò l'output del menu'
 $menu = '';
 
//serie di condizionali in cascata per costruire il menu'
if($numpages <= $num_links)
  {
   for ($pagina = 1; $pagina <= $numpages; $pagina++)
     {
      if ($pagina == $pag)
        $menu .= "<span class=\"pag_selected\"> $pagina </span> ";
      else
        $menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>\n ";
     }
  }

//se la pag corrente è tra le prime $num_links/2 --> stampo i primi $nun_links link
else if($pag <= ceil($num_links/2))
  {
   for ($pagina=1; $pagina<=$num_links; $pagina++)
     {
      if ($pagina == $pag)
        $menu .= "<span class=\"pag_selected\"> $pagina </span>&nbsp;\n ";
      else
        $menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>&nbsp;\n ";
     }
   $menu .= "<a class=\"pag_link\" href=\"?pag={$numpages}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>&nbsp;\n";
  }

//se la pag corrente è tra le ultime $num_links/2 --> stampo gli ultimi $nun_links link
else if($pag > ($numpages-ceil($num_links/2)))
  {
   $menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>&nbsp;\n ";
   for ($pagina=$numpages-$num_links+1; $pagina<=$numpages; $pagina++)
     {
      if ($pagina == $pag)
        $menu .= "<span class=\"pag_selected\"> $pagina </span>&nbsp;\n ";
      else
        $menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>&nbsp; \n";
     }
  }

//Altrimenti la pagina corrente è una dell centrali --> stampo i $nun_links/2 link prima ed $nun_links/2 link dopo
else
  {
   $menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>&nbsp;\n ";
   for ($pagina = $pag-ceil($num_links/2-1); $pagina <= $pag+ceil($num_links/2-1); $pagina++)
     {
      if ($pagina == $pag)
         $menu .= "<span class=\"pag_selected\"> $pagina </span>&nbsp; ";
      else
        $menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>&nbsp;\n ";
     }
   $menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>&nbsp;\n ";
  }

 //restituisco il risultato della query, e l'output del menu'
 return array(mysql_query($query),$menu);
} 
?>

grazie mille

inviato 9 anni fa
iTek
iTek
1
X 0 X

Può essere che ini_set non è abilitato sul server?

risposto 9 anni fa
LonelyWolf
X 0 X

con phpinfo, dov'è che trovo la riga che riguarda ini_set?

ma cmq non ho errori strani nella costruzione della querystring

la '&' mi viene visualizzata correttamente sul server.... ???

o non c'entra niente?

edit:

trovato:

arg_separator.input   &   &

arg_separator.output   &   &

risposto 9 anni fa
iTek
iTek
1
modificato 9 anni fa
X 0 X

ho provato a mettere arg_separator.output, nel php.ini locale, identico a quello del server.

in locale continua a funzionare... :o

risposto 9 anni fa
iTek
iTek
1
X 0 X

sto impazzendo... :D

non riesco a capire perchè in locale funzia e in remoto no... >:(

ditemi qualcosa....

risposto 9 anni fa
iTek
iTek
1
X 0 X

Premetto che non ho idea di cosa possa essere.  :-\

Le versioni di php sono uguali?

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

praticamente si.

ma a parte quello, qui si tratta di  propagazione della query string, che sembra funzionare per quanto rigarda il conteggio dei record e il numero di pagine relative, ma quando clicco la seconda pagina, mi perde tutto il filtro di ricerca.... e io sono bloccato per questo... >:(

risposto 9 anni fa
iTek
iTek
1
X 0 X

io avevo ho risolto il "problema" salvando il risultato della query dentro una sessione...

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

non ho capito cosa c'entrano in questo caso le sessioni...

ma tu usi lo stesso codice per la paginazione?

risposto 9 anni fa
iTek
iTek
1
X 0 X
..., quando passo alla seconda pagina perdo il criterio di ricerca e mi stampa TUTTI  i 100 record presenti nel DB...

Io salvavo il criterio di ricerca dentro a una sessione.

clicca quì per vedere  l'esempio della paginazione.

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Cambia script per la paginazione  >:D

Paginazione dei dati: http://www.phpnews.it/forum/index.php?topic=1834.0

risposto 9 anni fa
Lex84
X 0 X

Cambia script per la paginazione  >:D

Paginazione dei dati: http://www.phpnews.it/forum/index.php?topic=1834.0

 O0

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda