Vai al contenuto

suddividere risultati in piu' pagine PHP


imart

Messaggi raccomandati

Ciao ragazzi, ho cercato d'appertutto, ma nonostante ho trovato le soluzioni, non sono riuscito ad adattare la soluzione al mio codice...

ho un catalogo libri, e voglio che vengono mostrati 50 libri per pagina... il mio codice attuale e' il seguente, se potete adattarlo vi do un bacio in bocca :suda:

<div id="mezzo_libri">
<h2>Catalogo libri</h2>
<p>
<?php 
$intro = mysql_query("SELECT * FROM catalogo_libri");
$mostra = mysql_fetch_array($intro);
echo "$mostra[contenuto]";
?><br /><br />
<br />
<?php
$config['rows_for_line'] = '2';
$r_h = mysql_query('SELECT * FROM libri order by titolo');
echo '<table width="100%">';
$r = 1; 
for($c=1;;$c++) {
$row = mysql_fetch_array($r_h);
if($r == 1) echo '<tr>'."\n";
$titolo = str_replace("_"," ",$row['titolo']);
$titolo2 = str_replace("%20","_",$row['titolo']);
$titolo2 = str_replace(" ","_",$row['titolo']);
if ($row['titolo'] == NULL) {
echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://*******immagini/covers/fine.gif" alt="" width="80" height="110" align="left" />'."\n";
echo "<br /><br />Catalogo terminato!"; 
} else {
echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://***********immagini/covers/'.($row['copertina']).'" alt="'.($row['titolo']).'" width="80" height="110" align="left" />'."\n";
echo "$titolo<br />";
if ($row['autore'] != NULL) { echo "<b>autore</b>: $row[autore]<br />"; }
if ($row['editore'] != NULL) { echo "<b>editore</b>: $row[editore]<br />"; }
if ($row['pagine'] != NULL) { echo "<b>pagine</b>: $row[pagine]<br />"; }
if ($row['prezzo'] != NULL) { echo "<b>prezzo</b>: $row[prezzo] euro<br />"; }
echo "<a href=\"dettagli-libro/$titolo2.html\"><div id=\"raquo\">»</div><b><font color=\"red\">visualizza dettagli</font></b></a><br />";
}
if ($row['prezzo'] != 0) {
include('pagine/bottone-carrello.php');
}
if($r == $config['rows_for_line']) {echo '</tr>'."\n";$r = 0;}
$r++;
if ($c >= mysql_num_rows($r_h) && is_int(($c / $config['rows_for_line']))) break; 
}
echo '</table>';
?>
<br />
<?php
echo "<center>Ci sono " .mysql_num_rows($r_h). ' libri nel catalogo';
?>
</p>
</div>

Belli come la vita, neri come la morte.

FOLGORE!!!

Link al commento
Condividi su altri siti

ponendo che chiami la pagina: catalogo.php il codice sarà il seguente:

<div id="mezzo_libri">

<h2>Catalogo libri</h2>

<p>

<?php

//indichi quanti libri far visualizzare

$pag = $_GET['pag'];

$limit = 10;

//se vuoi far visualizzare più libri aumenta i libri qui sotto

$inizio = $_GET['inizio']*$pag;

if($inizio == '') { $inizio = 0; }

$fine = $_GET['fine']*$pag;

if($fine == '') { $fine = $limit - 1; }

$intro = mysql_query("SELECT * FROM catalogo_libri LIMIT $inizio, $fine");

$mostra = mysql_fetch_array($intro);

echo "$mostra[contenuto]";

?><br /><br />

<br />

<?php

$config['rows_for_line'] = '2';

$r_h = mysql_query('SELECT * FROM libri order by titolo');

echo '<table width="100%">';

$r = 1;

