paginazione che perde dati provenienti da variabile

ciao a tutti,

alla fine ho optato per questo script che per la paginazione lo trovo ottimo. Unico problema ora e che se gli arriva una variabile da una pagina post la prima paginazione funziona mentre passando alla seconda pagina perde la variabile passata... non riesco in nessun modo a passargli la variabile anche nelle pagine successive.

                                                         
include('connessione.php');

$provincia= $_POST['provincia'];

// how many rows to show per page
$rowsPerPage = 5;

// by default we show first page
$pageNum = 1;
                     
// if $_GET['page'] defined, use it as page number
if(isset($_GET['page'])){
$pageNum = $_GET['page'];
}
                     
// counting the offset
$offset = ($pageNum - 1) * $rowsPerPage;                  
                                          
$query  = "SELECT * FROM immobili WHERE provincia='$provincia' LIMIT $offset, $rowsPerPage";
$result = mysql_query($query) or die('Error, query failed');

//echo "<div id='' class='h9'>Trovati nella ricerca effettuata $numero_record_totali risultati.</div>";

if (!$query) {
echo "Fallimento nell'esecuzione della query ($sql) dal DB: " . mysql_error();
}

if (mysql_numrows(!$query)) {
echo "
   <div id='' class='h8'>
          Nessun immobile trovato nel Database!
   </div>";
}
                     
// print the random numbers
while($row = mysql_fetch_array($result)){
$provincia= utf8_encode($row['provincia']);
         
echo "$provincia";
}
      
// how many rows we have in database
$query  = "SELECT COUNT(*) AS numrows FROM immobili WHERE provincia='$provincia'";
$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// how many pages we have when using paging?
$maxPage = ceil($numrows/$rowsPerPage);
                     
// print the link to access each page
$self = $_SERVER['PHP_SELF'];
$nav = '';
for($page = 1; $page <= $maxPage; $page++){
   if ($page == $pageNum){
   $nav .= " $page ";   // no need to create a link to current page
   }else{
   $nav .= " <a href=\"$self?page=$page\">$page</a> ";
   }      
}
                     
// creating previous and next link
// plus the link to go straight to
// the first and last page
                     
if ($pageNum > 1){
        $page = $pageNum - 1;
   $prev = " <a href=\"$self?page=$page\">[Prev]</a> ";
   $first = " <a href=\"$self?page=1\">[First Page]</a> ";
   }else{
   $prev  = '&nbsp;'; // we're on page one, don't print previous link
   $first = '&nbsp;'; // nor the first page link
   }
                     
if ($pageNum < $maxPage){
   $page = $pageNum + 1;
   $next = " <a href=\"$self?page=$page\">[Next]</a> ";
               
   $last = " <a href=\"$self?page=$maxPage\">[Last Page]</a> ";
   }else{
   $next = '&nbsp;'; // we're on the last page, don't print next link
   $last = '&nbsp;'; // nor the last page link
   }
                     
   // print the navigation link
   echo $first . $prev . $nav . $next . $last;
                  
   // and close the database connection
inviato 9 anni fa
Falco72
X 0 X

Urco.... è lo stessissimo problema che ho io, mi sto scervellando come un matto per capire come passarla alle pagine successive... :tichedoff: Sei riuscito a risolvere per caso?

risposto 7 anni fa
laden1987
X 0 X

@laden

Il messaggio di falco risale al 2007.

Il codice che ti da il problema è identico?

Lo puoi citare qui gentilmente?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Eh lo so che è del 2007, ma tentar non nuoce :)) Allora il codice della pagina è:

<html>

<table border="0">

 <tr>

   <th>Titolo</th>

   <th>Anno</th>

   <th>Durata</th>

   <th>Posizione</th>

   <th>Genere</th>

   <th>Opzioni</th>

 </tr>

<?php

include 'paginazione.php';

$DB_host     = 'host';

$DB_user     = 'user';

$DB_password = 'pw';

$DB_name     = 'film';

$righe_per_pagina = 20;

$url_base = "ricerca3.php";

$pagine_vicine = 5;

// ----------------------------------------------------------------

//         C O N N E S S I O N E   A L   D A T A B A S E

$link = mysql_connect($DB_host, $DB_user, $DB_password);

if (!$link) {

    die ('Non riesco a connettermi: ' . mysql_error());

}

$db_selected = mysql_select_db($DB_name, $link);

if (!$db_selected) {

    die ("Errore nella selezione del database: " . mysql_error());

}

// ----------------------------------------------------------------

//    C A L C O L O   D E L   N U M E R O   D I   P A G I N E

