• User Attivo

    pulsante avanti e indietro con il glossario

    ho realizzato un glossario solo che escono troppi risultati per ogni lettera del glossario, vorrei suddividere i risultati in più pagine, cioè fare una paginazione, cosa devo aggiungere?

    [PHP]<?
    for ($i=65;$i<91;$i++)
    {
    echo"<a href="inserimento_serviziounghie_new.php?lettera=".chr($i)."">".chr($i)."</a>"." ";
    }
    $lettera = $_GET['lettera'];

    $query = "SELECT b_serviziounghie., b_centri.,
    DATE_FORMAT(b_serviziounghie.data_ins_dati, '%d-%m-%Y')AS data_ins_dati
    FROM b_serviziounghie, b_centri
    WHERE b_serviziounghie.id_centri = b_centri.id_centri
    AND b_centri.nome_centro LIKE '$lettera%'
    ORDER BY b_serviziounghie.data_ins_dati DESC,
    b_serviziounghie.ora_ins_dati DESC";
    $ris_query=mysql_query($query, $conn);
    while($row=mysql_fetch_array($ris_query)){?>
    [/PHP]


  • User Attivo

    Alla query SQL aggiungi l'opzione LIMIT.

    SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT 3, 15

    Quando la query restituisce il risultato, il 3 indica la riga di partenza, il 15 il numero di righe da restituire dopo la 3 riga.
    Gioca con questa opzione per poter limitare la query e creare pagine.
    Es. Pagina 1 - LIMIT 0, 50 // Pagina 2 - LIMIT 50, 100 // ecc...

    Ciao :ciauz:


  • User Attivo

    ciao Sups,
    ho fatto così per limitare le righe a 10 per volta, anche se ho il dubbio se devo partire da 0 o da 1:
    [PHP]
    <?
    $query = "SELECT b_serviziounghie., b_centri., DATE_FORMAT(b_serviziounghie.data_ins_dati, '%d-%m-%Y')AS data_ins_dati
    FROM b_serviziounghie, b_centri
    WHERE b_serviziounghie.id_centri = b_centri.id_centri AND b_centri.nome_centro LIKE '$lettera%'
    ORDER BY b_serviziounghie.data_ins_dati DESC, b_serviziounghie.ora_ins_dati DESC limit 0, 10";
    $ris_query=mysql_query($query, $conn) or die (mysql_error());

    	while($row=mysql_fetch_array($ris_query)){?>
    

    [/PHP]

    ma poi sotto la decima riga volevo far comparire, ad esempio se ho cliccato la lettera F e mi risultano 30 righe con la F, vorrei che a fondo pagina comparisse:
    "1" - "2" - "3"
    che sarebbero le tre pagine (10 righe per pagina) e se clicco su "1" mi va alla prima pagina con le prime 10 righe della lettera F, se clicco sul "2" vado alla seconda pagina dove ci sono le successive 10 righe della lettera F, ecc...

    come ho visto che hai fatto anche con il tuo sito:
    http://www.am85software.altervista.org/vr_back/index.php?id=35


  • User Attivo

    up


  • User Attivo

    Per creare le pagine ho utilizzato una operazione matematica semplice.
    Con la query da eseguire, SENZA LIMIT, ricavo il numero totale di righe , utilizzando la funzione mysql_num_rows(), nel tuo caso il risultato viene salvato in $row.
    $row contiene il numero di righe del risultato dalla query.
    Se $row = 200 è vuoi 10 messaggi per pagina allora devi fare "$row / 10" che fa 20 pagine.
    Adesso con un ciclo FOR compiliamo il link per le pagine.

    [php]
    $x = 10 // Messaggi per pagina
    $pag = 2 // Numero di pagina

    $pagina = "<a href='index.php?id=0'>Pag 1</a>"; // Prima pagina = Prima Riga (ID = 0)

    for($i = $x; $i <= $row; $i = $i + $x)
    {
    $pagina .= "<a href='index.php?id=" . $i . "'>Pag " . $pag . " </a>"; //Crea link pagina
    $pag++; //Incrementa pagina
    }
    [/php]

    Come vedi nell'indirizzo del mio sito id=35 indica il numero di partenza del LIMIT.
    Es. /index.php?id=35 --> ... LIMIT 35
    Il secondo numero è calcolato in base al numero di messaggi da visualizzare per pagina, in questo caso 10, quindi 35 + 10 = 45 --> ... LIMIT 35, 45

    Ciao :ciauz:


  • User Attivo

    ciao ho levato LIMIT e su row ho messo:
    while($row / 10=mysql_fetch_array($ris_query)){?>

    ma mi da questo errore:

    Parse error: syntax error, unexpected '=' in /web/htdocs/www.sito.it/home/serviziounghie/inserimento_serviziounghie_new.php on line 124


  • User Attivo

    ho inserito il tuo codice ma mi da questo errore:
    Parse error: syntax error, unexpected T_VARIABLE in /web/htdocs/www.sito.it/home/serviziounghie/inserimento_serviziounghie_new.php on line 188

    @Sups said:

    [php]
    $x = 10 // Messaggi per pagina
    $pag = 2 // Numero di pagina

    $pagina = "<a href='index.php?id=0'>Pag 1</a>"; // Prima pagina = Prima Riga (ID = 0)

    for($i = $x; $i <= $row; $i = $i + $x)
    {
    $pagina .= "<a href='index.php?id=" . $i . "'>Pag " . $pag . " </a>"; //Crea link pagina
    $pag++; //Incrementa pagina
    }
    [/php]


  • User Attivo

    Ci credo che da errore

    while($row=mysql_fetch_array($ris_query))

    il $row non deve essere diviso per 10 prima dell'operazione, poi quello che ti ho fatto vedere era l'operazione da fare per ricavare il numero di pagine, ci pensa il FOR ad eseguire il tutto.

    Al codice devi aggiungere il FOR è rimuovere il LIMIT, il resto va mantenuto
    Per gli errori, ho dimenticato il ; alla fine delle variabili $x e $pag

    $x = 10;
    $pag = 2;


  • User Attivo

    ho trovato un tutorial che spiega come fare, funziona solo che la paginazione me la da per tutti i record e non li suddivide per lettera del glossario come vorrei io.

    GLOSSARIO
    [PHP]
    <?php
    for ($i=65;$i<91;$i++)
    {
    echo"<a href="inserimento_serviziounghie_new.php?lettera=".chr($i)."">".chr($i)."</a>"."  ";
    }
    $lettera = $_GET['lettera'];
    ?>
    [/PHP]

    PAGINAZIONE
    [PHP]
    <?php
    // esecuzione prima query
    $count = mysql_query("SELECT COUNT(id_serviziunghie)
    FROM b_serviziounghie");
    $res_count = mysql_fetch_row($count);

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

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

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

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

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

    $query = "SELECT b_serviziounghie., b_centri., DATE_FORMAT(b_serviziounghie.data_ins_dati, '%d-%m-%Y')AS data_ins_dati
    FROM b_serviziounghie, b_centri
    WHERE b_serviziounghie.id_centri = b_centri.id_centri AND b_centri.nome_centro LIKE '$lettera%'
    ORDER BY b_serviziounghie.data_ins_dati DESC, b_serviziounghie.ora_ins_dati DESC LIMIT $primo, $per_page";
    $ris_query=mysql_query($query, $conn) or die (mysql_error());

    	while($row=mysql_fetch_array($ris_query)){?>
    

    [/PHP]

    PAGINAZIONE
    [PHP]
    <?php
    //
    // stampa paginazione
    $paginazione = "Pagine totali: " . $tot_pages . "
    [";
    for($i = 1; $i <= $tot_pages; $i++) {
    if($i == $current_page) {
    $paginazione .= $i . " ";
    } else {
    $paginazione .= "<a href="?page=$i#fondo" class="tre" title="Vai alla pagina $i">$i</a> ";
    }
    }
    $paginazione .= "]";
    echo "$paginazione";
    // fine stampa paginazione
    //
    ?>
    [/PHP]