- Home
- Categorie
- Coding e Sistemistica
- Coding
- impaginare risultati query in php
-
impaginare risultati query in php
Ho la necessita di impaginare i risultati delle query presenti in questo file, in sostanza vorrei che venissero mostrati una quindicina di record a video e poi ci sia la possibilità di andare alla pagina successiva o precedente.
ho ptovato cosi ma non va' mi mostra tutti i numeri di pagina e basta...
ho provato solo sul primo if...
[php]<h1>Risultati della ricerca</h1><br>
<?php
error_reporting(E_ALL);
include("config.inc.php");
include("connect.inc.php");if($_POST) {
if($_POST['azione'] == "cerca"){$chiave = $_POST['chiave'];
$keys = explode (",", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$query .= "titolo LIKE '%$parola%' OR ingredienti LIKE '%$parola%' OR tipopiatto LIKE '%$parola%' OR ingredienteprincipale LIKE '%$parola%' OR regione LIKE '%$parola%' OR note LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette WHERE " . $query;
$count = mysql_query("SELECT COUNT(*) FROM DBRicette");
$res_count = mysql_fetch_row($count);// numero totale di records
$tot_records = $res_count[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;$query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette LIMIT $primo, $per_page WHERE " . $query;
$result = mysql_query($query, $db);
//echo $query; dopo l'esecuzione di una query ne mostra il risultato a video
while ($row = mysql_fetch_array($result))
{ echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " </a><br>"; }
// includiamo uno dei files contenenti la paginazione
include("paginazione.php");
// in questa cella inseriamo la paginazione
echo " <tr>\n <td height="50" valign="bottom" align="center">$paginazione</td>\n";echo " </tr>\n</table>\n</div>";
}
elseif($_POST['azione'] == "principale"){
$chiave = $_POST['chiave'];
$keys = explode (",", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$query .= " ingredienteprincipale LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT id, titolo, ingredienteprincipale FROM DBRicette WHERE " . $query;
$result = mysql_query($query, $db);
//echo $query; dopo l'esecuzione di una query ne mostra il risultato a video
while ($row = mysql_fetch_array($result))
{ echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " $row[ingredienteprincipale]</a><br>"; }
}
elseif($_POST['azione'] == "portata"){
$chiave = $_POST['chiave'];
$keys = explode (",", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$query .= "tipopiatto LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT id, titolo, tipopiatto FROM DBRicette WHERE " . $query;
$result = mysql_query($query, $db);
//echo $query; dopo l'esecuzione di una query ne mostra il risultato a video
while ($row = mysql_fetch_array($result))
{ echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " $row[tipopiatto]</a><br>"; }}
};
?>[/php]
questo è il file di paginazione
[php]<?php$paginazione = "Pagine totali: " . $tot_pages . "
[";
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> ";
}
}
$paginazione .= "]";?> [/php]
-
Nessun suggrimento?
-
Ho fatto un pò di prove ma ci deve essere per forza qualche errore, se eseguo la query sulla portata selezionando antipasto ottengo 2 come numero di pagine il che sta a significare che ci sono 2 pagine contenenti 15 ( $step=15) ricette ciascuna cosa non possibile perche' ho provato sul db attualmente in linea e ne risultano molte di piu'. Allora mi son detto proviamo ad aumentare il limite nella variabile step a 150000 e vediamo cosa succede; i record vengono estratti tutti e a fondo pagina compare correttamente il numero 1 che indica il numero delle pagine generate dalla query.
Cosa c'e' di sbagliato??ecco lo script come è ora
<h1>Risultati della ricerca</h1><br> <?php error_reporting(E_ALL); include ("config.inc.php"); include ("connect.inc.php"); // imposto il limit per la query If (!isset ($start) OR $start < 0) $start = 0; $step = 15; if ($_POST) { if ($_POST['azione'] == "cerca") { $chiave = $_POST['chiave']; $keys = explode(",", $chiave); $query = ""; reset($keys); while (list(, $parola) = each($keys)) { $parola = trim($parola); if ($parola != "") $query .= "titolo LIKE '%$parola%' OR ingredienti LIKE '%$parola%' OR tipopiatto LIKE '%$parola%' OR ingredienteprincipale LIKE '%$parola%' OR regione LIKE '%$parola%' OR note LIKE '%$parola%' LIMIT $start, $step "; } // $query .= "0"; $query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette WHERE " . $query; $result = mysql_query($query, $db); //echo $query; //dopo l'esecuzione di una query ne mostra il risultato a video while ($row = mysql_fetch_array($result)) { echo "<a href=\"index.php?pag=15&id=$row[id]\">" . " $row[titolo]" . " </a><br>"; } // ricavo il numero totale di record $query1 = "SELECT COUNT(*) FROM DBRicette WHERE " . $query; $result1 = mysql_query($query); // record complessivi $tot_righe = mysql_result($result1,0); // totale pagine $tot_pagine = ceil($tot_righe / $step); echo ($tot_pagine); } elseif ($_POST['azione'] == "principale") { $chiave = $_POST['chiave']; $keys = explode(",", $chiave); $query = ""; reset($keys); while (list(, $parola) = each($keys)) { $parola = trim($parola); if ($parola != "") $query .= " ingredienteprincipale LIKE '%$parola%' LIMIT $start, $step "; } // $query .= "0"; $query = "SELECT id, titolo, ingredienteprincipale FROM DBRicette WHERE " . $query; $result = mysql_query($query, $db); //echo $query; dopo l'esecuzione di una query ne mostra il risultato a video while ($row = mysql_fetch_array($result)) { echo "<a href=\"index.php?pag=15&id=$row[id]\">" . " $row[titolo]" . " $row[ingredienteprincipale]</a><br>"; } // ricavo il numero totale di record $query1 = "SELECT COUNT(*) FROM DBRicette WHERE " . $query; $result1 = mysql_query($query); // record complessivi $tot_righe = mysql_result($result1, 0); // totale pagine $tot_pagine = ceil($tot_righe / $step); echo ($tot_pagine); } elseif ($_POST['azione'] == "portata") { $chiave = $_POST['chiave']; $keys = explode(",", $chiave); $query = ""; reset($keys); while (list(, $parola) = each($keys)) { $parola = trim($parola); if ($parola != "") $query .= "tipopiatto LIKE '%$parola%' LIMIT $start, $step "; } // $query .= "0"; $query = "SELECT id, titolo, tipopiatto FROM DBRicette WHERE " . $query; $result = mysql_query($query, $db); //echo $query; dopo l'esecuzione di una query ne mostra il risultato a video while ($row = mysql_fetch_array($result)) { echo "<a href=\"index.php?pag=15&id=$row[id]\">" . " $row[titolo]" . " $row[tipopiatto]</a><br>"; } // ricavo il numero totale di record $query1 = "SELECT COUNT(*) FROM DBRicette WHERE " . $query; $result1 = mysql_query($query); // record complessivi $tot_righe = mysql_result($result1, 0); // totale pagine $tot_pagine = ceil($tot_righe / $step); echo ($tot_pagine); } } ; ?>
-
Ciao
ho letto il tuo codice è difficile trovare un errore, meglio farlo da capo, ti invio codice che feci per un sito di auto, funziona bene, adattalo al tuo
ciao da danny
[PHP]
$query_2="SELECT COUNT(id_articolo) As num_righe FROM articoli WHERE id_categoria='1'";
$risultato_query_2=mysql_query($query_2)or die("errore nella query;".mysql_error());
$num=mysql_fetch_array($risultato_query_2);$pagine=isset($_GET['pagine']);
if(!isset($_GET['pag']))
{
$pag=1;
}
else
{
$pag=$_GET['pag'];
}
$limit_inf=($pag - 1)*12;
if($num[0]== false)
{
print"
Non ci articoli per questa sezione";
}
else
{
$pagine=ceil($num[0]/12);
}
$query_3="SELECT * FROM articoli WHERE id_categoria='1' ORDER BY id_articolo LIMIT $limit_inf,12";
$risultato_query_3=mysql_query($query_3)or die("errore nella query;".mysql_error());print"<table border='0' cellpadding='0' cellspacing='0'>";
$num=0;
for($a = 0; $a < 4; $a++)
{
print"
<tr>";
for($b = 0; $b < 3; $b++,$num++)
{
$articoli=mysql_fetch_object($risultato_query_3);
if($articoli)
{
print"
<td>
<table border='0' cellpadding='0' cellspacing='0' width='158' height='107' background='immagini/corpo_foto.jpg'>
<tr>
<td height='18' align='center' valign='bottom'>$articoli->nome</td>
</tr>
<tr>
<td align='center' height='80'><a href='index.php?id_articolo=$articoli->id_articolo'><img src='public/articoli/G/$articoli->id_articolo.jpg' border='0' width='110' height='75'></a></td>
</tr>
<tr>
<td> </td>
</tr>
</table>
</td>";
}
}
print"
</tr>";
}
print"</table>";print"
<table border='0' cellpadding='0' cellspacing='0' align='center'>
<tr>";
for($c = 1; $c <= $pagine; $c++)
{
print"<td><a href='index.php?area=auto&pag=$c'>$c</a> </td>";
}
print"<tr>
</table>";
?>[/PHP]
-
Grazie ora ci provo
-
[php]<h1>Risultati della ricerca</h1><br>
<?php
error_reporting(E_ALL);
include ("config.inc.php");
include ("connect.inc.php");
// imposto il limit per la query
If (!isset ($start) OR $start < 0)
$start = 0;
$step = 15;
$pg = (isset($_REQUEST['pagina'])) ? $_REQUEST['pagina'] : 0;
if ($_POST) {
if ($_POST['azione'] == "cerca") {
$chiave = $_POST['chiave'];
$keys = explode(",", $chiave);
$parola = $keys[0];$query = "SELECT id, titolo, ingredienteprincipale, regione FROM DBRicette WHERE titolo LIKE '%$parola%' OR ingredienti LIKE '%$parola%' OR tipopiatto LIKE '%$parola%' OR ingredienteprincipale LIKE '%$parola%' OR regione LIKE '%$parola%' OR note LIKE '%$parola%' LIMIT $start, $step "; $result = mysql_query($query, $db);
//echo $query; //dopo l'esecuzione di una query ne mostra il risultato a video
while ($row = mysql_fetch_array($result)) {
echo "<a href="index.php?pag=15&id=$row[id]">" . " $row[titolo]" . " </a><br>";
}
// ricavo il numero totale di record
$query1 = "SELECT COUNT(*) FROM DBRicette WHERE titolo LIKE '%$parola%' OR ingredienti LIKE '%$parola%' OR tipopiatto LIKE '%$parola%' OR ingredienteprincipale LIKE '%$parola%' OR regione LIKE '%$parola%' OR note LIKE '%$parola%' ";
$result1 = mysql_query($query1);//echo mysql_result($result1, 0); // record complessivi
$tot_righe = mysql_result($result1,0);
// totale pagine
$tot_pagine = ceil($tot_righe / $step);
echo ($tot_pagine);//inizio la visualizzazione
if($pg == 0) { $precedente = ""; } else { $previous_page = ($pg - 1); $precedente = "<a href='index.php?pag=14&pagina=$previous_page' title='Vai alla pagina precedente' class='bottonelinc'>Precedente</a>"; } if($pg == $tot_pagine-1) { $successiva = ""; } else { $next_page = ($pg + 1); $successiva = "<a href='index.php?pag=14&pagina=$next_page' title='Vai alla pagina successiva' class='bottonelinc'>Sucessiva</a>"; } $paginazione = " <table width='30%' border='0' align='center'> <tr> <td align='center'> ".$precedente." </td> <td align='center'> ".$successiva." </td> </tr> </table>"; echo "<CENTER>" . $paginazione . "</CENTER>";
}[/php]ora che lo script è funzionante e che ho tutti i dati che mi occorrono numero di record, numero di pagine ho provato a creare i link pagina successiva e precedente per visualizzare tutti i record.
attualmente effettuando una ricerca vengono visualizzati i primi 15 record poi in basso a dx la scritta successiva, come clicco sul link invece dei successivi 15 record mi viene restituita una pagina bianca, senza errori dal php. Dove sbaglio?
Il link di partenza della pagina delle ricette è Hp://test.mondoricette.com/index.php?pag=1 una volta inserito il termine da ricercare e avviata la ricerca i primi 15 risultati sono visualizzati qui hp://test.mondoricette.com/index.php?pag=14
Quindi io ho creato il link di ricerca cosi$successiva = "<a href='index.php?pag=14&pagina=$next_page' title='Vai alla pagina
successiva' class='bottonelinc'>Sucessiva</a>";