Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Paginazione che mi da una pagina in più

    Salve ragazzi.
    Ho una paginazione che mi estrae i dati da una tabella e dovrebbe ordinarli 5 per pagina. Fin qui tutto bene, se non fosse lo script mi tira fuori una pagina in più. Cioè, se ho ad esempio 8 dati in tabelle, invece di visualizzarli in due pagine, me ne da una terza. Ma che rimane vuota!!!! Perchè?

    Vi posto il codice usato:

    Codice PHP:
    $count mysql_query("SELECT COUNT(ordine_id) FROM ordini") or die( mysql_error() . "
    $sql);
    $res_count mysql_fetch_row($count);

    // numero totale di records
    $tot_records $res_count[0];

    // risultati per pagina(secondo parametro di LIMIT)
    $per_page 5;

    // numero totale di pagine
    $tot_pages ceil($tot_records $per_page);

    // pagina corrente
    $current_page = !isset($_GET['page']) ? : (int)$_GET['page'];

    // primo parametro di LIMIT
    $primo = ($current_page 1) * $per_page;

    echo 
    "<div align=\"center\">\n<table>\n";

    // esecuzione seconda query con LIMIT
    $query_limit mysql_query("SELECT utenti.*, eventi.evento as strEvento, ordini.*,
    date_format(ordini.data,'%d-%m-%Y %H:%i') AS dataora
    FROM utenti 
    INNER JOIN ordini ON ordini.utente_id = utenti.utente_id
    INNER JOIN eventi ON eventi.event_id = ordini.event_id 
    WHERE utenti.utente_id ='"
    .$_GET['id']."' Order by ordine_id Desc LIMIT $primo$per_page") or die( mysql_error() . "
    $sql);

    // includiamo uno dei files contenenti la paginazione, commentate l'altro ovviamente
    include("paginazione_2.php");
    //include("paginazione_1.php");

    // in questa cella inseriamo la paginazione
    echo " <tr>\n <td height=\"50\" valign=\"bottom\" align=\"center\">$paginazione</td>\n";

    echo 
    " </tr>\n</table>\n</div>"
    ecco il file della paginazione:

    Codice PHP:
    <?php

    $paginazione 
    "Pagine totali: " $tot_pages "
    ["
    ;
    for(
    $i 1$i <= $tot_pages$i++) {
    if(
    $i == $current_page) {
    $paginazione .= $i " ";
    } else {
    $paginazione .= "<a href=\"?page=$i&id=".$_GET['id']."\" title=\"Vai alla pagina $i\">$i</a> ";
    }
    }
    $paginazione .= "]";

    ?>
    Da cosa può dipendere l'errore?

  2. #2
    codice:
    // numero totale di pagine 
    $tot_pages = ceil($tot_records / $per_page);
    Quanto vale $tot_pages ?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    $tot_pages non è valorizzato, o meglio, è pari a quel che vedi all'interno della parentesi, considerando che $per_page ha valore 5 (scelto da me in modo che visualizzi massimo 5 risultati per pagina).

    Perchè? Dovrebbe essere valorizzato in qualche modo?

  4. #4
    $tot_pages non è valorizzato, o meglio, è pari a quel che vedi all'interno della parentesi
    Stampati il valore di quella variabile da qualche parte (con un echo o magari un file di log).
    Il codice sembra corretto, magari sono i valori ad essere sbagliati...

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    L'ho stampata, mi da 3 mentre le pagine dovrebbero risultare 2!!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ora addirittura mi da 4 pagine, dovrebbero essercene 2! LE due in più sono vuote tra l'altro! Ma perchè?

  7. #7
    Penso che il problema venga dal mysql_fetch_row() usato un po' a sproposito.

    Prova a scrivere così:

    Codice PHP:
    $count mysql_query("
    SELECT COUNT(ordine_id) AS numero FROM ordini"

    or die( 
    mysql_error() . "
    $sql); 

    $res_count mysql_result($count 0'numero') ; 
    Se non mi sono sbagliato a scrivere, dovrebbe andare.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Nella prima query, quella col count(), non filtri per id utente, mentre nella seconda query sì, è normale che non ci sia corrispondenza a meno che tu non abbia un unico utente.
    Inoltre la seconda query ha degli inner join quindi potrebbero esserci delle associazioni tra le righe delle diverse tabelle che non sono corrette.
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  9. #9
    Utente di HTML.it L'avatar di Graboid
    Registrato dal
    Oct 2004
    Messaggi
    619
    Devi solo usare floor al posto di ceil:

    $tot_pages = ceil($tot_records / $per_page);

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Salve ragazzi,
    infatti ero arrivato alla soluzione ieri in nottata. Praticamente, come dice Anakin, mi bastava aggiungere nella select che fa il count degli ID dalla tabella ordini semplicemente l'id relativo all'utente che ricerca gli ordini effettuati. In questo modo infatti visualizzo solo gli ordini dell'utente che esegue la query, mentre prima mi dava tutti i risultati ma mi mostrava solo quelli dell'utente desiderato lasciando le altre pagine vuote!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.