Saluti al forum.
Ho implementato la paginazione di }gu|do[z] presente nelle "pillole", e vorrei far si che l'utente una volta ottenuti i risultati, possa ordinarli secondo diverse opzioni. Sarebbe ideale che ciò avvenisse cliccando sulle intestazioni dei campi ma mi andrebbe bene anche inserendo un form nella pagina.
Ho provato in mille modi ma non riesco a cavarne niente di buono. (c'è da dire che non sono una maga del php).
Riporto il codice della pagina e della funzione che questa include e...... grazie infinite
codice pag.
Codice PHP:
<?php
//includi la funzione
include ("paging.func.php");
?>
<body>
<table border="1" align="center" width="597" cellpadding="0" cellspacing="0">
<tr class="head_risultati">
<td>marca</td>
<td>mod.</td>
<td>cc.</td>
<td>alimentazione</td>
<td>carrozzeria</td>
<td>colore</td>
<td>anno</td>
<td>km</td>
<td>prezzo € </td>
<td>foto</td>
</tr>
<?php
//setto le variabili provenienti dal form
$provincia = $_GET['provincia'];
$comune = $_GET['comune'];
$marca = $_GET['marca'];
$modello = $_GET['modello'];
$cc = $_GET['cc'];
$alimentazione = $_GET['alimentazione'];
$carrozzeria = $_GET['carrozzeria'];
$colore = $_GET['colore'];
$anno = $_GET['anno'];
//---------------------------inizio var km
$km = $_GET[km];
$km = explode("_",$_GET[km]);
$km[0];
$km[1];
//---------------------------fine var km
$prezzo = $_GET['prezzo'];
//setto le condizioni della query
$condizioni == "";
if ($provincia != "%") $condizioni.= "AND provincia = '$provincia'";
if ($comune != "%") $condizioni.= "AND comune = '$comune'";
if ($marca != "%") $condizioni.= "AND marca = '$marca'";
if ($modello != "%") $condizioni.= "AND modello = '$modello'";
if ($cc != "%") $condizioni.= "AND cc = '$cc'";
if ($alimentazione != "%") $condizioni.= "AND alimentazione = '$alimentazione'";
if ($carrozzeria != "%") $condizioni.= "AND carrozzeria = '$carrozzeria'";
if ($colore != "%") $condizioni.= "AND colore = '$colore'";
if ($anno != "%") $condizioni.= "AND anno = '$anno'";
if ($km != "%") $condizioni.= "AND(km >= ('$km[0]') AND km <= ('$km[1]'))";
if ($prezzo != "%") $condizioni.= "AND prezzo <= '$prezzo'";
//sottomissione della query (come usare mysql_query())
mysql_select_db($database_mioDB, $mioDB) or die .mysql_error();
$res = paging("SELECT * FROM regione WHERE 1 $condizioni ORDER BY marca");
/*
verifica dei risultati: $res è un array.. l'elemento zero contiene
il risultato della query per la pagina corrente... mentre l'elemento 1
che useremo dove ci pare (nell'esempio lo usiamo alla fine) contiene
il codice del minimenu' da dare semplicemente in output
*/
if (!$res[0]) { echo " <tr><td colspan='10' align='center>Nessun risultato</td></tr>";}
else
{
/*sull'elemento zero si opera con un ciclo allo stesso modo
in cui si farebbe con il risultato di mysql_query()
*/
while($dati = mysql_fetch_array($res[0]))
{
//inizio a stampare il layout ed i dati
echo ("<tr>
<td> $dati[marca]</td>
<td>$dati[modello]</td>
<td>etc. etc.</td>
</tr>");
}
}
/*
stampa del minimenu' di link alle altre pagine
(poteva essere stampato anche prima del ciclo)
*/
echo "
Pag.".$res[1];
mysql_close();
?>
</table>
</body>
e questo è il file che include
Codice PHP:
<?php
function paging($query,$x_pag=5,$num_links=5)
{
//conteggio i record presenti
//(ringrazio pero.mac per la compatibilità con mysql 5)
$resource = mysql_query($query);
if(!$resource) { echo 'Si è verificato un errore con la query inserita.
Lerrore restituito è: [i]', mysql_error(),'[/i]'; exit; }
$righe = mysql_num_rows($resource);
if ($righe == 0){ return false; }
//calcolo il numero di pagine necessarie per visualizzare i dati
$numpages = ceil($righe/$x_pag);
//ottengo il numero di pagina, se manca lo imposto ad 1
$pag = isset($_GET['pag'])? $_GET['pag'] : 1;
//imposto il primo estremo del limit
$da = ($pag-1) * $x_pag;
//appendo il limit alla query originaria
$query .= " LIMIT $da,$x_pag";
//gesisco la propagazione della query string
$querystring = '';
foreach($_GET as $k => $v)
{
if ($k != 'pag')
{
$querystring .= "&".$k."=".$v;
}
}
//inizializzo una stringa vuota in cui appenderò l'output del menu'
$menu = '';
//serie di condizionali in cascata per costruire il menu'
if($numpages <= $num_links)
{
for ($pagina = 1; $pagina <= $numpages; $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>";
}
}
//se la pag corrente è tra le prime $num_links/2 --> stampo i primi $nun_links link
else if($pag <= ceil($num_links/2))
{
for ($pagina=1; $pagina<=$num_links; $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>";
}
$menu .= "<a class=\"pag_link\" href=\"?pag={$numpages}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>";
}
//se la pag corrente è tra le ultime $num_links/2 --> stampo gli ultimi $nun_links link
else if($pag > ($numpages-ceil($num_links/2)))
{
$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>";
for ($pagina=$numpages-$num_links+1; $pagina<=$numpages; $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>";
}
}
//Altrimenti la pagina corrente è una dell centrali --> stampo i $nun_links/2 link prima ed $nun_links/2 link dopo
else
{
$menu .= "<a class=\"pag_link\" href=\"?pag=1{$querystring}\" title=\"Vai alla prima pagina\"> << </a>";
for ($pagina = $pag-ceil($num_links/2-1); $pagina <= $pag+ceil($num_links/2-1); $pagina++)
{
if ($pagina == $pag)
$menu .= "<span class=\"pag_selected\"> $pagina </span>& ";
else
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai a pagina $pagina\"> $pagina </a>";
}
$menu .= "<a class=\"pag_link\" href=\"?pag={$pagina}{$querystring}\" title=\"Vai all'ultima pagina\"> >> </a>";
}
//restituisco il risultato della query, e l'output del menu'
return array(mysql_query($query),$menu);
}
?>