// ricavo il numero totale di record

$query = "SELECT COUNT(*) FROM film iNNER JOIN generi ON generi.IDGENERE = film.codgenere WHERE generi.Tipologia='{$_POST['genere']}'";

$result = mysql_query($query);

// record complessivi

$tot_righe = mysql_result($result,0);

// totale pagine

$tot_pagine = ceil($tot_righe / $righe_per_pagina);

// ----------------------------------------------------------------

//                 P A G I N A   C O R R E N T E

$pagina_corrente = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;

// se la pagina corrente è minore di 1

if($pagina_corrente < 1)  {

    header('location: ' . $url_base);

    exit();

}

// se la pagina corrente è maggiore dell'ultima pagina

if($pagina_corrente > $tot_pagine) {

    header('location: ' . crea_url($url_base, $tot_pagine));

    exit();

}

// ----------------------------------------------------------------

//            E S T R A Z I O N E   D E I   R E C O R D

// calcolo la prima riga da estrarre con la query

$prima_riga = ($pagina_corrente - 1) * $righe_per_pagina;

$query = "SELECT *

          FROM film iNNER JOIN generi ON generi.IDGENERE = film.codgenere

          WHERE generi.Tipologia='{$_POST['genere']}'

          ORDER BY film.Titolo

          LIMIT $prima_riga, $righe_per_pagina";

$result = mysql_query($query);

if (!$result) {

    die("Errore nella query $query: " . mysql_error());

}

$elenco_comuni = array();

while ($row = mysql_fetch_array ($result)) {

if($i%2==1)$color="#ffffff"; //primo colore

else $color="#cccccc"; //secondo colore

     echo "<tr bgcolor=$color>

             <td>".$row ['Titolo']."</td>

             <td>".$row ['Anno']."</td>

             <td>".$row ['Durata']."</td>

             <td>".$row ['Posizione']."</td>

             <td>".$row ['Tipologia']."</td>

<td><a href=\"modifica.php?id={$row['IDFILM']}\">Modifica</a> -

<a href=\"delete.php?id={$row['IDFILM']}\">Elimina</a> -

<a href=\"prestiti.php?id={$row['IDFILM']}\">Presta</a></td>

</tr>";

$i++;

}

// creazione dei link di paginazione

$link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine);

?>

</table>

<p><?php echo $link_paginazione?></p>

</html>

Con la pagina esterna "paginazione.php" che te la cito:

<?php

function crea_url($url_base, $pagina) {

    if(strpos($url_base,'?') === false) {

        return $url_base . '?pag=' . $pagina;

    } else {

        return $url_base . '&amp;pag=' . $pagina;

    }

}

function crea_link($url_base, $pagina_corrente, $numero_pagina) {

    if($pagina_corrente == $numero_pagina) {

        return "[$numero_pagina]";

    } else {

        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';

    }

}

// funzione che crea i link alle pagine dei risultati

function paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine) {

    $link_paginazione = "Pagine: ";

    // link alla pagina precedente

    if($pagina_corrente != 1) {

        $link_paginazione .= '<a href="' . crea_url($url_base, $pagina_corrente - 1) . '">&laquo;</a> ';

    }

    // mostriamo sempre il link alla prima pagina

    $link_paginazione .= crea_link($url_base, $pagina_corrente, 1);

    // se il prossimo link non è alla seconda pagina aggiungo dei puntini ...

    // oppure la sola pagina mancante

    if($pagina_corrente - $pagine_vicine > 2) {

        if($pagina_corrente - $pagine_vicine == 3) {

            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, 2);

        } else {

            $link_paginazione .= " ... ";

        }

    }

    // creo i link alla pagina corrente ed a quelle ad essa vicine

    for($i = $pagina_corrente - $pagine_vicine; $i <= $pagina_corrente + $pagine_vicine; $i++) {

         // se tra quelle vicine c'è la prima pagina (già riportata)

        if($i < 2) continue;

         // se tra quelle vicine c'è l'ultima pagina (che mostrerò con le prossime istruzioni)

        if($i > $tot_pagine - 1) continue;

        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $i);

    }

    // se il precedente link non era alla penultima pagina aggiungo dei puntini ...

    // oppure la sola pagina mancante

    if($pagina_corrente + $pagine_vicine < $tot_pagine - 1) {

        if($pagina_corrente + $pagine_vicine == $tot_pagine - 2) {

            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine - 1) . " ";

        } else {

            $link_paginazione .= " ... ";

        }

    }

    // mostriamo il link all'ultima pagina se questa non coincide con la prima

    if($tot_pagine != 1) {

        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine);

    }

    // link alla pagina successiva

    if($pagina_corrente != $tot_pagine) {

        $link_paginazione .= ' <a href="' . crea_url($url_base, $pagina_corrente + 1) . '">&raquo;</a>';

    }

    return $link_paginazione;

}

?>

risposto 7 anni fa
laden1987
X 0 X

E in più se nn gli mando nulla tramite POST mi da questo errore

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\paginazione\bu\ricerca3.php:12) in C:\xampp\htdocs\paginazione\bu\ricerca3.php on line 61

HELP ME HELP ME  :(

risposto 7 anni fa
laden1987
X 0 X

E in più se nn gli mando nulla tramite POST mi da questo errore

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\paginazione\bu\ricerca3.php:12) in C:\xampp\htdocs\paginazione\bu\ricerca3.php on line 61

HELP ME HELP ME  :(

Ti da questo errore perchè dai il comando header dopo aver già inviato l'header della pagina.

Potresti creare una variabile tipo $html la quale conterrà tutta la tua pagina html, una volta che hai completato l'esecuzione di tutte le tue procedure gli dai un echo (questo fra l'altro velocizza l'esecuzione dello script perchè non devi tanti echo ma ne basta uno solo) non so se mi spiego.

Per l'altro problema sto studiando il tuo codice...e non riesco ancora ad entrare nella sua logica scusami ;-)

Esattamente che problema è che si presenta?

Metti che hai 100 record, tu ne visualizzi 10 per pagina, per cui 10 pagine, hai il navigatore da 1 a 10 per queste pagine giusto?Se clicchi su 1 o su 2 o su 7 non viene cambiato l'elenco dei record per pagina? Ho capito bene?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Dunque, intanto ti ringrazio molto per l'aiuto che mi stai dando :)

Per quanto riguarda il secondo punto, una volta ricevuto il parametro tramite POST mi visualizza i link sotto 1 2 3.... 10, pero' mi visualizza solo a prima pagina, quindi solo 10 record, le altre sono vuote!!!  :tichedoff:

Cmq per la storia dell'header nn ho capito, se ti va e sopratutto hai tempo, potresti ripostarmi il codice con eventuali tue correzioni in grassetto così magari ci capisco qualcosa?

risposto 7 anni fa
laden1987
X 0 X

Per il primo problema fa una cosa del genere:

<?php

$html = ' <html> <table border="0">  <tr>    <th>Titolo</th>    <th>Anno</th>    <th>Durata</th>    <th>Posizione</th>    <th>Genere</th>    <th>Opzioni</th>  </tr> ';

include 'paginazione.php';

$DB_host     = 'host';

$DB_user     = 'user';

$DB_password = 'pw';

$DB_name     = 'film';

$righe_per_pagina = 20;

$url_base = "ricerca3.php";

$pagine_vicine = 5;

// ----------------------------------------------------------------

//         C O N N E S S I O N E   A L   D A T A B A S E

$link = mysql_connect($DB_host, $DB_user, $DB_password);

if (!$link) {

    die ('Non riesco a connettermi: ' . mysql_error());

}

$db_selected = mysql_select_db($DB_name, $link);

if (!$db_selected) {

    die ("Errore nella selezione del database: " . mysql_error());

}

// ----------------------------------------------------------------

//    C A L C O L O   D E L   N U M E R O   D I   P A G I N E

// ricavo il numero totale di record

$query = "SELECT COUNT(*) FROM film iNNER JOIN generi ON generi.IDGENERE = film.codgenere WHERE generi.Tipologia='{$_POST['genere']}'";

$result = mysql_query($query);

// record complessivi

$tot_righe = mysql_result($result,0);

// totale pagine

$tot_pagine = ceil($tot_righe / $righe_per_pagina);

// ----------------------------------------------------------------

//                 P A G I N A   C O R R E N T E

$pagina_corrente = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;

// se la pagina corrente è minore di 1

if($pagina_corrente < 1)  {

    header('location: ' . $url_base);

    exit();

}

// se la pagina corrente è maggiore dell'ultima pagina

if($pagina_corrente > $tot_pagine) {

    header('location: ' . crea_url($url_base, $tot_pagine));

    exit();

}

// ----------------------------------------------------------------

//            E S T R A Z I O N E   D E I   R E C O R D

// calcolo la prima riga da estrarre con la query

$prima_riga = ($pagina_corrente - 1) * $righe_per_pagina;

$query = "SELECT *

          FROM film iNNER JOIN generi ON generi.IDGENERE = film.codgenere

          WHERE generi.Tipologia='{$_POST['genere']}'

          ORDER BY film.Titolo

          LIMIT $prima_riga, $righe_per_pagina";

$result = mysql_query($query);

if (!$result) {

    die("Errore nella query $query: " . mysql_error());

}

$elenco_comuni = array();

while ($row = mysql_fetch_array ($result)) {

if($i%2==1)$color="#ffffff"; //primo colore

else $color="#cccccc"; //secondo colore

     $html .= "<tr bgcolor=$color>

             <td>".$row ['Titolo']."</td>

             <td>".$row ['Anno']."</td>

             <td>".$row ['Durata']."</td>

             <td>".$row ['Posizione']."</td>

             <td>".$row ['Tipologia']."</td>

<td><a href=\"modifica.php?id={$row['IDFILM']}\">Modifica</a> -

<a href=\"delete.php?id={$row['IDFILM']}\">Elimina</a> -

<a href=\"prestiti.php?id={$row['IDFILM']}\">Presta</a></td>

</tr>";

$i++;

}

// creazione dei link di paginazione

$link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine);

$html .= "</table>\n<p>".$link_paginazione."\n</p>\n</html>"; echo $html;

?>

Così il tuo problema (1) dovrebbe risolversi.

Per il secondo: i link per la navigazione vengono creati correttamente?

Tu passi i link per la navigazione tramite l'array get (non post), i link vengono creati correttamente tipo:

nome_pagina.php?pag=1

(al posto di 1 ci può essere 2, 3 ecc).

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Ma si, il punto è che lui calcola i record e in base a quello crea i link per le altre pagine giuste giuste, solo che solo la prima la visualizza le altre no... nn capisco proprio... Cmq in risposta alla tua domanda si, fa visualizzare pag=1 ecc ecc  :)

risposto 7 anni fa
laden1987
X 0 X

Ok, allora se ho capito bene(scusami se insisto ma sono un po' cotto) che sia pag=1 pag=2 pag=7 vengono sempre visualizzati gli stessi record della prima pagina giusto?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

nono, scusa forse mi sono spiegato male io, dunque, la prima pagina pag=1 visualizza i 10 record ok? e fin li tutto ok, quando pero vado avanti con le pagine pag=2 ... 3... in queste nn mostra proprio nulla, anzi firefox e mi dice:

Questa pagina non reindirizza in modo corretto Firefox ha rilevato che il server sta reindirizzando la richiesta per questa pagina in modo che non possa mai essere completata.     *   Questo problema spesso è causato dal blocco o dal rifiuto dei cookie.

risposto 7 anni fa
laden1987
X 0 X

cmq nn ci sono problemi di cookie, ho controllato, ci dev'essere qualche errore nel codice, perchè lo stesso codice messo pero' senza passaggio di parametri da un form, funziona bene, cioè, è come se nelle pagine successive nn riesce a mandarli il parametro, solo nella prima funziona bene... nn so se mi sono spiegato bene

risposto 7 anni fa
laden1987
X 0 X

No...

Cioè dal punto di vista teorico il codice che hai dato mi sembra tutto corretto...

Hai eliminato qualcosa o il codice della pagina è proprio quello?

Ah forse ho capito...Allora noi con il link vari per avere pag=1 pag=2 non passiamo niente tramite l'array Post di conseguenza il php da dove recupera questo valore $_POST['genere'] ???

P.S. puoi gentilmente evitare di scrivere con abbreviazioni da sms? A me danno un po' fastidio e faccio pure fatica a leggere i messaggi(non per niente ho appena rotto il display del telefonino e vivo bene comunque :) )

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Oh scusa :)

Cmq il parametro POST lo prende da un form in un altra pagina!

risposto 7 anni fa
laden1987
X 0 X
Cmq il parametro POST lo prende da un form in un altra pagina!

Esatto ma se noi diamo un link ad una pagina del tipo nome_pagina.php?pag=4 sto parametro post da dove arriva? Da nessuna parte?

Invece di usare un mix di array post e get mi sembrerebbe più logico usarne uno solo dei due magari solo il get?

Tipo: nome_pagina.php?pag=1&genere=alimentari

Potrebbe funzionare bene lo stesso?

Se vuoi usare solo il posto il problema l'hai già risolto:

lo stesso codice messo pero' senza passaggio di parametri da un form, funziona bene, cioè, è come se nelle pagine successive nn riesce a mandarli il parametro, solo nella prima funziona bene... nn so se mi sono spiegato bene

Insomma la risposta già l'avevi data te :-) il passaggio del post avviene solo nella prima pagina :) nelle altre non c'è perchè non viene inviato niente tramite un form o tramite un parametro post ma solo "pag" tramite get.

Non so se mi sono spiegato  :o

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Ti sei spiegato benissimo, e ci siamo capiti benissimo :) Pero' il punto è che nn so come ovviare a sta cosa, dici che risolverei usando GET al posto di POST come passaggio parametri da form?

risposto 7 anni fa
laden1987
X 0 X

Eh si o uno o l'altro...nel senso che se tu richiami una nuova pagina con il link, non invii nessun parametro.

L'array get è parte integrante dell'url che il browser chiede al server giusto?

Con l'array post il browser invia dei dati veri e propri, puoi inviarli anche come array get e allora se è come array get puoi usarlo come link, l'array post non può essere usato come un link.

Non so se mi spiego... :(  :buck:

Insomma se a te per visualizzare sti benedetti record ti servono solo 2 parametri: "genere" e "pag", a parer mio risolvi tutto semplicemente inviando la variabile genere tramite l'array get e non post(che non può essere passato tramite un semplice link ma necessita di un invio dei dati con un tasto apposito).

Potresti avviare delle sessioni php od usare dei cookie se invece vuoi mantenere a parte il parametro generi, così però si complica ancora di più la faccenda...

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

Uhm si effettivamente non fa una piega, bon dai provero' domani che adesso devo scappare, ti ringrazio molto, e comunque ti terro' aggiornato sugli sviluppi!  Grazie mille ancora in anticipo :)

risposto 7 anni fa
laden1987
X 0 X

 :bye: :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Uffaaaaaaaaaaaaaaaaaaaaaaaaa, ho provato a passare i parametri tramite GET, ma il risultato è sempre quello, nel primo url viene ricerca3.php?genere=Animazione e nei successivi solo ricerca3.php?pag=2  :tichedoff:

risposto 7 anni fa
laden1987
modificato 7 anni fa
X 0 X

Puoi citare il codice per la creazione della navigazione così controlliamo?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Dunque il codice adesso è:

<?php

$html = '

<html>

<table border="0">

 <tr>

   <th>Titolo</th>

   <th>Anno</th>

   <th>Durata</th>

   <th>Posizione</th>

   <th>Genere</th>

   <th>Opzioni</th>

 </tr>

';

include 'paginazione.php';

$DB_host     = 'host';

$DB_user     = 'user';

$DB_password = 'pw';

$DB_name     = 'dbname';

$righe_per_pagina = 20;

$url_base = "ricerca3.php";

$pagine_vicine = 5;

// ----------------------------------------------------------------

//         C O N N E S S I O N E   A L   D A T A B A S E

$link = mysql_connect($DB_host, $DB_user, $DB_password);

if (!$link) {

    die ('Non riesco a connettermi: ' . mysql_error());

}

$db_selected = mysql_select_db($DB_name, $link);

if (!$db_selected) {

    die ("Errore nella selezione del database: " . mysql_error());

}

// ----------------------------------------------------------------

//    C A L C O L O   D E L   N U M E R O   D I   P A G I N E

// ricavo il numero totale di record

$query = "SELECT COUNT(*) FROM film iNNER JOIN generi ON generi.IDGENERE = film.codgenere WHERE generi.Tipologia='{$_GET['genere']}'";

$result = mysql_query($query);

// record complessivi

$tot_righe = mysql_result($result,0);

// totale pagine

$tot_pagine = ceil($tot_righe / $righe_per_pagina);

// ----------------------------------------------------------------

//                 P A G I N A   C O R R E N T E

$pagina_corrente = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;

// se la pagina corrente è minore di 1

if($pagina_corrente < 1)  {

    header('location: ' . $url_base);

    exit();

}

// se la pagina corrente è maggiore dell'ultima pagina

if($pagina_corrente > $tot_pagine) {

    header('location: ' . crea_url($url_base, $tot_pagine));

    exit();

}

// ----------------------------------------------------------------

//            E S T R A Z I O N E   D E I   R E C O R D

// calcolo la prima riga da estrarre con la query

$prima_riga = ($pagina_corrente - 1) * $righe_per_pagina;

$query = "SELECT *

          FROM film iNNER JOIN generi ON generi.IDGENERE = film.codgenere

          WHERE generi.Tipologia='{$_GET['genere']}'

          ORDER BY film.Titolo

          LIMIT $prima_riga, $righe_per_pagina";

$result = mysql_query($query);

if (!$result) {

    die("Errore nella query $query: " . mysql_error());

}

$elenco_comuni = array();

while ($row = mysql_fetch_array ($result)) {

if($i%2==1)$color="#ffffff"; //primo colore

else $color="#cccccc"; //secondo colore

     $html .= "<tr bgcolor=$color>

             <td>".$row ['Titolo']."</td>

             <td>".$row ['Anno']."</td>

             <td>".$row ['Durata']."</td>

             <td>".$row ['Posizione']."</td>

             <td>".$row ['Tipologia']."</td>

<td><a href=\"modifica.php?id={$row['IDFILM']}\">Modifica</a> -

<a href=\"delete.php?id={$row['IDFILM']}\">Elimina</a> -

<a href=\"prestiti.php?id={$row['IDFILM']}\">Presta</a></td>

</tr>";

$i++;

}

// creazione dei link di paginazione

$link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine);

$html .= "</table>\n<p>".$link_paginazione."\n</p>\n</html>";

echo $html;

?>

e il file della paginazione.php è rimasto invariato esattamente come ti avevo postato!

risposto 7 anni fa
laden1987
modificato 7 anni fa
X 0 X
e il file della paginazione.php è rimasto invariato esattamente come ti avevo postato!

Ma è proprio il file paginazione.php che crea il menu di navigazione tra i record, se non modifichi quel file come pretendi che inserisca anche la variabile "generi" nel $_get?  8)

Credo ti basti modificare così questa funzione, prova a vedere se va:

function crea_url($url_base, $pagina, $genere = null) {
    if($genere)
        $genere = "&genere=".$genere;

    if(strpos($url_base,'?') === false) {
        return $url_base . '?pag=' . $pagina.$genere;
    } else {
        return $url_base . '&amp;pag=' . $pagina.$genere;
    }
}
risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

Uhm si, vero, che stupido che son :) cmq adesso il file paginazione, apportando la tua modifica è così:

<?php

function crea_url($url_base, $pagina, $genere = null) {

    if($genere)

        $genere = "&genere=".$genere;

    if(strpos($url_base,'?') === false) {

        return $url_base . '?pag=' . $pagina.$genere;

    } else {

        return $url_base . '&amp;pag=' . $pagina.$genere;

    }

}

function crea_link($url_base, $pagina_corrente, $numero_pagina) {

    if($pagina_corrente == $numero_pagina) {

        return "[$numero_pagina]";

    } else {

        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';

    }

}

// funzione che crea i link alle pagine dei risultati

function paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine) {

    $link_paginazione = "Pagine: ";

    // link alla pagina precedente

    if($pagina_corrente != 1) {

        $link_paginazione .= '<a href="' . crea_url($url_base, $pagina_corrente - 1) . '">&laquo;</a> ';

    }

    // mostriamo sempre il link alla prima pagina

    $link_paginazione .= crea_link($url_base, $pagina_corrente, 1);

    // se il prossimo link non è alla seconda pagina aggiungo dei puntini ...

    // oppure la sola pagina mancante

    if($pagina_corrente - $pagine_vicine > 2) {

        if($pagina_corrente - $pagine_vicine == 3) {

            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, 2);

        } else {

            $link_paginazione .= " ... ";

        }

    }

    // creo i link alla pagina corrente ed a quelle ad essa vicine

    for($i = $pagina_corrente - $pagine_vicine; $i <= $pagina_corrente + $pagine_vicine; $i++) {

         // se tra quelle vicine c'è la prima pagina (già riportata)

        if($i < 2) continue;

         // se tra quelle vicine c'è l'ultima pagina (che mostrerò con le prossime istruzioni)

        if($i > $tot_pagine - 1) continue;

        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $i);

    }

    // se il precedente link non era alla penultima pagina aggiungo dei puntini ...

    // oppure la sola pagina mancante

    if($pagina_corrente + $pagine_vicine < $tot_pagine - 1) {

        if($pagina_corrente + $pagine_vicine == $tot_pagine - 2) {

            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine - 1) . " ";

        } else {

            $link_paginazione .= " ... ";

        }

    }

    // mostriamo il link all'ultima pagina se questa non coincide con la prima

    if($tot_pagine != 1) {

        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine);

    }

    // link alla pagina successiva

    if($pagina_corrente != $tot_pagine) {

        $link_paginazione .= ' <a href="' . crea_url($url_base, $pagina_corrente + 1) . '">&raquo;</a>';

    }

    return $link_paginazione;

}

?>

ma nn funziona comunque :( mi da sempre lo stesso problema, non passa la variabile!

risposto 7 anni fa
laden1987
modificato 7 anni fa
X 0 X
ma nn funziona comunque :( mi da sempre lo stesso problema, non passa la variabile!

Si per forza, usa un momento la testa, non aspettare che ti dica tutto  >:(

TI ho suggerito una modifica alla funzione per creare l'url con un passaggio di variabile che se non viene passato è uguale a null, in questo modo non inficia il funzionamento di tutti i tuoi script.

Ora tutte le volte che richiami la funzione crea_url devi passare tutti i parametri!!

Tipo nella funzione crea_link quel crea_url deve contenere anche la variabile genere se no come fa andare?

Stessa cosa per tutto il resto, se non passi la variabile "genere" la funzione crea_url non crea l'url con la variabile genere.

Sono stato chiaro?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Si hai ragione, nn mi intendo molto di php, sono un novellino :) ma intendi così?

<?php

function crea_url($url_base, $pagina, $genere = null) {

    if($genere)

        $genere = "&genere=".$genere;

    if(strpos($url_base,'?') === false) {

        return $url_base . '?pag=' . $pagina.$genere;

    } else {

        return $url_base . '&amp;pag=' . $pagina.$genere;

    }

}

function crea_link($url_base, $pagina_corrente, $numero_pagina, $genere = null) {

if($genere)

        $genere = "&genere=".$genere;

    if($pagina_corrente == $numero_pagina) {

        return "[$numero_pagina]";

    } else {

        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';

    }

}

// funzione che crea i link alle pagine dei risultati

function paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine, $genere = null) {

if($genere)

        $genere = "&genere=".$genere;

    $link_paginazione = "Pagine: ";

    // link alla pagina precedente

    if($pagina_corrente != 1) {

        $link_paginazione .= '<a href="' . crea_url($url_base, $pagina_corrente - 1) . '">&laquo;</a> ';

    }

    // mostriamo sempre il link alla prima pagina

    $link_paginazione .= crea_link($url_base, $pagina_corrente, 1);

    // se il prossimo link non è alla seconda pagina aggiungo dei puntini ...

    // oppure la sola pagina mancante

    if($pagina_corrente - $pagine_vicine > 2) {

        if($pagina_corrente - $pagine_vicine == 3) {

            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, 2);

        } else {

            $link_paginazione .= " ... ";

        }

    }

    // creo i link alla pagina corrente ed a quelle ad essa vicine

    for($i = $pagina_corrente - $pagine_vicine; $i <= $pagina_corrente + $pagine_vicine; $i++) {

         // se tra quelle vicine c'è la prima pagina (già riportata)

        if($i < 2) continue;

         // se tra quelle vicine c'è l'ultima pagina (che mostrerò con le prossime istruzioni)

        if($i > $tot_pagine - 1) continue;

        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $i);

    }

    // se il precedente link non era alla penultima pagina aggiungo dei puntini ...

    // oppure la sola pagina mancante

    if($pagina_corrente + $pagine_vicine < $tot_pagine - 1) {

        if($pagina_corrente + $pagine_vicine == $tot_pagine - 2) {

            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine - 1) . " ";

        } else {

            $link_paginazione .= " ... ";

        }

    }

    // mostriamo il link all'ultima pagina se questa non coincide con la prima

    if($tot_pagine != 1) {

        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine);

    }

    // link alla pagina successiva

    if($pagina_corrente != $tot_pagine) {

        $link_paginazione .= ' <a href="' . crea_url($url_base, $pagina_corrente + 1) . '">&raquo;</a>';

    }

    return $link_paginazione;

}

?>

risposto 7 anni fa
laden1987
X 0 X

Solo che adesso con tutte le modifiche apportate, non compare nemmeno più pag=2 nell'url, mette solo url base ricerca3.php... nn capisco...

risposto 7 anni fa
laden1987
X 0 X

No non hai capito!!

Ora ti ho consigliato la funzione crea_url con cui devi passare 3 variabili: $url_base, $pagina, $genere.

Tutte le volte che chiami crea_url devi passare queste 3 variabili, tu non l'hai fatto!!!

Tu hai semplice aggiunto una variabile genere a tutte le altre funzioni in modo totalmente non pensato!!

Nella programmazione si deve usare la testa!

Ora per quale ragione in ogni funzione hai aggiunto la variabile genere mettendo un controllo if all'inizio di tutto come ho fatto io per crea_url?

