Paginazione dei dati estratti da un db MySQL

davidec84

Nuovo Utente
19 Nov 2007
9
0
0
Salve, ho seguito il tutorial presente su mrwebmaster su questo link.

Ho notato che qualora volessi creare una queri con condizione variabile es.

Codice:
$condizione = " WHERE autore = "Manzoni ";

$all_rows = mysql_num_rows(mysql_query("SELECT autore FROM LIBRI" . $condizione));

la prima pagina da i risultati sperati, ma appena passo alla seconda la variabile $condizione si svuota, come devo fare per mantenere il valore?

Grazie
 
devi imporre la stessa condizione anche alla query di paginazione:
PHP:
"SELECT autore FROM LIBRI ". $condizione. " LIMIT $first, $x_pag"
 
Re:

SI, fatto. Ma il problema è che la variabile $condizione, appena cambio pagina, si svuota.

$condizione è popalata da valori che provengono dal modulo di ricerca con il metodo post.
 
Allora devi passare il valore tramite sessione, in questo modo lo avrai sempre disponibile.
 
Disperato

Ho provato così, ma senza nessun risultato.

Codice:
<?php
session_name('CERCALIBRI');
session_start();

if ($_SERVER['HTTP_REFERER'] = "http://127.0.0.1/sessione/trova_libri.php"){
$_SESSION['titolo']= $_POST['titolo'];
$_SESSION['editore']= $_POST['editore'];
$_SESSION['autore']= $_POST['autore'];
$_SESSION['soggetto']= $_POST['soggetto'];
$_SESSION['materia']= $_POST['materia'];
$_SESSION['collana']= $_POST['collana'];
}

?>
<HTML>
<HEAD>
<TITLE>Biblioteca Comunale di Trabia</TITLE>

<script type="text/javascript">

  var stile = "top=10, left=10, width=350, height=250, status=no, menubar=no, toolbar=no, scrollbar=yes";
     function Popup(apri) {
        window.open(apri, "", stile);
     }

</script>

</HEAD>
<BODY>
<h1 align="center"><font color="#5d9048">Comune di Trabia - Database Libri</font></h1>
<?php

include 'cnn_bibliodec_loc.php'; //connessione locale

// imposto quanti risultati x pagina
$rowsPerPage = 20;
// impostiamo di default di mostrare x prima la prima pagina
$pageNum = 1;

// se $_GET['page'] è definito, lo si usa come page namber
if(isset($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// conto l' offset
$offset = ($pageNum - 1) * $rowsPerPage; 



$sqlbase = "SELECT DISTINCT LIBRI.disponibile as Disp, 
LIBRI.numingr AS Num_Ingr, LIBRI.titolo AS Titolo, LIBRI.sottotitolo AS Sottotitolo,
 LIBRI.posizione AS N_Collocazione, EDITORI.editore AS Editore, COLLANE.collana AS Collana, 
LIBRI.progrcollana AS Progr_Collana, SEZIONISPECIALI.sezspeciale AS Sezione_Speciale, 
LIBRI.idlibro as Id ";

$from = " FROM       SOGGETTI RIGHT JOIN (  SEZIONISPECIALI RIGHT JOIN ( MATERIE RIGHT JOIN 
((( COLLANE RIGHT JOIN ( EDITORI RIGHT JOIN ( LIBRI LEFT JOIN INTMATERIE  ON LIBRI.idlibro = 
INTMATERIE.idlibro) ON EDITORI.ideditore = LIBRI.ideditore) ON COLLANE.idcollana = LIBRI.idcollana) 
LEFT JOIN (AUTORI RIGHT JOIN  INTAUTORI ON AUTORI.idautore = INTAUTORI.idautore) ON LIBRI.idlibro
 = INTAUTORI.idlibro) LEFT JOIN INTSOGGETTI ON LIBRI.idlibro = INTSOGGETTI.idlibro) ON 
MATERIE.idmateria = INTMATERIE.idmateria) ON SEZIONISPECIALI.idsezspeciale = LIBRI.idsezspeciale) 
ON SOGGETTI.idsoggetto = INTSOGGETTI.idsoggetto ";

