Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    27

    Problema su script di paging

    Salve ragazzi! Sono un novizio del php.. perciò perdonate le mie scarse competenze..
    Il codice che ho riportato sotto è un esercizio di paging.
    Dato un array che mi scrive le lettere dalla "a" alla "z"
    Voglio che mi si crei dinamicamente una tabella che mi visualizzi 4 lettere per volta, le altre lettere saranno visualizzate nei link delle pagine sottostanti. Ogni lettera ha alla sua sinistra un numero progressivo, tipo a =1 b =2 c =3 .. etc etc

    Ho riscontrato due problemi:

    1- i numeri progressivi non scorrono.. se avanzo con le pagine ma rimangono sempre 1-2-3-4

    2- se vado nell'ultima pagina mi da un errore di "Undefined Offset"

    Qualcuno potrebbe suggerirmi come procedere? Grazie mille!

    <body>
    <table border="1">
    <?php
    if (!isset($_GET['pag']) OR $_GET['pag']==''){ // se arrivo per la prima volta nella pagina
    $start= 1; // la prima tranche di dati che andrà a visualizzare la prima pagina
    } else {
    $start = $_GET['pag'];
    }
    // creo una variabile leggibile dalla barra degli indirizzi --> intercettata con $_GET
    $lettere =range('a','z') ;
    $conteggio =count($lettere);// utilizziamo il ciclo for perchè abbiamo necessità di contare i record totali ottenuti
    $start = ($start * 4) - 4;// mi coordina la distribuzione degli elementi rispetto alle pagine es: prima tranche 0-1-2-3... (dipende quanti elementi vogliamo visualizzare del nostro array
    $n =1;// creiamo una variabile per il contatore dei record ATTENZIONE! CHE NON E' L'INDICE DELL' ARRAY
    $stop =$start + 4;
    for($i=$start;$i<$stop;$i++){
    echo "<tr>";
    echo "<td width=\"50\">".$n."<td>";
    echo "<td width=\"200\">".$lettere[$i]."<td>";
    echo "</tr>";
    // il contatore dei record si incrementa di 1 una volta che conclude il ciclo for
    $n++;
    }
    echo "<tr>";
    echo "<td width=\"250\">"."Nr. Totale:".$conteggio."<td>";
    echo "<td width=\"200\">";
    $pagine = $conteggio / 4;
    for ($p=1;$p<$pagine;$p++){
    echo "<a href=\"esercizi.php?pag=$p\">".$p."</a>"." ";
    }
    // % vuol dire modulo
    $pagine = $conteggio % 4;// mi calcola il resto della divisione, ma non il suo risultato
    if ($pagine > 0) {
    echo "<a href=\"esercizi.php?pag=$p\">".$p."</a>"." ";
    }
    echo "</td>";// l'impaginazione che indica il numero delle pagine a seconda di quanti record
    echo "</tr>";
    ?>
    </table>
    </body>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    prova con
    Codice PHP:
    if (!isset($_GET['pag']) OR $_GET['pag'] < 1

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    27
    Purtroppo mi da sempre gli stessi errori...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    non ho capito il comportamento di $n ogni volta che chiude il ciclo incrementa di 1
    cioè
    0 1 2 3 n=1
    4 5 6 7 n=2
    è cosi che intendi?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    27
    $n è un semplice contatore

    se clicco nella prima pagina n è uguale a 1 per la lettera A
    2 per la lettera B
    3 per la lettera C
    4 per la lettera D

    se vado nella seconda pagina: n è uguale a 5 per la lettera E
    6 per la lettera F
    7 per la lettera G
    8 per la lettera H

    se vado nella terza pagina: n è uguale a 9 per la lettera I
    10 per la lettera J
    11 per la lettera K
    12 per la lettera L
    e così via...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    leggendo il tuo codice mi sa che
    $n= $start+1
    prova cosi

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    $n la devi legare a $start altrimenti ti da sempre 1 2 3 4

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    27
    ok ora provo a legare $n a $start ....

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    27
    bene!

    ho trovato l'inghippo! grazie al tuo suggerimento ho modificato

    la variabile $n, facendola diventare
    $n = 1 + (($start) *4)-4;

    Rimane purtroppo l'errore Undefined Offset nell'ultima pagina..

    Nell'ultima pagina troviamo le lettere rimamenti che non riescono ad occupare una pagina intera (formata da 4 lettera), infatti nell'ultima pagina abbiamo solo le lettere "Y" e "Z".
    Ho notato che il contatore $n sebbene le lettere finiscano con la "Z" che ha il numero 26, continua con a contare aggiungendo 27 e 28, valori che vengono attribuiti a valori inesistenti..
    Forse è qui l'inghippo.. bisognerebbe dire al contatore di fermarsi, quando il range è stato completato..

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    27
    trovato !

    gli ho semplicemente detto

    if ($n >= $conteggio){ // limite per $n che non deve mai superare il numero totale degli elementi
    break;



    se $n è superiore o uguale al numero degli elementi -> ferma il ciclo for!

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.