for($c=1;;$c++) {

$row = mysql_fetch_array($r_h);

if($r == 1) echo '<tr>'."\n";

$titolo = str_replace("_"," ",$row['titolo']);

$titolo2 = str_replace("%20","_",$row['titolo']);

$titolo2 = str_replace(" ","_",$row['titolo']);

if ($row['titolo'] == NULL) {

echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://*******immagini/covers/fine.gif" alt="" width="80" height="110" align="left" />'."\n";

echo "<br /><br />Catalogo terminato!";

} else {

echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://***********immagini/covers/'.($row['copertina']).'" alt="'.($row['titolo']).'" width="80" height="110" align="left" />'."\n";

echo "$titolo<br />";

if ($row['autore'] != NULL) { echo "<b>autore</b>: $row[autore]<br />"; }

if ($row['editore'] != NULL) { echo "<b>editore</b>: $row[editore]<br />"; }

if ($row['pagine'] != NULL) { echo "<b>pagine</b>: $row[pagine]<br />"; }

if ($row['prezzo'] != NULL) { echo "<b>prezzo</b>: $row[prezzo] euro<br />"; }

echo "<a href=\"dettagli-libro/$titolo2.html\"><div id=\"raquo\">»</div><b><font color=\"red\">visualizza dettagli</font></b></a><br />";

}

if ($row['prezzo'] != 0) {

include('pagine/bottone-carrello.php');

}

if($r == $config['rows_for_line']) {echo '</tr>'."\n";$r = 0;}

$r++;

if ($c >= mysql_num_rows($r_h) && is_int(($c / $config['rows_for_line']))) break;

}

echo '</table>';

?>

<br />

<?php

echo "<center>Ci sono " .mysql_num_rows($r_h). ' libri nel catalogo';

?>

<?

$count = mysql_query("SELECT * FROM catalogo_libri");

$num = mysql_num_rows($count);

$nu_pag = $num/$limit;

$num_pag = floor($num/$limit);

if($num_pag < $nu_pag) { $num_pag = $num_pag + 1; }

for($num_pag!=0; $num_pag<=$num_pag; $num_pag++) { echo "<a href=\"catalogo.php?pag=$num_pag\">".$num_pag."</a>"; }

?>

</p>

</div>

dovrebbe andare ^^

Link al commento
Condividi su altri siti

mi parte un ciclo infinito che mi mostra numeri infiniti al posto del numero delle pagine...

l'errore e' sicuramente qui nel ciclo for:

$count = mysql_query("SELECT * FROM catalogo_libri");
$num = mysql_num_rows($count);
$nu_pag = $num/$limit;
$num_pag = floor($num/$limit);
if($num_pag < $nu_pag) { $num_pag = $num_pag + 1; }
for($num_pag!=0; $num_pag<=$num_pag; $num_pag++) { echo "<a href=\"catalogo.php?pag=$num_pag\">".$num_pag."</a>"; } 

Belli come la vita, neri come la morte.

FOLGORE!!!

Link al commento
Condividi su altri siti

utilizzando il codice qui sotto ottengo il risultato dell'immagine...

il risultato e' questo... ovvero, i risultati sono tutti i record presenti nella tabella libri...e in fondo, invece che suddividere i risultati e paginare mi escono numeri infiniti causando la non caricatura del CSS e il flood del browser che si impalla...

schermata20090919a11191.png

Il codice utilizzato (quello di Cicciokr) e' qui sotto:

<div id="mezzo_libri">
<h2>Catalogo libri</h2>
<p>
<?php 
//indichi quanti libri far visualizzare
$pag = $_GET['pag'];
if($pag == '') { $pag = 1; }
$limit = 10;
//se vuoi far visualizzare più libri aumenta i libri qui sotto
$inizio = $_GET['inizio']*$pag;
if($inizio == '') { $inizio = 0; }
$fine = $_GET['fine']*$pag;
if($fine == '') { $fine = $limit - 1; }
$intro = mysql_query("SELECT * FROM catalogo_libri LIMIT $inizio, $fine");
$mostra = mysql_fetch_array($intro);
echo "$mostra[contenuto]";
?><br /><br />
<br />
<?php
$config['rows_for_line'] = '2';
$r_h = mysql_query('SELECT * FROM libri order by titolo');
echo '<table width="100%">';
$r = 1; 
for($c=1;;$c++) {
$row = mysql_fetch_array($r_h);
if($r == 1) echo '<tr>'."\n";
$titolo = str_replace("_"," ",$row['titolo']);
$titolo2 = str_replace("%20","_",$row['titolo']);
$titolo2 = str_replace(" ","_",$row['titolo']);
if ($row['titolo'] == NULL) {
echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://*******immagini/covers/fine.gif" alt="" width="80" height="110" align="left" />'."\n";
echo "<br /><br />Catalogo terminato!"; 
} else {
echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://***********immagini/covers/'.($row['copertina']).'" alt="'.($row['titolo']).'" width="80" height="110" align="left" />'."\n";
echo "$titolo<br />";
if ($row['autore'] != NULL) { echo "<b>autore</b>: $row[autore]<br />"; }
if ($row['editore'] != NULL) { echo "<b>editore</b>: $row[editore]<br />"; }
if ($row['pagine'] != NULL) { echo "<b>pagine</b>: $row[pagine]<br />"; }
if ($row['prezzo'] != NULL) { echo "<b>prezzo</b>: $row[prezzo] euro<br />"; }
echo "<a href=\"dettagli-libro/$titolo2.html\"><div id=\"raquo\">»</div><b><font color=\"red\">visualizza dettagli</font></b></a><br />";
}
if ($row['prezzo'] != 0) {
include('pagine/bottone-carrello.php');
}
if($r == $config['rows_for_line']) {echo '</tr>'."\n";$r = 0;}
$r++;
if ($c >= mysql_num_rows($r_h) && is_int(($c / $config['rows_for_line']))) break; 
}
echo '</table>';
?>
<br />
<?php
echo "<center>Ci sono " .mysql_num_rows($r_h). ' libri nel catalogo';
?>
<? 
$count = mysql_query("SELECT * FROM catalogo_libri");
$num = mysql_num_rows($count);
$nu_pag = $num/$limit;
$num_pag = floor($num/$limit);
if($num_pag < $nu_pag) { $num_pag = $num_pag + 1; }
for($num_pag!=0; $num_pag<=$num_pag; $num_pag++) { echo "<a href=\"catalogo.php?pag=$num_pag\">".$num_pag."</a>"; } 
?>
</p>
</div>

Belli come la vita, neri come la morte.

FOLGORE!!!

Link al commento
Condividi su altri siti

ma scusa

for($num_pag=0; $num_pag==$num_pag; $num_pag++)

è infinito perchè $num_pag==$num_pag è sempre vero...

devi mettere

$PAG_MAX = $elementiTot/$elementiPerPagina;

for($num_pag=0; $num_pag<$PAG_MAX; $num_pag++)

 Macbook White 13" 2,0GHz || iMac 20" 2,4 GHz || iPhone 3G 8Gb

Link al commento
Condividi su altri siti

grazie ad entrambi, con il metodo di Gianluk non da nessun errore, ma se io ho definito di mostrare 2 libri per pagina, me li mostra tutti i 17 presenti...

Tenete presente che i libri vengono selezionati dalla tabella "libri" e non catalogo_libri...

comunque, anche correggendo questo piccolo errore, non seleziona correttamente...

Ecco qui il codice semi-funzionante con l'ultima modifica di Gianluk:

<div id="mezzo_libri">
<h2>Catalogo libri</h2>
<p>
<?php
// LASCIATE PERDERE STA QUERY
$intro = mysql_query("SELECT * FROM catalogo_libri");
$mostra = mysql_fetch_array($intro);
echo "$mostra[contenuto]";
?><br /><br />
<br />
<?php
//indichi quanti libri far visualizzare
$pag = $_GET['pag'];
if($pag == '') { $pag = 1; }
$limit = 2;
//se vuoi far visualizzare più libri aumenta i libri qui sotto
$inizio = $_GET['inizio']*$pag;
if($inizio == '') { $inizio = 0; }
$fine = $_GET['fine']*$pag;
if($fine == '') { $fine = $limit - 1; }
$config['rows_for_line'] = '2';
$r_h = mysql_query('SELECT * FROM libri order by titolo limit $inizio, $fine');
echo '<table width="100%">';
$r = 1; 
for($c=1;;$c++) {
$row = mysql_fetch_array($r_h);
if($r == 1) echo '<tr>'."\n";
$titolo = str_replace("_"," ",$row['titolo']);
$titolo2 = str_replace("%20","_",$row['titolo']);
$titolo2 = str_replace(" ","_",$row['titolo']);
if ($row['titolo'] == NULL) {
echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://*******immagini/covers/fine.gif" alt="" width="80" height="110" align="left" />'."\n";
echo "<br /><br />Catalogo terminato!"; 
} else {
echo '<td style="background-image:url(immagini/catalogo.gif);" width="50%"><img style="margin-right: 10px;" src="http://***********immagini/covers/'.($row['copertina']).'" alt="'.($row['titolo']).'" width="80" height="110" align="left" />'."\n";
echo "$titolo<br />";
if ($row['autore'] != NULL) { echo "<b>autore</b>: $row[autore]<br />"; }
if ($row['editore'] != NULL) { echo "<b>editore</b>: $row[editore]<br />"; }
if ($row['pagine'] != NULL) { echo "<b>pagine</b>: $row[pagine]<br />"; }
if ($row['prezzo'] != NULL) { echo "<b>prezzo</b>: $row[prezzo] euro<br />"; }
echo "<a href=\"dettagli-libro/$titolo2.html\"><div id=\"raquo\">»</div><b><font color=\"red\">visualizza dettagli</font></b></a><br />";
}
if ($row['prezzo'] != 0) {
include('pagine/bottone-carrello.php');
}
if($r == $config['rows_for_line']) {echo '</tr>'."\n";$r = 0;}
$r++;
if ($c >= mysql_num_rows($r_h) && is_int(($c / $config['rows_for_line']))) break; 
}
echo '</table>';
?>
<br />
<?php
echo "<center>Ci sono " .mysql_num_rows($r_h). ' libri nel catalogo';
?>
<? 
$count = mysql_query("SELECT * FROM libri");
$num = mysql_num_rows($count);
$nu_pag = $num/$limit;
$num_pag = floor($num/$limit);
if($num_pag < $nu_pag) { $num_pag = $num_pag + 1; }
$PAG_MAX = $elementiTot/$elementiPerPagina;
for($num_pag=0; $num_pag<$PAG_MAX; $num_pag++)
{ 
echo "<a href=\"catalogo.php?pag=$num_pag\">".$num_pag."</a>"; } 
?>
</p>
</div>

Belli come la vita, neri come la morte.

FOLGORE!!!

Link al commento
Condividi su altri siti

beh questo metodo è solo per mostrare le pagine sotto con i relativi link e dovrebbe funzionare...

se vuoi mostrare i libri dovresti fare un algoritmo del tipo

for($c=1;;$c++) {

diventa

$pagine = $libriTotale/$elementiPerPagina;

$fine = (($libriTotale/$pagine)*$pagina);

$partenza = $fine-$elementiPerPagina;

for($c=$partenza;$c<$arrivo;$c++){

e mostri il libro all'indice $c

 Macbook White 13" 2,0GHz || iMac 20" 2,4 GHz || iPhone 3G 8Gb

Link al commento
Condividi su altri siti

niente ragazzi non mostra niente adesso...

A me il codice che ho fatto io sembra un po' troppo incasinato... da principiante.

L'effetto che vorrei ottenere e' questo e fin'ora funziona perfettamente...:

- Mostra i libri dalla tabella libri

- Mostra 2 libri per riga e vai a capo

- Mostra 20 libri per pagina, e suddividile per il totale dei libri.

L'ultimo punto non sono riuscito, mentre per le news, faq e il resto funziona perfettamente...

Penso ci sia qualcosa nel codice di sbagliato, riguardante qualche pezzo annidato...

Belli come la vita, neri come la morte.

FOLGORE!!!

Link al commento
Condividi su altri siti

imartr io ho riguardato il tuo codice.. ed ho visto che stai facendo un copia incolla.. senza esplicitare variabili o altro.. cioè l'altro utente ti ha scritto $pag_max = $elementiTot/$elementiperpagina;

lui ti ha scritto le variabili che dovevano andarci li.. ma ovviamente nel tuo codice sono altre due le variabili.. e comunque avevo già scritto quel codice.. guardare variabile nu_pag

per il resto stessa cosa.. rivedi le varibaili!!!!

Link al commento
Condividi su altri siti

Io non l'ho testato il mio codice, l'ho scritto "di getto" ma ha una logica che dovrebbe funzionare, quindi controlla le variabili come ha detto Cicciokr, io i nomi li ho messi per farti capire i valori!

 Macbook White 13" 2,0GHz || iMac 20" 2,4 GHz || iPhone 3G 8Gb

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...