• User Attivo

    esatto, basta usare il primo valore di limit come variabile

    per ragioni di sicurezza userei anche un intval per prendere i dati dalla get
    😎


  • User Attivo

    Ho copiato un codice php riguardante la paginazione il cui link era postato proprio da riky78. Si tratta di una spiegazione su 2 metodi per raggiungere l'obiettivo prefissato.

    In realtà è inutile e anche poco sicuro creare tutti file differenti dove in oguno di essi c'è una query differente, basta averne solo una di pagina (quindi di file) all'interno della quale c'è impostato un comando MySQL con un valore variabile:

    
    <?php
    $count = mysql_query&#40;"SELECT COUNT&#40;*&#41; FROM utenti"&#41;;
    $res_count = mysql_fetch_row&#40;$count&#41;;
    $tot_records = $res_count&#91;0&#93;;
    $per_page = 10;
    $tot_pages = ceil&#40;$tot_records / $per_page&#41;;
    $current_page = &#40;!$_GET&#91;'page'&#93;&#41; ? 1 : &#40;int&#41;$_GET&#91;'page'&#93;;
    $primo = &#40;$current_page - 1&#41; * $per_page;
    $query_limit = mysql_query&#40;"select user_name,citta from utenti LIMIT $primo, $per_page"&#41;;
    print&#40;"<div align=\"center\"><table border=\"0\" cellpadding=\"2\" cellspacing=\"2\" width=\"420\">\n"&#41;;
    print&#40;"<tr><td height=\"30\"  bgcolor=\"#FFFFC8\"><font size=\"1\">**User-name**</font></td>
    		<td height=\"30\"  bgcolor=\"#FFFFC8\"><font size=\"1\">**località**</font></td></tr>\n"&#41;;
    
    while&#40;$results = mysql_fetch_array&#40;$query_limit&#41;&#41;
    &#123;
    print&#40;"<tr>\n"&#41;;
    print&#40;"<td height=\"30\"  bgcolor=\"#B9DCDC\"><font size=\"1\">$results&#91;user_name&#93;</font></td>
    		<td height=\"30\"  bgcolor=\"#B9DCDC\"><font size=\"1\">$results&#91;citta&#93;</font></td>\n"&#41;;
    include&#40;"pag.php"&#41;;
    print&#40;" </tr>\n </table><tr><td height=\"50\" align=\"center\">$pag</td></tr></table><td height=\"50\" valign=\"bottom\" align=\"center\"></td>\n"&#41;;
    
    print&#40;" </tr>\n</table>\n</div>\n"&#41;;
    ?>
    
    

    E perfettamente funzionante.
    Puoi verificare tu stesso la correttezza del codice [url=http://www.linus2004.it/new.php]guardando questa pagina
    Prevede che vi sia una tabella MySQL chiamata utenti con 2 campi uno chiamato user_name l'altro citta poi prevede che nella stessa cartella dove salvate il suddetto codice ci sia un file chiamato pag.php all'interno del quale le seguenti righe

    
    <?php
     $pag = "Risultati " . $tot_pages . "
    &#91;";
     for&#40;$i = 1; $i <= $tot_pages; $i++&#41; &#123;
     if&#40;$i == $current_page&#41; &#123;
     $pag .= $i . " ";
     &#125; else &#123;
     $pag .= "<a href=\"?page=$i\" title=\"Vai alla pagina $i\">$i</a> ";
     &#125;
     &#125;
     $pag .= "&#93;";
    ?> 
    
    

    GRAZIE :ciauz:


  • User Attivo

    Il suddetto codice funziona, e funziona anche bene. Però ho un problema.
    Ho modificato la query aggiungendo

    order by $_POST[view_method]

    Nel mio caso $_POST[view_method] è semplicemente una variabile che vado a prelevare da un menù a tendina tanto per intenderci; in effetti è per scegliere il criterio di visualizzazione degli utenti. Cioè possiamo scegliere di visualizzare gli utenti in base al nome o alla città oppure in base alla data di registrazione e così via. Ma il risultato non è quello previsto perchè la query viene eseguita soltanto alla prima richiesta, nelle pagine successive la variabile

    $_POST[view_method] acquisisce un valore NULL anzichè il valore selezionato (scelto) nel menù a tendina. E per questo motivo la query non viene eseguita.

    Capisco che il tutto è un pò contorto e che probabilmente non riesco ad essere chiaro quindi chiedo se qualcuno potrebbe essere così gentile da vedere la pagina in questione cliccando sul link inserito alla fine di questo post soltanto per farsi un'idea dell'errore.

    [url=http://www.linus2004.it/ushl/link_pubblici/indb_1/informazioni_utenti.php]La pagina che conteneva l'errore è qui


  • User Attivo

    certo,
    quando passi alle pagine successive (con un link) l'unico parametro che passi è PAGE qundi perdi i parametri post della pagina prima (cioè il view_method)

    Ti conviene accodare ai link alle pagine tutti parametri che ti servono (per semplificare ti converrebbe usare sempre il GET anche dal form inziale)


  • User Attivo

    Non ci riesco proprio.
    Forse dovrei cambiare strategia, ritorno al concetto iniziale:
    cioe quello di creare uno script che crei realmente le pagine e passare tutte le variabili che mi servono con la funzione globale session_start().
    Però il dubbio è che i files creati sul server dovrebbero essere impostati a chmod 755 per lo meno; se così non fosse quando si andrebbe a cliccare sul link NEXT oppure PREV verrebbe visualizzato il classico errore INTERNAL SERVER ERROR 500.

    Che ne dite provo a fare così o è inutile?


  • Super User

    no!!!

    fai le cose fatte per bene.

    anche a me è capitato di far generare ad uno script centinaia di pagine per risolver eun problema. poi ho trovato la soluzione ed ho dovuto perdere parecchio tempo a cancellare gli strafalcioni (rrighe e righe di strafacioni) e sostituirle con la piccola manciata di codice che costituiva la soluzione.

    se non hai estrema fretta prova e segui i consigli che ti danno su questo forum e vedrai che arriverai alla soluzione più elegante e performante. :fumato:


  • User Attivo

    Non ho nessuna fretta, io non faccio questo per professione e semplicemente una cosa che mi piace e basta. Vorrà dire che dovrò meglio vedere come avviene il passaggio delle variabili con il method GET. Forse è lì il problema 😄

    faccio un esempio pagina1.php e pagina_2.php

    
    pagina1.php
    
    $testo="ciao";
    print&#40;"<a href=\"pagina_2.php\"?testo=$testo\">vai alla pagina 2</a>"&#41;;
    
    
    pagina_2.php
    print&#40;"la variabile è:$testo"&#41;;
    
    

    I 2 files ovviamente sono inseriti nei tag PHP.
    Quando clicco sul link (vai alla pagina 2) dovrei visualizzare LA VARIABILE E' CIAO.

    Ma nulla non va.


  • Bannato Super User

    Hai degli apici di troppo:

    
    print&#40;"<a href=\"pagina_2.php\"?testo=$testo\">vai alla pagina 2</a>"&#41;;
    
    

    deve diventare

    
    print&#40;"<a href=\"pagina_2.php?testo=$testo\">vai alla pagina 2</a>"&#41;;
    
    

    Non ho avuto il tempo di controllare ma mi sembra dovrebbe essere giusto quello che ho scritto io.


  • User Attivo

    intanto emmebar ha ragione per gli apici

    inoltre nel file 2 è meglio usare (per ragioni di sicurezza e anche perchè con certe configurazioni di server fatto così non va):

    print("la variabile è:$_GET[testo]");

    invece di

    print("la variabile è:$testo");


  • Super User

    oppure:

    
    isset&#40;$_GET&#91;'var'&#93;&#41;$variabile=$_GET&#91;'var'&#93;:$variabile=0;
    
    if &#40;$variabile!=0&#41;
    &#123;
    print&#40;'[url="pagina.php?var='.$variabile.'"]testo'&#41;;
    &#125;
    
    

    io uso sempre questo sistema. è sicuramente un discorso di abitudine nella programmaizone ma in questo modo vedo il codice più chiaro.

    p.s. la prima riga serve per controllare se la variabile passata via get esiste.


  • User Attivo

    @riky78 said:

    Ti conviene accodare ai link alle pagine tutti parametri che ti servono (per semplificare ti converrebbe usare sempre il GET anche dal form inziale)

    Ecco la risoluzione del problema. Ho semplicemente tolto il method _POST ed inserito _GET e la variabile passa.

    😉


  • Super User

    :arrabbiato: :arrabbiato:

    non avevo capito che erano parametri che venivano inviati da un form altrimenti te l'avrei detto subito.
    cmq l'importante è che hai risolto :vai:


  • User

    Salve a tutti ... in riferimento al codice postato prima ....

    
    <?php
    $count = mysql_query("SELECT COUNT(*) FROM utenti");
    $res_count = mysql_fetch_row($count);
    $tot_records = $res_count[0];
    $per_page = 10;
    $tot_pages = ceil($tot_records / $per_page);
    $current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
    $primo = ($current_page - 1) * $per_page;
    $query_limit = mysql_query("select user_name,citta from utenti LIMIT $primo, $per_page");
    print("<div align=\"center\"><table border=\"0\" cellpadding=\"2\" cellspacing=\"2\" width=\"420\">\n");
    print("<tr><td height=\"30\"  bgcolor=\"#FFFFC8\"><font size=\"1\">**User-name**</font></td>
            <td height=\"30\"  bgcolor=\"#FFFFC8\"><font size=\"1\">**località**</font></td></tr>\n");
     
    while($results = mysql_fetch_array($query_limit))
    {
    print("<tr>\n");
    print("<td height=\"30\"  bgcolor=\"#B9DCDC\"><font size=\"1\">$results[user_name]</font></td>
            <td height=\"30\"  bgcolor=\"#B9DCDC\"><font size=\"1\">$results[citta]</font></td>\n");
    include("pag.php");
    print(" </tr>\n </table><tr><td height=\"50\" align=\"center\">$pag</td></tr></table><td height=\"50\" valign=\"bottom\" align=\"center\"></td>\n");
     
    print(" </tr>\n</table>\n</div>\n");
    ?>
    
    
    
    <?php
     $pag = "Risultati " . $tot_pages . "
    [";
     for($i = 1; $i <= $tot_pages; $i++) {
     if($i == $current_page) {
     $pag .= $i . " ";
     } else {
     $pag .= "<a href=\"?page=$i\" title=\"Vai alla pagina $i\">$i</a> ";
     }
     }
     $pag .= "]";
    ?> 
    
    

    [/quote]

    mi riferisco a

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

    devo sostituire il valore page esattamente con cosa ?

    Questo perchè , (divide i risultati correttamente in varie pagine ) , ma quando andiamo alla pagina seguente o 2 - 3 che dir si voglia non la trova .

    Per capire meglio il problema vi rimando alla pagina in questione : http://www.rivamania.it/modules.php?name=Uomini che in effetti è un modulo 🙂
    Ringrazio anticipatamente per l'aiuto :fumato:


  • Super User

    Il link è errato: http://www.rivamania.it/modules.php?page=2

    non specifica ?name=Uomini (che penso dovrai aggiungere)


  • User

    Si in effetti avevo provato anche a sostituire '?page' con name=Uomini , ma non lo trova ugualmente 😞
    Evidentemente i moduli puntano a qualcosa che mi sfugge o non so ...

    La domande specifiche sono queste (per chi ha provato questo genere di paginazione) :
    La pagina in cui si trova il codice deve ripuntare a se stessa ?
    In un modulo ci sono degli accorgimenti o modifiche da fare ?

    Ringrazio anticipatamente . Chiedo inoltre scusa , ma sono novello :fumato:


  • Super User

  • User

    Infatti .... ma posto per tutti il risulato dovesse servire a qualcuno

    Innanzi tutto le due prime 'page' vanno lasciate intatte in quanto non interessa più di tanto ... lo script verifica in che pagina si trova e decide di portare i risultati nelle pagine successive (sembra vedersela lui)
    Da modificare eventualmente c'è <a href '?page' nella paginazione.php che scegliete.
    Trattandosi di un modulo avendo una restituzione già complessa '?' al posto del secondo '?' sostituite &.
    Comunque ripeto , a me funziona così anche perchè del codice principale ho cambiato molto, ma magari a voi potrebbe non andare :nonono:

    Ps altra constatazione ... nella prima query SELECT COUNT(id) from nome:tabella WHERE ... tendete a specificare un campo e non (*) ci si guadagna un po' e mi dà la senzazione di maggiore correttezza.

    Ringrazio infine Gorka per la gentilezza e l'aiuto :ciaosai: