Problema con paginazione dati

Ciao.

E' da parecchio che sono assente dal forum.. :)

Allora.

In un mio progetto precedente (che qualcuno già conosce) ho dimenticato di inserire codice php per impaginare i dati.

Ho questo codice:

......


  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";
    }                
     
$query = mysql_query ($tutto,$link)
 or die ("Non riesco ad eseguire la richiesta $tutto");
 $totr=mysql_num_rows($query);
 echo "<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>"; 

while( $row = mysql_fetch_array($query) )
   {
   $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"];
  }
?>
......
<?   
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']; 
  } 

.....

In pratica a secondo di una condizione di ricerca da me scelta

interrogo il db che inserisce i dati nella variabile "$tutto"

usata successivamente per la query e per la visualizzazione dei dati in righe.

Mi sono accorto però che finché i record trovati sono poco numerosi va anche bene così ma se

i record e quindi le righe stampate a video sono numerosi è meglio paginarli.

Il problema è che adesso non so come usare il comando LIMIT.

Dovrei ripetere le query con Limit ma i dati sono già stati estratti nelle vari condizioni (id elseif...) e questa

query:

$query = mysql_query ($tutto,$link)

non fa altro che richiamarli.

C'è un modo per inserire il Limit nella query sopra?

Non vorrei stravolgere il codice.

Grazie

inviato 9 anni fa
frankphp
X 0 X

Potresti fare così (non è molto elegante e non sò neanche se funziona...  :D )

$passo = // il passo che viene dato alla query
$tutto = // qui c'e la tua query 
$tutto .= "DESC LIMIT $passo, 30";
$query = mysql_query ($tutto,$link)

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Potresti fare così (non è molto elegante e non sò neanche se funziona...  :D )

$passo = // il passo che viene dato alla query
$tutto = // qui c'e la tua query 
$tutto .= "DESC LIMIT $passo, 30";
$query = mysql_query ($tutto,$link)

 :bye:

Non ho capito.

Passo cos'è? e 30?

grazie

risposto 9 anni fa
frankphp
X 0 X

MySQL supporta la paginazione dei dati attraverso l'istruzione LIMIT, che limita appunto l'estrapolazione di dati. Una query simile:

SELECT * FROM dati LIMIT 1,5

