Visualizzazione risultati 1 fino 5 di 5

Discussione: Paginazione risultato query si modifica coi tasti di scorrimento

  1. #1
    trovalibro non è connesso Neofita
    Data registrazione
    01-10-2020
    Messaggi
    4

    Predefinito Paginazione risultato query si modifica coi tasti di scorrimento

    Ciao a tutti,
    dalla pagina Index.html inserisco le variabili riguardanti AUTORE e TITOLO per eseguire una query sul mio database. Con il seguente codice PHP eseguo la query ed il risultato mi viene correttamente filtrato e stampato con il corretto numero di pagine ed il corretto contenuto (ho trovato questo codice già suggerito e collaudato).

    IL PROBLEMA inizia quando utilizzo i link di navigazione "numeri" oppure "avanti" perchè premendoli mi viene ricaricato l' intero database. Esempio se la query iniziale mi stampa 2 pagine, premendo i link ne vengono stampati 25.

    <html>
    <head>

    <title>Sito</title>

    </head>
    <body>
    <SCRIPT LANGUAGE="php">
    //Recupero il numero di pagina corrente.
    $pag = isset($_GET['pag']) ? $_GET['pag'] : 1;


    $autore=$_POST[AUTORE];
    $titolo=$_POST[TITOLO];
    $db=mysql_connect("localhost","root","root");
    if(!$db)
    echo "no connection";

    mysql_select_db("my_trovalibro");
    // Uso mysql_num_rows per contare il totale delle righe presenti all'interno della tabella agenda
    $all_rows = mysql_num_rows(mysql_query("select * from libri where AUTORE like '%".$autore."%' and TITOLO like '%".$titolo."%'"));
    // Creo una variabile dove imposto il numero di record
    // da mostrare in ogni pagina
    $x_pag = 12;
    // Tramite una semplice operazione matematica definisco il numero totale di pagine
    $all_pages = ceil($all_rows / $x_pag);
    // Calcolo da quale record iniziare
    $first = ($pag - 1) * $x_pag;

    $query = "select * from libri where AUTORE like '%".$autore."%' and TITOLO like '%".$titolo."%' LIMIT $first, $x_pag";
    $result = mysql_query($query);
    $num_results = mysql_num_rows($result);

    for ($i=0; $i < $num_results; $i++)
    {
    $row = mysql_fetch_array($result);
    echo "<p font-size: 20pt> ".$row[TITOLO].". . . . . . . . ".$row[AUTORE];
    echo "</p>";
    echo "<br>";
    }

    function crea_url($url_base, $pag, $titolo) {
    if(strpos($url_base,'?') === false) {
    return $url_base . '?pag=' . $pag. '?t=' . $titolo;
    } else {
    return $url_base . '&amp;pag=' . $pag. '?t=' . $titolo;
    }
    }

    if ($all_pages > 1){
    if ($pag > 1){
    echo "<a href="" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "">";
    echo "<img src=frecciaindietro.png style=width:42px; height:43px>";
    echo "</a>";
    }
    // faccio un ciclo di tutte le pagine
    for ($p=1; $p<=$all_pages; $p++) {
    echo "<a href="" . $_SERVER['PHP_SELF'] . "?pag=" . $p . "">";
    echo $p . "</a>&nbsp;";
    }
    if ($all_pages > $pag){
    echo "<a href="" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag + 1) ."">";
    echo "<img src=frecciaavanti.png style=width:42px; height:43px>";
    echo "</a>";
    }
    }


    mysql_close($db);

    </SCRIPT>
    </div>
    <div class="parentback">
    <a href=http://www.trovalibro.altervista.org/ class=button>Torna alla ricerca</a>
    </div>
    </div>
    </body>
    </html>

    potreste aiutarmi?
    grazie

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Stai usando un codice basato su funzionalità e sintassi così obsolete che è un miracolo che funzioni!
    Sia la sintassi <script language="php"></script> che le funzioni mysql_* sono terminate con la versione 5.6 di PHP, il cui supporto è cessato da quasi due anni. Andrebbe adattato a PHP 7 al più presto.

    A parte questo il problema è che i link di navigazione che usi per la paginazione non stanno passando né autore né titolo alle pagine successive. Concretamente la prima pagina mostra i risultati per l'autore e il titolo cercati, appena clicchi su avanti/indietro o i numeri stati effettuando una nuova ricerca su tutti gli autori e tutti i titoli.
    Per risolvere modifica il sistema affinché autore e titolo diventino parametri GET, non POST, e i link per la paginazione li passino assieme all'indice della pagina.

    I suggerimenti che do più spesso:


  3. #3
    trovalibro non è connesso Neofita
    Data registrazione
    01-10-2020
    Messaggi
    4

    Predefinito

    grazie per la tua analisi, per passare autore e titolo dovrei quindi modificare questa tipologia di link:
    echo "<a href="" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "">";

    corretto?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sia quella che la lettura dei parametri, che non saranno più POST:
    Codice PHP:
    $autore = $_GET['AUTORE'];
    $titolo = $_GET['TITOLO'];
    ...
    echo
    "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "&AUTORE=" . $autore ."&TITOLO=" . $titolo . "\">";

    I suggerimenti che do più spesso:


  5. #5
    trovalibro non è connesso Neofita
    Data registrazione
    01-10-2020
    Messaggi
    4

    Predefinito

    Avete risolto. Siete stati molto gentili e competenti, grazie.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •