problema con query in paginazione

Ciao a tutti.

Ho un problema con la paginazione relativa a un progetto che avevo sottoposto alla vostra attenzione qualche mese fa. Eh si a volte ritornano  ;D ;D ;D

In pratica la prima pagina risulta esatta, ma se voglio visualizzare il resto dei risultati della stessa query mi ritrovo con tutti i dati del db.

Per capirci, in un altra pagina (quella con il modulo di selezione) seleziono un cliente (posso scegliere i documenti anche in base ad un certo intervallo di tempo..ma non è importante adesso) e visualizzo inviando le variabili al codice della pagina sotto i risultati che interessano; ad esempio per il cliente Tal dei tali ci sono 6 fatture. la pagina dovrebbe visualizzare un elenco con i dati dei primi 5 (ho impostato l'intervallo così per prova) e nella successiva seconda pagina (pag2) il rimanente documento.

Ecco se clicco su pagina 2 mi ritrovo con parte di tutti gli altri documenti di tutti i clienti (forse come si avessi fatto una query che dovrebbe restituirmi tutto quello che c'è nel db).

.........

else {

include("dati.php");
$link=mysql_connect("$db_host","$db_login","$db_pass")
or die ("Non riesco a connettermi a <b>$db_host");

mysql_select_db ($database, $link)
or die ("Non riesco a selezionare il db $database<br>");

if (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']==""))
   {
 $tutto = "SELECT * FROM fatture ORDER BY data";
     }
     
      elseif (($_REQUEST['clie']!="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']=="")) 
    {
   $tutto = "SELECT * FROM fatture where id_cliente = '".$_REQUEST['clie']."' ORDER BY data"; 
    }
    
    elseif (($_REQUEST['clie']!="")&&($_REQUEST['firstinput']!="")&&($_REQUEST['secondinput']=="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['firstinput']);
    $datain = mktime(0,0,0,$mese,$giorno,$anno);
    $tutto = "SELECT * FROM fatture where id_cliente = '".$_REQUEST['clie']."' and data >= '".$datain."' ORDER BY data"; 
    }
    
     elseif (($_REQUEST['clie']!="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']!="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['secondinput']);
    $datafin = mktime(23,59,59,$mese,$giorno,$anno);
    $tutto = "SELECT * FROM fatture where id_cliente = '".$_REQUEST['clie']."' and data <= '".$datafin."' ORDER BY data"; 
    }
    
     elseif (($_REQUEST['clie']!="")&&($_REQUEST['firstinput']!="")&&($_REQUEST['secondinput']!="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['firstinput']);
    $datain = mktime(0,0,0,$mese,$giorno,$anno);
    
    list($giorno,$mese,$anno) = split("/",$_REQUEST['secondinput']);
    $datafin = mktime(23,59,59,$mese,$giorno,$anno);
    
    $tutto = "SELECT * FROM fatture where id_cliente = '".$_REQUEST['clie']."' and data >= '".$datain."' and data <= '".$datafin."' ORDER BY data";
    }                
     
    elseif (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']!="")&&($_REQUEST['secondinput']=="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['firstinput']);
    $datain = mktime(0,0,0,$mese,$giorno,$anno);
    $tutto = "SELECT * FROM fatture where data >= '".$datain."' ORDER BY data";
    }  
    
     elseif (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']!="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['secondinput']);
    $datafin = mktime(23,59,59,$mese,$giorno,$anno);
    $tutto = "SELECT * FROM fatture where data <= '".$datafin."' ORDER BY data";
    }
    
     elseif (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']!="")&&($_REQUEST['secondinput']!="")) 
    {
    list($giorno,$mese,$anno) = split("/",$_REQUEST['firstinput']);
    $datain = mktime(0,0,0,$mese,$giorno,$anno);
    
    list($giorno,$mese,$anno) = split("/",$_REQUEST['secondinput']);
    $datafin = mktime(23,59,59,$mese,$giorno,$anno);
    $tutto = "SELECT * FROM fatture where data >= '".$datain."'and data <= '".$datafin."' ORDER BY data";
    }                

$righe_per_pagina = 5;
if (!isset($_REQUEST['pagina'])) $pagina = 1;
else {
    if ($_REQUEST['pagina'] <= 0) $pagina = 1;
    else $pagina = $_REQUEST['pagina'];
   }


   
 global $pagina, $righe_per_pagina;
    
$query = mysql_query ($tutto,$link)
 or die ("Non riesco ad eseguire la richiesta $tutto");
 $totr=mysql_num_rows($query);
 
 // arrotonda al numero intero + alto
    $numero_pagine = ceil($totr/$righe_per_pagina);
    
// calcola il numero della pagina corrente
    $pagina_corrente= ceil($pagina-1/$righe_per_pagina); 
           

 echo " <div align=center><b>Pagina $pagina_corrente di $numero_pagine</b></div><br>
 <b>Numero fatture trovate: <font color=\"#FF0000\" size=\"5\"> ".$totr." </font></b> <a href=\"ricerca.php\">Ritorna al modulo</a><br><br>
 
 <table border=1 width=\"600\" cellspacing=\"0\" cellpadding=\"5\"><tr>
  <td width='80' align='center'><b>Fattura N°</b></td>
  <td width='150' align='center'><b>Data</b></td>
  <td width='250' align='center'><b>Cliente</b></td>
  <td width='120'align='center'><b>Dettagli</b></td></tr></table><br>";
 
$tutto.=" LIMIT ".(($pagina-1)*$righe_per_pagina).", ".$righe_per_pagina;
$querylim = mysql_query ($tutto,$link)
 or die ("Non riesco ad eseguire la richiesta $tutto");   
 if (mysql_num_rows($querylim) > 0) {
while( $row = mysql_fetch_array($querylim) )
   {
   $cust = $row["id_fattura"];
   
   $querycust = mysql_query("SELECT * FROM clientidb JOIN fatture ON clientidb.id_user=fatture.id_cliente
   WHERE fatture.id_fattura = $cust",$link);
   
   while( $rowcust = mysql_fetch_array($querycust) )
{
   $cognome_cliente = $rowcust["cognome"];
   $nome_cliente    = $rowcust["nome"];
  }
?>
<html>
<script type="text/javascript">
function PopupCentrata(dest_url) {
    var w = 600;
    var h = 800;
    var l = Math.floor((screen.width-w)/2);
    var t = Math.floor((screen.height-h)/2);
    window.open(dest_url, "nome_finestra", "width=" + w + ",height=" + h + ",top=" + t + ",left=" + l);
}
</script>  
</html>
<?   
echo "
<table border=0 width=\"600\" cellspacing=\"3\"><tr>
  <td width='80' align='right'><b>$row[numero_fatt]</b></td>
  <td width='150' align='center'><b>".date("d/m/y", $row['data'])."</b></td>
  <td width='125' align='left'><b>&nbsp; $cognome_cliente</b></td>
  <td width='125' align='left'><b>&nbsp; $nome_cliente</b></td>
  <td width='120'align='center'><b><a href=\"#\" onClick=\"PopupCentrata('filmato.php?variabile=$cust')\">Visualizza</a></b></td>
  </tr>
  </table>"; 
 }
 
 echo $_REQUEST['id_user'];
  
 echo "<center><br>";
 if ($numero_pagine > 1) {
//inizio della condizione per creare l'elenco delle pagine
for ($pag = 1; $pag <= $numero_pagine; $pag++) {
echo "[&nbsp<a href=?";
echo "pagina=".($pag).
" title=\"Vai a pagina $pag\">".$pag."</a>&nbsp]&nbsp";
 }
} // fine "elenco"

echo "</center>";

 }
  }

Penso di aver individuato il problema.

Richiamando le restanti pagine della paginazione dei dati in pratica perdo le variabili e viene eseguita la prima query (quella che richiama l'elenco completo)....credo.

Come devo risolvere la cosa?

Uso le sessioni per immagazzinare le variabili che arrivano dal modulo o la uso per la variabile $tutto?

Vanno bene le sessioni in questo caso?

Grazie

inviato 9 anni fa
frankphp
modificato 9 anni fa
X 0 X

un consiglio..dai, ragazzi!!

grazie

risposto 9 anni fa
frankphp
X 0 X

un consiglio..dai, ragazzi!!

grazie

ma ci sono tonnellate di codice da spulciare....non puoi semplificare il tutto?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

un consiglio..dai, ragazzi!!

grazie

ma ci sono tonnellate di codice da spulciare....non puoi semplificare il tutto?

semplificando, il problema sta nel fatto che selezionando la pagina successiva viene eseguita sempre a prima

 query.

Già ho tagliato parte del codice.

Grazie

risposto 9 anni fa
frankphp
X 0 X

In effetti è un bel pò di codice quello che hai postato qui eh?

Io ti posso passare questo articoletto (e relativo script) da me scritto. Ti può andar bene di sicuro ... devi solo integrarlo nel tuo programma!

ecco: http://www.nourdine.net/06.php 

fammi sapere!

cheers  8)

risposto 9 anni fa
Enea Zenni
X 0 X

In effetti è un bel pò di codice quello che hai postato qui eh?

Io ti posso passare questo articoletto (e relativo script) da me scritto. Ti può andar bene di sicuro ... devi solo integrarlo nel tuo programma!

ecco: http://www.nourdine.net/06.php 

fammi sapere!

cheers  8)

Ho visto lo script (bello il fatto che la pagina con lo script può essere ingrandita..come hai fatto?).

Non mi sembra che cambi molto rispetto al mio.

Quello che ho usato qui è identico a quello di un altro mio progetto nel quale questo script va benissimo.

Ho pensato allora (magari mi sbaglio visto le mie scarse conoscenze) Che il problema sta all'inizio dove i vari if, elseif lanciano una query piuttosto che un'altra e ogni volta che linko una pagina diversa dalla prima

la condizione iniziale (che come ho detto sceglie la query da eseguire) viene persa e viene eseguita la prima

in lista.

Cosa ne pensi?

Grazie

risposto 9 anni fa
frankphp
X 0 X

Più ostico del previsto!!

Non sono ancora riuscito a risolvere sto problema.

Ci vorrebbe un'idea.

Grazie

risposto 9 anni fa
frankphp
X 0 X

In effetti è un bel pò di codice quello che hai postato qui eh?

Io ti posso passare questo articoletto (e relativo script) da me scritto. Ti può andar bene di sicuro ... devi solo integrarlo nel tuo programma!

ecco: http://www.nourdine.net/06.php 

fammi sapere!

cheers  8)

Ho visto lo script (bello il fatto che la pagina con lo script può essere ingrandita..come hai fatto?).

Non mi sembra che cambi molto rispetto al mio.

Quello che ho usato qui è identico a quello di un altro mio progetto nel quale questo script va benissimo.

Ho pensato allora (magari mi sbaglio visto le mie scarse conoscenze) Che il problema sta all'inizio dove i vari if, elseif lanciano una query piuttosto che un'altra e ogni volta che linko una pagina diversa dalla prima

la condizione iniziale (che come ho detto sceglie la query da eseguire) viene persa e viene eseguita la prima

in lista.

Cosa ne pensi?

Grazie

mootools : framework javascript

risposto 9 anni fa
Enea Zenni
X 0 X
mootools : framework javascript

????? che significa?

Grazie

risposto 9 anni fa
frankphp
X 0 X

Mi hanno suggerito di usare i campi hidden.

Cosa ne pensate?

Grazie

risposto 9 anni fa
frankphp
X 0 X

ok! Ho risolto!!! ;D ;D ;D ;D

qui

echo "[&nbsp<a href=?";
echo "pagina=".($pag).

invio il num di pagina e le variabili provenienti originariamente dai moduli alla pagina

successiva o precedente.

Ciao

risposto 9 anni fa
frankphp
X 0 X

 O0

P.S.: mi spiace non averti potuto aiutare ma a volte è difficile quando c'è parecchio codice da leggere...

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

O0

P.S.: mi spiace non averti potuto aiutare ma a volte è difficile quando c'è parecchio codice da leggere...

Figurati! Ci mancherebbe altro. Sei sempre stato pronto e cortese nelle risposte.

La soluzione era più semplice del previsto e l'avevo già tentata una volta se ricordo bene, ma chissà a causa di quale virgola o punto e virgola non funzionava e mi sono complicato la vita a trovare soluzione alternative.

E' colpa mia che tra un "lavoro" e un altro in php faccio passare (non sempre per mia volontà) troppo tempo dimenticando molti aspetti di questo linguaggio (..poi ci si mette anche la mia memoria bucata :wallbash:).

Grazie ancora e ciao.

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