Specifica a MySQL di prendere i records dal primo al quinto all'interno della tabella dati. I due valori che seguono l'istruzione LIMIT, indicano da quale record iniziare a prendere i dati e quanti prenderne (1,5: per l'appunto dal primo record, prendine cinque).

Se avessimo voluto prenderli dal ventesimo al trentesimo, avremmo scritto:

SELECT * FROM dati LIMIT 20,10

Ovvero, partendo dal ventesimo record, prendine 10

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Non va!

Mi dice o che non riesce ad eseguire la query o che c'è un errore.

risposto 9 anni fa
frankphp
X 0 X

Xkè dal tuo codice devi togliere "' ORDER BY data" dove componi $tutto e metterlo dentro al codice che ti ha postato maverik.

Order by deve essere l'ultima parte della query se non erro.

risposto 9 anni fa
LonelyWolf
X 0 X

Confermo... quando ho buttato giù il codice non ho guardato essattamente com'era la tua query, ti ho solo dato il principio di funzionamento.

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

provo stasera grazie.

Ma nel codice:

tutto .= "DESC LIMIT $passo, 30";

C'è proprio il punto e =?

Grazie ancora e ciao

risposto 9 anni fa
frankphp
X 0 X

certo è una abbreviazione, come:

$x = $x +1 può essere $x++ o $x += 1 (nel caso di incremento di una unità si usa ++, è + comodo)

e

$tutto = $tutto."DESC LIMIT $passo, 30"; abbreviato in $tutto .= "DESC LIMIT $passo, 30";

risposto 9 anni fa
LonelyWolf
X 0 X

E' si! e proprio lì il bello....  :D Leggi quì allora capirai meglio.  O0

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Lonely mi hai battuto sul tempo...  :(

  O0 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

si adesso funziona, ma ho un altro problema con i link della pagina.

Ho riciclato il codice di paginazione che crea anche i link. quest'ultima parte

(quella dei link) non va.

In pratica quando clicco sul numero pagina (1 e 2 in questo caso visto che i record sono 10)

mi "apre" la pagina del codice del grafico (quello incluso nell'ultimo else che vedete..ma che non posto per la lunghezza) e non la seconda èpagina con i restanti 5 record.

Come mai:

$scelta = $_POST['button'];
if ($scelta == "lista"){
  
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");   
 
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>";
  } 
  
 
  
  
  else {
  
.............................

Grazie.

PS: ho lasciato ORDER BY data dov'era; non mi sembra che dia problemi.

risposto 9 anni fa
frankphp
X 0 X

dai ragazzi! ;)

ciao

risposto 9 anni fa
frankphp
X 0 X

Bhe se esegue il codice contenuto nell'ultimo else vuol dire che il controllo del if dà falso quindi bisogna procedere a verificare come mai dà falso.

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Bhe se esegue il codice contenuto nell'ultimo else vuol dire che il controllo del if dà falso quindi bisogna procedere a verificare come mai dà falso.

 :bye:

al posto dell'else ho specificato:

....

 if ($scelta == "stat"){

....

questa volta se clicco sui link delle pagine non si carica più il codice del grafico ma la pagina è completamente bianca. Non capisco quale sia il problema, pensavo che la cosa fosse più facile.

Grazie

risposto 9 anni fa
frankphp
X 0 X

Se non hai messo niente dentro a l'ultimo else e non hai modificato il controllo del if, è giusto che ti dia una pagina bianca. Il problema come ti dicevo è nel controllo fatto dell'if che giudica la condizione falsa e quindi procede con il codice dentro all'else.

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Se non hai messo niente dentro a l'ultimo else e non hai modificato il controllo del if, è giusto che ti dia una pagina bianca. Il problema come ti dicevo è nel controllo fatto dell'if che giudica la condizione falsa e quindi procede con il codice dentro all'else.

 :bye:

No!

non ho toccato niente del codice dell'else ho solo specificato meglio inserendo l'If che controlla la condizione

(al posto dell'else)

Il codice che prima era sotto l'else è rimasto identitco.

Cosa può essere :'(

grazie

risposto 9 anni fa
frankphp
X 0 X

Allora controlliamo passo passo cosa può essere... Hai verificato il valore del $_POST['button']; ? è corretto cioè arriva il valore lista o stat?

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X
Allora controlliamo passo passo cosa può essere... Hai verificato il valore del
$_POST['button'];

? è corretto cioè arriva il valore lista o stat?

 :bye:

Si ho verificato

Se arriva il valore lista si carica il codice che ci interessa

con stat invece il codice del grafico.

Poi?

Grazie

risposto 9 anni fa
frankphp
X 0 X

E se non arriva nessun valore da quel post perchè clicchi sul link per visualizzare la seconda pagina con i restati 5 risultati della query cosa succede?

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

E se non arriva nessun valore da quel post perchè clicchi sul link per visualizzare la seconda pagina con i restati 5 risultati della query cosa succede?

 :bye:

Non so se ho capito bene

In basso attualmente (relativo a lista ovviamente) ho 2 link

1 e 2 se clicco sul link 2 per visualizzare i restanti 5 record (ho scelto per prova di ripartire i record 5 per pagina e ora sono 10) visualizzo una pagina bianca

idem se provo a cliccare sul link 1 per tornare indietro.

Cosa può essere?

risposto 9 anni fa
frankphp
X 0 X

Prova a fare così....

$scelta = "lista";

e poi dimmi.

 :bye:

risposto 9 anni fa
Marco Dario
X 0 X

Prova a fare così....

$scelta = "lista";

e poi dimmi.

 :bye:

Scusami se ti rispondo solo adesso.

$scelta = "lista";

ma che significa?

Da inserire dove e perchè?

Non ho capito :dunno:

L'ho inserita nel codice dopo il primo if (quello della scelta)

ma non è cambiato niente.

Ciao e grazie

risposto 9 anni fa
frankphp
X 0 X

RISOLTO!! O0

Il problema effettivamente era proprio nella condizione if.

Non ho fatto altro che mettere adesso come prima condizione quella del codice relativo al grafico

  if ($scelta == "stat"){

e come else quello della lista.

In tale modo ogni volta che si cambia pagina non verificandosi la condizione del grafico

richiama sempre il codice della lista.

Ciao e grazie

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