- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problemi con paginazione record
-
Problemi con paginazione record
Ciao a tutti, ho un problema con la paginazione dei dati, ovvero: ho un form di ricerca con due combo box da dove recuero il valore a e il valore b.
Fin qui nulla di strano, mi fa la ricerca correttamente, la paginazine avviene correttamente e anche il conteggio delle pagine. Il problema è che io recupero i dati in questo modo:$tipo=''; if (isset($_POST['tipo'])){$tipo=$_POST['tipo'];}
$regione=''; if (isset($_POST['l1'])){$regione=$_POST['l1'];}Quindi alla prima ricerca ottengo il risultato corretto, quando clicco sulla paagina 2 dei risultati ottenuti, perdo i valori della ricerca.Mi spiego:
'Tipo' lo lascio vuoto, 'regione' seleziono Lombardia e clicco cerca:Nella pagina di stampa ricevo i valori e stampa correttamente i record con il campo regione== Lombardia.
Nella query ho messo i LIMIT quindi avrò più pagine, andando avanti nella visualizzazione delle pagine successive perdo i valori e mi stampa tutti i record..come posso risolvere questo problema? Grazie in anticipo ciao Simone.
-
Puoi fare con i parametri GET e POST concatenati..
Es.:$tipo=''; if (isset($_POST['tipo'])){$tipo=$_POST['tipo'];} $regione=''; if (isset($_POST['l1'])){$regione=$_POST['l1'];} if($_GET['page'] != 1){ $reg_get = $_GET['reg_get']; $tipo_get = $_GET['tipo_get'];}
Poi, quando ti crei il link con le pagine :
<a href = "mio.php?reg_get=$reg_get ecc...Ola
-
[...]
Grazie per aver risposto. Ho due domande che son un po' in confusione,
$reg_get = $_GET['reg_get'];
$tipo_get = $_GET['tipo_get'];}che valori devo passare dentro $_GET['']? Nel mio caso gli passo ''tipo'' e ''l1'' giusto?
Nel link finale ho : <a href="?page=$i" title="Vai alla pagina $i">$i</a> com lo modifico esattamente?
-
@La prima domanda : SI
La seconda :
<a href = "?page=".$i."®_get=$reg_get&tipo_get=$tipo_get">
-
[...]
Ok allora, il mio codice è questo:$tipo=''; if (isset($_POST['tipo'])){$tipo=$_POST['tipo'];}
$regione=''; if (isset($_POST['l1'])){$regione=$_POST['l1'];}
if($_GET['page'] != 1){
$reg_get = $_GET['l1'];
$tipo_get = $_GET['tipo'];}
..
..
$paginazione .= "<a href="?page=$i&l1=$reg_get&tipo=$tipo_get">$i</a> ";però non mipassa i valori comunque, il link dell apagina è questo quando clicco sulla successiva:
miosito.it/paginazione.php?page=2&l1=&tipo=
cosa può essere?
-
Prova con...
[PHP]if(!empty($_GET['reg_get'])){
$paginazione .= "<a href="?page=$i&l1=$reg_get&tipo=$tipo_get ">$i</a> ";}else{
$paginazione .= "<a href="?page=$i&l1=".$_POST['l1']."&tipo=".$_POST['data']."">$i</a> ";
}[/PHP]
-
Ciao, scusa ma mi sto incasinando, ti copio il codice completo come è ora con i vari commenti:
[PHP]
$tipo=''; if (isset($_POST['tipo'])){$tipo=$_POST['tipo'];}
$regione=''; if (isset($_POST['l1'])){$regione=$_POST['l1'];}$where=' 1=1 ';
if($tipo!=''){$where.=' AND vino_tipo="'.$tipo.'"';}
if($regione!=''){$where.=' AND idregione="'.$regione.'"';}// esecuzione prima query
$count = mysql_query('SELECT COUNT(vino_id) FROM vino INNER JOIN regioni ON vino.vino_idregione=regioni.idregione WHERE '.$where);
$res_count = mysql_fetch_row($count);
// numero totale di records
$tot_records = $res_count[0];
// risultati per pagina(secondo parametro di LIMIT)
$per_page = 10;
// numero totale di pagine
$tot_pages = ceil($tot_records / $per_page);
// pagina corrente
$current_page =(!isset($_GET['page'])) ? $pag = 1 : $pag = $_GET['page'];
if($_GET['page'] != 1){
$tipo = $_POST['tipo'];
$regione = $_POST['l1'];}
// primo parametro di LIMIT
$primo = ($current_page - 1) * $per_page;$query_limit = mysql_query('SELECT *,nomeregione FROM vino INNER JOIN regioni ON vino.vino_idregione=regioni.idregione WHERE '.$where.' ORDER BY vino_nome LIMIT '.$primo.','.$per_page);
while($results = mysql_fetch_array($query_limit)){
$output.=" <tr>\n <td>";
$output.="<a href="scheda_vino.php?id=" . $results['vino_id'] . "">" . $results['vino_nome'] . "</a>
";
$output.="</td>\n </tr>\n";
}// in questa cella inseriamo la paginazione
$paginazione = "Pagine totali: " . $tot_pages . "
[";
for($i = 1; $i <= $tot_pages; $i++) {
if($i == $current_page) {
$paginazione .= $i . " ";
} else {
if(!empty($_GET['reg_get'])){
$paginazione .= "<a href="?page=$i®ione=$regione&tipo=$tipo ">$i</a> ";}else{
$paginazione .= "<a href="?page=$i®ione=".$_POST['l1']."&tipo=".$_POST['tipo']."">$i</a> ";
}
}
}
$paginazione .= "]";$output.=" <tr>\n <td height="50" valign="bottom" align="center">$paginazione</td>\n";
[/PHP]
Dove sbaglio? Non mi passa i parametri.Grazie ancora.
-
[PHP]if(isset($_GET['reg_get'])){
$tipo = $_GET['tipo_get'];
$regione = $_GET['reg_get'];
}else{
$tipo=''; if (isset($_POST['tipo'])){$tipo=$_POST['tipo'];}
$regione=''; if (isset($_POST['l1'])){$regione=$_POST['l1'];}
}
$where=' 1=1 ';
if($tipo!=''){$where.=' AND vino_tipo="'.$tipo.'"';}
if($regione!=''){$where.=' AND idregione="'.$regione.'"';}// esecuzione prima query
$count = mysql_query('SELECT COUNT(vino_id) FROM vino INNER JOIN regioni ON vino.vino_idregione=regioni.idregione WHERE '.$where);
$res_count = mysql_fetch_row($count);
// numero totale di records
$tot_records = $res_count[0];
// risultati per pagina(secondo parametro di LIMIT)
$per_page = 10;
// numero totale di pagine
$tot_pages = ceil($tot_records / $per_page);
// pagina corrente
$current_page =(!isset($_GET['page'])) ? $pag = 1 : $pag = $_GET['page'];
if($_GET['page'] != 1){
$tipo = $_POST['tipo'];
$regione = $_POST['l1'];}
// primo parametro di LIMIT
$primo = ($current_page - 1) * $per_page;$query_limit = mysql_query('SELECT *,nomeregione FROM vino INNER JOIN regioni ON vino.vino_idregione=regioni.idregione WHERE '.$where.' ORDER BY vino_nome LIMIT '.$primo.','.$per_page);
while($results = mysql_fetch_array($query_limit)){
$output.=" <tr>\n <td>";
$output.="<a href="scheda_vino.php?id=" . $results['vino_id'] . "">" . $results['vino_nome'] . "</a>
";
$output.="</td>\n </tr>\n";
}// in questa cella inseriamo la paginazione
$paginazione = "Pagine totali: " . $tot_pages . "
[";
for($i = 1; $i <= $tot_pages; $i++) {
if($i == $current_page) {
$paginazione .= $i . " ";
} else {
if(!empty($_GET['reg_get'])){
$paginazione .= "<a href="?page=$i®ione=$regione&tipo=$tipo ">$i</a> ";}else{
$paginazione .= "<a href="?page=$i®ione=".$regione."&tipo=".$tipo."">$i</a> ";
}
}
}
$paginazione .= "]";$output.=" <tr>\n <td height="50" valign="bottom" align="center">$paginazione</td>\n"; [/PHP]
-
Va a metà, ho cambiato i GET in REQUEST perchè non gli passava il valore...adesso se faccio la ricerca per tipo va tutto ok, se la faccio per regione, al primo cambio di pagina mi tiene il valore della regione, al secondo passaggio non mi passa più l'id della regione...come mai fa così?
-
Cambia questo
[PHP]if(!empty($_GET['reg_get'])){
$paginazione .= "<a href="?page=$i®ione=$regione&tipo=$tipo ">$i</a> ";}else{
$paginazione .= "<a href="?page=$i®ione=".$regione."&tipo=".$tipo."">$i</a> ";
} [/PHP]
Con questo :[PHP]$paginazione .= "<a href="?page=$i®ione=".$regione."&tipo=".$tipo."">$i</a> ";[/PHP]
-
Ho risolto, ho fatto io un errore stupido, la combo box regione del form da cui arrivavano i dati l'avevo chiamata l1, recuperavo 'l1' ma poi nella stringa gli passavo 'regione' e andava in palla funzoinava al primo colpo e al secondo passaggio si incasinava il codice. Comunque adesso funziona grazie, ho semplicemente messo:
[php]
$tipo=''; if (isset($_REQUEST['tipo'])){$tipo=$_REQUEST['tipo'];}
$regione=''; if (isset($_REQUEST['regione'])){$regione=$_REQUEST['regione'];}
//resto del codice....$paginazione .= "<a href="?page=$i®ione=$regione&tipo=$tipo" >$i</a> ";
[/php]Grazie per il prezioso aiuto! ciao Simone
-
Prego, di niente!:)
Sempre a disposizione!:D