Ragiona e vedi cosa pensa come il php esegue le tue operazioni.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Prova così per il file paginazione.php, (leggi bene come ho modificato il codice e vedi di comprendere le modifiche):

<?php
function crea_url($url_base, $pagina, $genere = null) {
    if($genere)
        $genere = "&genere=".$genere;

    if(strpos($url_base,'?') === false) {
        return $url_base . '?pag=' . $pagina.$genere;
    } else {
        return $url_base . '&amp;pag=' . $pagina.$genere;
    }
}


function crea_link($url_base, $pagina_corrente, $numero_pagina, $genere) {
    if($pagina_corrente == $numero_pagina) {
        return "[$numero_pagina]";
    } else {
        return '<a href="' . crea_url($url_base, $numero_pagina, $genere) . '">' . $numero_pagina . '</a>';
    }
}

// funzione che crea i link alle pagine dei risultati
function paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine, $genere) {
    $link_paginazione = "Pagine: ";
 
    // link alla pagina precedente
    if($pagina_corrente != 1) {
        $link_paginazione .= '<a href="' . crea_url($url_base, $pagina_corrente - 1, $genere) . '">&laquo;</a> ';
    }
 
    // mostriamo sempre il link alla prima pagina
    $link_paginazione .= crea_link($url_base, $pagina_corrente, 1, $genere);
 
    // se il prossimo link non è alla seconda pagina aggiungo dei puntini ...
    // oppure la sola pagina mancante
    if($pagina_corrente - $pagine_vicine > 2) {
        if($pagina_corrente - $pagine_vicine == 3) {
            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, 2, $genere);
        } else {
            $link_paginazione .= " ... ";
        }
    }
 
    // creo i link alla pagina corrente ed a quelle ad essa vicine
    for($i = $pagina_corrente - $pagine_vicine; $i <= $pagina_corrente + $pagine_vicine; $i++) {
         // se tra quelle vicine c'è la prima pagina (già riportata)
        if($i < 2) continue;
     
         // se tra quelle vicine c'è l'ultima pagina (che mostrerò con le prossime istruzioni)
        if($i > $tot_pagine - 1) continue;
     
        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $i, $genere);
    }
 
    // se il precedente link non era alla penultima pagina aggiungo dei puntini ...
    // oppure la sola pagina mancante
    if($pagina_corrente + $pagine_vicine < $tot_pagine - 1) {
        if($pagina_corrente + $pagine_vicine == $tot_pagine - 2) {
            $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine - 1, $genere) . " ";
        } else {
            $link_paginazione .= " ... ";
        }
    }
 
    // mostriamo il link all'ultima pagina se questa non coincide con la prima
    if($tot_pagine != 1) {
        $link_paginazione .= " " . crea_link($url_base, $pagina_corrente, $tot_pagine, $genere);
    }
 
    // link alla pagina successiva
    if($pagina_corrente != $tot_pagine) {
        $link_paginazione .= ' <a href="' . crea_url($url_base, $pagina_corrente + 1, $genere) . '">&raquo;</a>';
    }
 
    return $link_paginazione;
}
?>

Poi nella pagina principale dove richiami la funzione di paginazione:

// creazione dei link di paginazione

$link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine);

La devi modificare per passargli il parametro $genere:

// creazione dei link di paginazione
if(isset($_GET['genere']))
   $genere = $_GET['genere'];
$link_paginazione = paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine, $genere);

Spero ora sia tutto più chiaro.

Prova a vedere e ricontrolla il codice se ci sono errori ok?  ;)

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Urco, funge tutto adesso, te la cavi molto bene con PHP, complimenti :) Io sto appena imparando, alla fine il mio errore era tralasciare la dikiarazioni delle variabili nella funzione di richiamo... In effetti è un errore non da poco  >:(

Adesso sto cercando un modo per fare una ricerca generalizzata, cioè quando tu cerchi non so ad esempio "Don Camillo", il database ti butta fuori in out tutti i Don Camillo anche quelli che magari hanno vicino il nome "Don Camillo e l'onorevole peppone" per farti un esempio X...

Adesso provo a vedere, intanto qualche consiglio?

risposto 7 anni fa
laden1987
X 0 X

Di aprire una discussione specifica per l'ultima domanda.

Quello che vuoi fare, se ho capito bene, lo puoi fare tranquillamente con una query sql.

P.S. non è che me la cavo con il php è che ho fatto un po' di pratica e per te alle prime armi è facile sbagliare sintassi o logica di funzionamento di un programma.

 :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Già, grazie mille :)

risposto 7 anni fa
laden1987
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda