Paginazione

  • Creatore Discussione Creatore Discussione navajo75
  • Data di inizio Data di inizio

navajo75

Utente Attivo
16 Mar 2012
103
1
18
Buonasera a tutti,
Ho una pagina che contiene un form, che al suo interno ha solo un menù a tendina. In esso ci sono varie città. Si sceglie la città e poi si preme sul pulsante "Cerca". L'action del form ricarica la stessa pagina. Al ricaricare la pagina, recupero il valore di quanto selezionato dall'utente nel menù a tendina, nella seguente maniera:

PHP:
  $citta = $_POST['citta'];

Il risultato è la stampa a video dei vari record che compongono la tabella del DB, che chiamo sale. Poiche i record stessi sono molti, ho deciso di non farli visualizzare tutti in un'unica pagina, ma di fare una paginazione. A seguire
il codice.

HTML:
<table id="tabella" cellpadding="3" border="1">
  <tr>
    <td class="td_header">Città</td>
    <td class="td_header">Società</td>
    <td class="td_header">Nome sala</td>
    <td class="td_header">Alias BNL</td>
    <td class="td_header">ISDN</td>
    <td class="td_header">IP</td>
    <td class="td_header">Ubicazione</td>
    <td class="td_header">Referente</td>
    <td class="td_header">Modifica</td>
    <td class="td_header">Elimina</td>
  </tr>
PHP:
$count = mysql_query("SELECT COUNT(id) FROM sale WHERE citta = '$citta'");
$res_count = mysql_fetch_row($count);
$tot_records = $res_count[0];
$per_page = 10;
$tot_pages = ceil($tot_records / $per_page);
$current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];  
$primo = ($current_page - 1) * $per_page;
$sql = "SELECT * FROM sale WHERE citta='$citta' ORDER BY id ASC LIMIT $primo, $per_page";
$res = $db->query($sql);
  while ($f = $res->fetch()) {
    echo '<tr>';
      echo '<td class="td_entry">'.$f['citta'].'</td>';
      echo '<td class="td_entry">'.$f['societa'].'</td>';
      echo '<td class="td_entry">'.$f['nome'].'</td>';
      echo '<td class="td_entry">'.$f['gk'].'</td>';
      echo '<td class="td_entry">'.$f['isdn'].'</td>';
      echo '<td class="td_entry">'.$f['ip'].'</td>';
      echo '<td class="td_entry">'.$f['indirizzo'].'</td>';
      echo '<td class="td_entry">'.$f['referente'].'</td>';
      echo '<td class="modifica_sale">
        <a href="">
	  <img src="img/sale_img/modifica.png" border="0" />
	</a>
      </td>';
      echo '<td class="elimina_sale">
	<a href="">
	  <img src="img/sale_img/elimina.png" border="0" />
	</a>
      </td>';
echo '</tr>';
}
include("paginazione.php");
HTML:
</table>
PHP:
echo '
  <div id="paginazione_container">
    <div id="paginazione">'.$paginazione.'</div>
  </div>';

A seguire la pagina paginazione.php

PHP:
$paginazione = "<span id='pagine_totali'>"."Pagine totali:"."</span>"." ";
for($i = 1; $i <= $tot_pages; $i++) {
  if($i == $current_page) {
  $paginazione .= $i . " ";
} else {
  $paginazione .= "<a href=\"?page=$i\" title=\"Vai alla pagina $i\">$i</a> ";
}
}

Escono fuori 5 pagine, ciascuna delle quali contenenti 10 record. Il problema è che nella prima pagina vedo questi 10 record, mentre nelle altre non vedo nulla.
Se clicco sul numero 2 della paginazione, ad esempio, la pagina paginazione.php, passa con il $_GET il seguente link:

127.0.0.1/videoconferenza/salesa.php?page=2

questa pagina sembra non restituire i 10 record che dovrei vedere, poichè sembrerebbe che la variabile $citta non sia chiaramente più valorizzata.
Mi aiutate a risolvere per favore?

Grazie mille
Saluti a tutti
 
Ciao, potresti passare in get anche la città
Codice:
127.0.0.1/videoconferenza/salesa.php?citta=torino&page=2
e recuperarla in questo modo
PHP:
$citta = $_REQUEST['citta'];
 
Grazie mille caro per il suggerimento.
Ho risolto in altro modo, magari un pò più maccheronico, però funziona.
Vedo la pagina in cui mi trovo

PHP:
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

A seconda di dove sono, faccio quanto a seguire:

HTML:
<table id="tabella" cellpadding="3" border="1">
  <tr>
    <td class="td_header">Città</td>
    <td class="td_header">Società</td>
    <td class="td_header">Nome sala</td>
    <td class="td_header">Alias BNL</td>
    <td class="td_header">ISDN</td>
    <td class="td_header">IP</td>
    <td class="td_header">Ubicazione</td>
    <td class="td_header">Referente</td>
    <td class="td_header">Modifica</td>
    <td class="td_header">Elimina</td>
  </tr>
PHP:
// verifico il path della pagina 
if ($url == "http://127.0.0.1/altri/videoconferenza/salesa.php") {
// esecuzione prima query
  $sql = "SELECT COUNT(id) FROM sale WHERE citta = '$citta'";
} else {
   $sql = "SELECT COUNT(id) FROM sale WHERE citta = '$cittaritorno'";
  }
$res = $db->query($sql);
$fbis = $res->fetchbis();
// numero totale di records
$tot_records = $fbis[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 = (!$_GET['page']) ? 1 : (int)$_GET['page'];
// primo parametro di LIMIT
$primo = ($current_page - 1) * $per_page;
// verifico il path della pagina
if ($url == "http://127.0.0.1/altri/videoconferenza/salesa.php") {	
  // esecuzione seconda query
  $sql = "SELECT * FROM sale WHERE citta='$citta' ORDER BY id ASC LIMIT $primo, $per_page";
} else {
     $sql = "SELECT * FROM sale WHERE citta = '$cittaritorno' ORDER BY id ASC LIMIT $primo, $per_page";
   }
$res = $db->query($sql);
while ($f = $res->fetch()) {
  echo '<tr>';
    echo '<td class="td_entry">'.$f['citta'].'</td>';
    echo '<td class="td_entry">'.$f['societa'].'</td>';
    echo '<td class="td_entry">'.$f['nome'].'</td>';
    echo '<td class="td_entry">'.$f['gk'].'</td>';
    echo '<td class="td_entry">'.$f['isdn'].'</td>';
    echo '<td class="td_entry">'.$f['ip'].'</td>';
    echo '<td class="td_entry">'.$f['indirizzo'].'</td>';
    echo '<td class="td_entry">'.$f['referente'].'</td>';
    echo '<td class="modifica_sale">
              <a href="">
	        <img src="img/sale_img/modifica.png" border="0" />
                </a>
            </td>';
     echo '<td class="elimina_sale">
               <a href="">
                 <img src="img/sale_img/elimina.png" border="0" />
               </a>
             </td>';
     echo '</tr>';
} 
// path 
include("paginazione.php");
HTML:
</table>

$cittaritorno è una variabile di sessione impostata nella paginazione.php Serve a portare dietro la città quando si clicca sulle diverse pagine.

Grazie ugualmente per il tuo aiuto
 

Discussioni simili