//criteri di ricerca

$condizione = " WHERE LIBRI.idlibro > 0 ";

if ($_SESSION['titolo'] ){
$condizione .=" and LIBRI.titolo LIKE '%". $_SESSION['titolo'] ."%' ";
}

if ($_SESSION['editore'] ){
$condizione .=" and EDITORI.editore LIKE '%". $_SESSION['editore'] ."%' ";
}

if ($_SESSION['autore'] ){
$condizione .=" and AUTORI.autore LIKE '%". $_SESSION['autore'] ."%' ";
}

if ($_SESSION['soggetto'] ){
$condizione .=" and SOGGETTI.soggetto LIKE '%". $_SESSION['soggetto'] ."%' ";
}

if ($_SESSION['materia'] ){
$condizione .=" and MATERIE.materia LIKE '%". $_SESSION['materia'] ."%' ";
}

if ($_SESSION['collana'] ){
$condizione .=" and COLLANE.collana LIKE '%". $_SESSION['collana'] ."%' ";
}

$condizione .=" ORDER BY LIBRI.titolo ";

echo $_SESSION;
$lettura_risultati=mysql_query($sqlbase. $from . $condizione .
" LIMIT $offset, $rowsPerPage");

echo $_SESSION['from'] . "<br />";
echo "{$_SESSION['condizione']}" . '<br />';

echo "<table border=3 width=900px align=center>";  
echo "<tr align=\"center\"><td><h3>Disponibile</h3></td><td><h3>Numero Ingresso</h3></td><td><h3>Titolo</h3></td><td><h3>Editore</h3></td><td><h3>Scheda</h3></td></tr>";
$flag=0;
  while($scatola_temporanea=mysql_fetch_array($lettura_risultati)){
  	 	 
	 if ($flag==0){
	 $colore="#5d9048";
	 $testo="ffffff";
	 $flag=1;}
	 else
	 {$colore="#c0c0c0";
	 $testo="000000";
	 $flag=0;}
	 
	 $disponibile=$scatola_temporanea['Disp'];
	 
	 if ($disponibile == "-1")
	 {$disponibile ="Si";}
	 else
	 {$disponibile ="No";}
	 
	 $numingr=$scatola_temporanea['Num_Ingr'];
     $titolo=$scatola_temporanea['Titolo'];
     $editore=$scatola_temporanea['Editore'];
     $idlibro=$scatola_temporanea['Id'];
$link = "scheda_libro.php?idlibro=". $idlibro; 
	 echo "<tr bgcolor=\"$colore\"><td><b><font color=\"$testo\">$disponibile</font></b></td><td><b><font color=\"$testo\">$numingr</font></b></td><td><b><font color=\"$testo\">$titolo</font></b></td><td><b><font color=\"$testo\">$editore</font></b></td><td><a href=\"javascript:Popup('$link')\">Link</a></td></tr>";
} //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
	 echo "</table><br />";

// quanti valori abbiamo nel DB
$query   = "SELECT COUNT(LIBRI.idlibro) AS numrows ". $from . $condizione;
$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// quante pagine sono?
$maxPage = ceil($numrows/$rowsPerPage);
echo "<table align=center border=1 width=900px><tr><td align=center>";
// crea link per accedere ad ogni pagina
$self = $_SERVER['PHP_SELF'];


// Creo i links Previous e Next
// e quelli First page e Last page
 

if ($pageNum > 1)
{
$page  = $pageNum - 1;
   $prev  = " <a href=\"$self?page=$page\">[Precedente]</a> ";
   $first = " <a href=\"$self?page=1\">[Prima Pagina]</a> ";
}
else
{
   $prev  = '&nbsp;'; // se siamo nella 1° pag non mostriamo Prev
   $first = '&nbsp;'; // e neanche il link alla 1° pag
}

if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
   $next = " <a href=\"$self?page=$page\">[Prossima]</a> ";
   $last = " <a href=\"$self?page=$maxPage\">[Ultima Pagina]</a> ";
}
else
{
   $next = '&nbsp;'; // siamo nell' ultima pag, nn mostriamo Next
   $last = '&nbsp;'; // siamo nell' ultima pag, nn mostriamo il link Last 
}

// mostra i links di navigazione
// mostra i links di navigazione
echo $first . $prev .
" Stai guardando la pagina $pageNum di $maxPage pagine " . $next . $last;

echo "</td></tr></table>";


// ... fine!
?>

</BODY>
</HTML>
 
Risolto

Risolto in maniera definitiva, vi riporto l'esempio:

Codice:
<?php
session_start();

if(isset($_REQUEST['titolo']))
{
$_SESSION['Titolo'] = $_REQUEST['titolo'];
}

if (isset($_REQUEST['editore']))
{
$_SESSION['Editore']=$_REQUEST['editore'];
}

if (isset($_REQUEST['autore']))
{
$_SESSION['Autore']=$_REQUEST['autore'];
}

if (isset($_REQUEST['soggetto']))
{
$_SESSION['Soggetto']=$_REQUEST['soggetto'];
}

if (isset($_REQUEST['materia']))
{
$_SESSION['Materia']=$_REQUEST['materia'];
}

if (isset($_REQUEST['collana']))
{
$_SESSION['Collana']=$_REQUEST['collana'];
}
?>

<HTML>
<HEAD>
<TITLE>Biblioteca Comunale di Trabia</TITLE>

<script type="text/javascript">

  var stile = "top=10, left=10, width=350, height=250, status=no, menubar=no, toolbar=no, scrollbar=yes";
     function Popup(apri) {
        window.open(apri, "", stile);
     }

</script>

</HEAD>
<BODY>
<h1 align="center"><font color="#5d9048">Comune di Trabia - Database Libri</font></h1>
<?php

include 'cnn_Sql130692_3.php'; //connessione locale

// imposto quanti risultati x pagina
$rowsPerPage = 20;
// impostiamo di default di mostrare x prima la prima pagina
$pageNum = 1;

// se $_GET['page'] è definito, lo si usa come page namber
if(isset($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// conto l' offset
$offset = ($pageNum - 1) * $rowsPerPage; 



$sqlbase = "SELECT LIBRI.disponibile as Disp, 
LIBRI.numingr AS Num_Ingr, LIBRI.titolo AS Titolo, LIBRI.sottotitolo AS Sottotitolo,
 LIBRI.posizione AS N_Collocazione, EDITORI.editore AS Editore, COLLANE.collana AS Collana, 
LIBRI.progrcollana AS Progr_Collana, SEZIONISPECIALI.sezspeciale AS Sezione_Speciale, 
LIBRI.idlibro as Id ";

$from = " FROM       SOGGETTI RIGHT JOIN (  SEZIONISPECIALI RIGHT JOIN ( MATERIE RIGHT JOIN 
((( COLLANE RIGHT JOIN ( EDITORI RIGHT JOIN ( LIBRI LEFT JOIN INTMATERIE  ON LIBRI.idlibro = 
INTMATERIE.idlibro) ON EDITORI.ideditore = LIBRI.ideditore) ON COLLANE.idcollana = LIBRI.idcollana) 
LEFT JOIN (AUTORI RIGHT JOIN  INTAUTORI ON AUTORI.idautore = INTAUTORI.idautore) ON LIBRI.idlibro
 = INTAUTORI.idlibro) LEFT JOIN INTSOGGETTI ON LIBRI.idlibro = INTSOGGETTI.idlibro) ON 
MATERIE.idmateria = INTMATERIE.idmateria) ON SEZIONISPECIALI.idsezspeciale = LIBRI.idsezspeciale) 
ON SOGGETTI.idsoggetto = INTSOGGETTI.idsoggetto ";

//criteri di ricerca

$condizione = " WHERE LIBRI.idlibro > 0 ";

if ($_SESSION['Titolo'])
{
$condizione .=" and LIBRI.titolo LIKE '%". $_SESSION['Titolo'] ."%' ";
}

if ($_SESSION['Editore'])
{
$condizione .=" and EDITORI.editore LIKE '%". $_SESSION['Editore'] ."%' ";
}

if ($_SESSION['Autore'])
{
$condizione .=" and AUTORI.autore LIKE '%". $_SESSION['Autore'] ."%' ";
}

if ($_SESSION['Soggetto'])
{
$condizione .=" and SOGGETTI.soggetto LIKE '%". $_SESSION['Soggetto'] ."%' ";
}

if ($_SESSION['Materia'])
{
$condizione .=" and MATERIE.materia LIKE '%". $_SESSION['Materia'] ."%' ";
}

if ($_SESSION['Collana'])
{
$condizione .=" and COLLANE.collana LIKE '%". $_SESSION['Collana'] ."%' ";
}

$condizione .=" ORDER BY LIBRI.titolo ";

//echo "Stai cercando con i seguneti criteri: " . $_SESSION['Titolo']." ". $_SESSION['Editore'] . " " .$_SESSION['Autore'] .
//" " . $_SESSION['Soggetto'] . " " . $_SESSION['Materia'] . " " . $_SESSION['Collana'] ."<br /><br />";

$lettura_risultati=mysql_query($sqlbase. $from . $condizione . " LIMIT $offset, $rowsPerPage");

echo "<table border=3 width=900px align=center>";  
echo "<tr align=\"center\"><td><h3>Disponibile</h3></td><td><h3>Numero Ingresso</h3></td><td><h3>Titolo</h3></td><td><h3>Editore</h3></td><td><h3>Scheda</h3></td></tr>";
$flag=0;
  while($scatola_temporanea=mysql_fetch_array($lettura_risultati)){
  	 	 
	 if ($flag==0){
	 $colore="#5d9048";
	 $testo="ffffff";
	 $flag=1;}
	 else
	 {$colore="#c0c0c0";
	 $testo="000000";
	 $flag=0;}
	 
	 $disponibile=$scatola_temporanea['Disp'];
	 
	 if ($disponibile == "-1")
	 {$disponibile ="Si";}
	 else
	 {$disponibile ="No";}
	 
	 $numingr=$scatola_temporanea['Num_Ingr'];
     $titolo=$scatola_temporanea['Titolo'];
     $editore=$scatola_temporanea['Editore'];
     $idlibro=$scatola_temporanea['Id'];
	 
$link = "scheda_libro.php?idlibro=". $idlibro; 

echo "<tr bgcolor=\"$colore\"><td><b><font color=\"$testo\">$disponibile</font></b></td><td><b><font color=\"$testo\">$numingr</font></b></td><td><b><font color=\"$testo\">$titolo</font></b></td><td><b><font color=\"$testo\">$editore</font></b></td><td><a href=\"javascript:Popup('$link')\">Link</a></td></tr>";
} //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
	 echo "</table><br />";

// quanti valori abbiamo nel DB
$query   = "SELECT COUNT(LIBRI.idlibro) AS numrows ". $from . $condizione;
$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// quante pagine sono?
$maxPage = ceil($numrows/$rowsPerPage);
echo "<table align=center border=1 width=900px><tr><td align=center>";
// crea link per accedere ad ogni pagina
$self = $_SERVER['PHP_SELF'];


// Creo i links Previous e Next
// e quelli First page e Last page
 

if ($pageNum > 1)
{
$page  = $pageNum - 1;
   $prev  = " <a href=\"$self?page=$page\">[Precedente]</a> ";
   $first = " <a href=\"$self?page=1\">[Prima Pagina]</a> ";
}
else
{
   $prev  = '&nbsp;'; // se siamo nella 1° pag non mostriamo Prev
   $first = '&nbsp;'; // e neanche il link alla 1° pag
}

if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
   $next = " <a href=\"$self?page=$page\">[Prossima]</a> ";
   $last = " <a href=\"$self?page=$maxPage\">[Ultima Pagina]</a> ";
}
else
{
   $next = '&nbsp;'; // siamo nell' ultima pag, nn mostriamo Next
   $last = '&nbsp;'; // siamo nell' ultima pag, nn mostriamo il link Last 
}

// mostra i links di navigazione
// mostra i links di navigazione
echo $first . $prev .
" Stai guardando la pagina $pageNum di $maxPage pagine " . $next . $last;

echo "</td></tr></table>";


// ... fine!
?>

</BODY>
</HTML>
 

Discussioni simili