Visualizzazione risultati 1 fino 14 di 14

Discussione: Problema con query in paginazione

  1. #1
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito Problema con query in paginazione

    Ciao a tutti.

    Mi sono accorto che c'è un problema nella ricerca dei documenti relativa a un progetto che avevo sviluppato tempo fa

    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).


    Codice PHP:
    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

  2. #2
    Guest

    Predefinito

    Non mi metto a leggere tutto lo script, ma ti faccio un esempio base di paginazione:

    Codice PHP:
    if(!isset($_GET['pag']) || (int)$_GET['pag']<1){
    $_GET['pag']="1";
    }
    $a=5; // record per pag
    $da=($_GET['pag']-1)*$a;
    $q_tot=mysql_query("SELECT * FROM tabella");
    $q_search=mysql_query("SELECT * FROM tabella LIMIT $da, $a");

    while(......
    Altri parametri ovviamente sono da aggiungere a tuo piacimento.

    Ciaoooo!!!!!

  3. #3
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Non mi metto a leggere tutto lo script, ma ti faccio un esempio base di paginazione:

    Codice PHP:
    if(!isset($_GET['pag']) || (int)$_GET['pag']<1){
    $_GET['pag']="1";
    }
    $a=5; // record per pag
    $da=($_GET['pag']-1)*$a;
    $q_tot=mysql_query("SELECT * FROM tabella");
    $q_search=mysql_query("SELECT * FROM tabella LIMIT $da, $a");

    while(......
    Altri parametri ovviamente sono da aggiungere a tuo piacimento.

    Ciaoooo!!!!!

    grazie debug.
    Non vorei però stravolgere il codice sopra.
    Mi servirebbe un consiglio per evitare il problema.
    Grazie

  4. #4
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Forse non ho capito il problema: ma visto che utilizzi $_REQUEST andrebbero bene sia i valori passati via GET che quelli passati via POST, quindi potresti semplicemente aggiungere nei link per le pagine seguenti, oltre alla pagina, i valori che passi.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  5. #5
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da funcool Visualizza messaggio
    Forse non ho capito il problema: ma visto che utilizzi $_REQUEST andrebbero bene sia i valori passati via GET che quelli passati via POST, quindi potresti semplicemente aggiungere nei link per le pagine seguenti, oltre alla pagina, i valori che passi.
    qui?

    for ($pag = 1; $pag <= $numero_pagine; $pag++) {
    echo "[&nbsp<a href=?";


    in questo echo con il link?

    Così evitiamo le sessioni?

    Grazie

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Sì, intendo lì, così passi i valori tramite la barra dell'indirizzo.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da funcool Visualizza messaggio
    Sì, intendo lì, così passi i valori tramite la barra dell'indirizzo.
    magari non ho capito bene; però nel codice ho i vari if e else che a seconda dei campi che possono essere vuoti o con valori "avvia" un codice piuttosto che un altro.
    Che ne pensi?
    Grazie

  8. #8
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Cosa dovrei pensare? Tu devi passare solo i valori che esistono.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  9. #9
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da funcool Visualizza messaggio
    Cosa dovrei pensare? Tu devi passare solo i valori che esistono.
    penso che ci sia qualcosa che sfugge della soluzione a me e forse anche a te.
    Tu come faresti precisamente in base al codice che ho sopra?
    Per come ho capito io dovrei creare nella pagina altre 3 variabili che accolgono i valori presi con i vari request per poi inviarli tramite link della paginazione (come avevi detto):

    $_REQUEST['clie'],
    $_REQUEST['firstinput']
    $_REQUEST['secondinput']

    ma così magari ripeto la query senza risolvere il problema della paginazione.
    Fammi capire bene.
    Grazie ancora
    Ultima modifica di gianlucaweb : 03-10-2007 alle ore 15.02.46

  10. #10
    Guest

    Predefinito

    Io vedo molte più complicazioni ora; seguendo i miei consigli accorciavi lo script ed era più facile.


    Ciao!

  11. #11
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Io vedo molte più complicazioni ora; seguendo i miei consigli accorciavi lo script ed era più facile.


    Ciao!
    ok, posso usare anche il tuo metodo, ma non ho capito come continua.
    Mi riferisco alla parte che riguarda il link alle pagine.
    Uso il mio stesso codice per questa parte.
    scusatemi ragazzi ma non sono un esperto di php.
    Grazie

  12. #12
    Guest

    Predefinito

    Ti facilito le cose: http://www.debug.altervista.org/articoli.php?id=1
    In questo articolo è spiegata una funzione adattabile a molte esigenze (ma è possibile anche usarla così comè, personalizzando pochissimi parametri).

    Segui la guida e per qualunque difficoltà posta qui.


    Ciaooooo!!!!!

  13. #13
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Io vedo molte più complicazioni ora; seguendo i miei consigli accorciavi lo script ed era più facile.
    Dalla guida che gli hai linkato devi comunque aggiungere tutti i parametri...
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  14. #14
    Guest

    Predefinito

    Devi solo fare una doppia query ad ogni visualizzazione e richiamare la funzione, i cui parametri sono spiegati nell'articolo.


    Ciaoooo!!!!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •