Pagina 1 di 1

Impaginare con php

Inviato: 25/06/2011, 18:10
da brividorosanero
Ciao ragazzi. Ho creato da poco un guestbook in php che si appoggia a database MySQL. Per adesso lo sto provando in locale con easyPHP. L'unico problema che mi è rimasto, è di impaginare i vari commenti presi dal database. Vi posto il codice:

Codice: Seleziona tutto

<?php
	function leggi()
	{
	$data_server="localhost";
	$data_user="root";
	$data_pass="";
	$x_pag = 2;     //numero max di righe da visualizzare
	$pag = isset($_GET['page']) && $_GET['page'] > 1 ? (int) $_GET['page'] : 1;
	$connection= mysql_connect("$data_server", "$data_user", "$data_pass") or die(mysql_error());
	mysql_select_db("guestbook", $connection) or die(mysql_error());
	$all_rows = mysql_query("SELECT * FROM firma ORDER BY data DESC", $connection); //numero di righe totale
	$all_pages= ceil($all_rows/$x_pag); //numero di pagine totali
	$first = ($pag - 1) * $x_pag; //calcola da quale riga deve partire a visualizzare
	$rs = mysql_query("SELECT * FROM firma ORDER BY data DESC LIMIT $first, $x_pag"); //prende i primi $x_pag record a partire da $first
	$nr = mysql_num_rows($rs); //numero di record
	if ($nr != 0)
	{
		for($x = 0; $x < $nr; $x++)
		{
			$row = mysql_fetch_row($rs);
			$nominativo = $row[1];
			$messaggio= $row[2];
			$data= $row[3];
			$parti_data = explode(" ", $data);
			$data_comp=$parti_data[0];
			$parti= explode("-", $data_comp);
			$anno= $parti[0];
			$mese= $parti[1];
			$giorno= $parti[2];
			$orario= $parti_data[1];
			echo "<table cellpadding=\"5\" style=\"
				background-color: #FF99FF;
				border-collapse: collapse;\">";
				echo "
						<tr>
						<td style=\"
						width: 100px;
						border: 1pt solid;\"> 
						<span style=\"
						font-size: 14pt;
						font-weight: bold;\"> $nominativo </span> <br /> <br />
						$giorno-$mese-$anno <br />
						$orario</td>
						<td style=\"
						width: 750px;
						border: 1pt solid;
						text-align: left;\">
						$messaggio </td>
						</tr>";
			echo "</table>";
		}
	}
	else
	{
		echo "Nessun record trovato!";
	}
	if ($all_pages > 1)
	{
		if ($pag > 1)
		{
			echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">";
			echo "Pagina Indietro</a>&nbsp;";
		} 
		if ($all_pages > $pag)
		{
			echo "<a href=\"".$_SERVER['PHP_SELF']."?pag=".($pag+1) ."\">";
			echo "Pagina Avanti</a>";
		} 
	}

	mysql_close($connection);
	}
?>
E' come se $pag rimanesse sempre a 1. Infatti quando clicco su pagina successiva mi fa vedere sempre gli stessi record. Io penso che l'errore sia su:

Codice: Seleziona tutto

$pag = isset($_GET['page']) && $_GET['page'] > 1 ? (int) $_GET['page'] : 1;
Ma non so come correggerlo. Qualcuno mi può dare una mano? Grazie!

Re: Impaginare con php

Inviato: 25/06/2011, 18:32
da Carlo
Il tuo codice non è ben ottimizzato.

Se per caso vuoi estrarre 10 record per pagina, ecco una bozza di codice:

Codice: Seleziona tutto

<?php
$pag = (isset($_GET['page']) && is_numeric($_GET['page'])) ? $_GET['page'] : 1;
$per_pagina = 10;

$sql = "SELECT * FROM firma ORDER BY data DESC LIMIT " . (($per_pagina * $pag) - ($per_pagina - 1)) . "," . $per_pagina;
?>
Con questo codice, se per esempio sei nella pagina 2, estrae 10 record, partendo dall'11° record, se sei nella pagina 3, estrae 10 record a partire dal 21° record, e così via.

Re: Impaginare con php

Inviato: 25/06/2011, 18:44
da brividorosanero
Si Carlo è proprio quello che vorrei fare, adesso provo il codice che mi hai dato e ti faccio sapere. Grazie!

Re: Impaginare con php

Inviato: 25/06/2011, 19:08
da brividorosanero
Ciao Carlo ho provato il tuo codice però non mi compare più il link di "Pagina avanti" sotto la tabella. Anche questa parte di codice secondo me è da ottimizzare:

Codice: Seleziona tutto

if ($all_pages > 1)
   {
      if ($pag > 1)
      {
         echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag - 1) . "\">";
         echo "Pagina Indietro</a>&nbsp;";
      }
      if ($all_pages > $pag)
      {
         echo "<a href=\"".$_SERVER['PHP_SELF']."?pag=".($pag+1) ."\">";
         echo "Pagina Avanti</a>";
      }
   }


Re: Impaginare con php

Inviato: 25/06/2011, 19:13
da brividorosanero
Avevo fatto un errore io, adesso mi visualizza "pagina avanti" però come prima mi visualizza sempre gli stessi record anche quando cambio pagina cliccando su pagina successiva

Re: Impaginare con php

Inviato: 25/06/2011, 21:16
da brividorosanero
Ho risolto, c'era anche un errore in:

Codice: Seleziona tutto

"?pag="
Ho rinominato in

Codice: Seleziona tutto

"?page="
Perchè $_GET ha dentro 'page" e non 'pag' (avevo scritto $_GET['page'])