• User Attivo

    Problema paginazione

    Ciao a tutti, ho un problema con la paginazione dei risultati di un form....
    Praticamente esegue la query e mi impagina tutti i dati trovati.
    Quando cambio pagina però, riesegue la queri cambiando il LIMIT ma perdo anche alcune chiavi di ricerca quindi sfasa i risultati...
    Come posso sistemare la situazione?


  • Consiglio Direttivo

    Ciao talkoman, credo sia difficile aiutarti se non ci fornisci il pezzo di script interessato o comunque qualche informazione in più.
    Ma proviamo:
    se perdi dei dati significa che forse ti potrebbe essere sfuggito di salvarli per il reinvio o, se questo è stato fatto, allora c'è qualche problema di assegnazione/altro da sistemare.

    E' un po' vaga come risposta, lo so, ma non conoscendo la struttura, come detto, è difficile essere più esaurienti 😉


  • User Attivo

    domani ti posto il codice...grazie!!
    buona notte


  • User

    Adesso non ricordo se php ha una funzione di url rebuild, ma non è complesso farla da te...
    fai così

    $get = $_GET;
    $get['pagina'] = X[metti il numero della pagina successiva o precedente];
    foreach($get as $k=>$v){
      $qs[]="$k=$v";
    }
    $querystring = '?'.implode("&", $qs);
    ```In questo modo hai una bella queristring da "attaccare" al link in html:
    esempio
    

    <a href="prendidati.php<?=$querystring?>">pagina successiva</a>

    Dovrebbe funzionare!
    
    Antonio--

  • User Attivo

    allora questa la query per estrarre i dati:
    [PHP]<?php
    $righePerPag=20;
    $pageNum = 1;
    if(isset($_GET['page']))
    $pageNum = $_GET['page'];
    $offset = ($pageNum - 1) * $righePerPag;
    $sql="SELECT * FROM artisti WHERE eliminato='n'";
    if(isset($_POST['nome']))
    $sql.=" AND nome LIKE '%".$_POST['nome']."%'";
    else
    unset($_POST['nome']);
    $sql.=" ORDER BY cognome,nome LIMIT $offset, $righePerPag";
    [/PHP]

    e questo sotto per la paginazione:
    [PHP]<?php
    $query = "SELECT COUNT(id) AS numrows FROM artisti WHERE eliminato='n'";
    $result = mysql_query($query) or die('Errore, query fallita');
    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    $numrows = $row['numrows'];
    $maxPage = ceil($numrows/$righePerPag);
    $self = $_SERVER['PHP_SELF'];
    $nav = '';
    for($page = 1; $page <= $maxPage; $page++){
    if ($page == $pageNum)
    $nav .= " $page ";
    else
    $nav .= " <a href="$self?page=$page">$page</a> ";
    }
    if ($pageNum > 1){
    $page = $pageNum - 1;
    $prev = " <a href="$self?page=$page"><<</a>";
    $first = " <a href="$self?page=1">Prima</a> ";
    }else{
    $prev = ' '; // se siamo nella 1° pag non mostriamo Prev
    $first = ' '; // e neanche il link alla 1° pag
    }
    if ($pageNum < $maxPage){
    $page = $pageNum + 1;
    $next = " <a href="$self?page=$page">>></a> ";
    $last = " <a href="$self?page=$maxPage">Ultima</a> ";
    }else{
    $next = ' '; // siamo nell' ultima pag, nn mostriamo Next
    $last = ' '; // siamo nell' ultima pag, nn mostriamo il link Last
    }
    // mostra i links di navigazione
    echo $first;
    ?></td>
    <td width=60% align="center">
    <?php
    echo $prev . $nav . $next;
    ?>
    </td>
    <td width=20%>
    <?php
    echo $last;
    ?>[/PHP]