query per paginazione record

megarospo

Utente Attivo
25 Set 2007
147
0
0
Secondo voi, cosa c'è di sbagliato in questa query che serve per realizzare una paginazione di record?

$query = mysql_query("SELECT * FROM tab1 WHERE nome LIKE '%%%s%%' AND formato LIKE '%%%s%%' AND descrizione LIKE '%%%s%%' ORDER BY nome LIMIT ".$inizio.",".$max, $varnome_ricerca,$varformato_ricerca,$vardescrizione_ricerca) or die (mysql_error());


quando inserisco la parte in rosso mi da degli errori.


Grazie per l'aiuto
 
Prova così:

$query = mysql_query("SELECT * FROM tab1 WHERE nome LIKE '%".$varnome_ricerca."%' AND formato LIKE '%".$varformato_ricerca."%' AND descrizione LIKE '%".$vardescrizio ne_ricerca."%' ORDER BY nome LIMIT ".$inizio.",".$max) or die (mysql_error());
 
Ho risolto scrivendo al posto di "mysql_query" "sprintf" , ma poi ho altri problemi. Ora provo anche come mi suggerisci tu. Grazie.
 
i link di paginazione ora funzionano con questo script:

$query = mysql_query("SELECT * FROM tab1 WHERE nome LIKE '%$varnome_ricerca%' AND formato LIKE '%$varformato_ricerca%' AND descrizione LIKE '%$vardescrizione_ricerca%' ORDER BY nome LIMIT ".$inizio.",".$max) or die (mysql_error());


Se scrivo come mi ha suggerito Trogo, ( '%".$varformato_ricerca."%'), non mi funziona.

ora non mi da' nessun urrore ma mi visualizza una pagina bianca con stritto solo :
1 2 3 4 5 6 7 > Ultima pag.
Precedente | Prossima pag.


Mentre dovrebbe farmi vedere una tabella con i dati impaginati.
ciao.
 
Ciao tutti. Ho voluto fare un pò di prove, ma non sono riuscito a far funzionare la paginazione.
Al punto in cui sono la pagina dei risultati mi restituisce una videata con 1 2 3 4 5 6 7 > Ultima pag. | Precedente | Prossima pag. e la tabella sotto con un tot di record indicato nello script.
Ma clicccando su un numero la tabella sottostante non cambia. (sembra proprio che non ci sia collegamento tra la parte di script per la paginazione e lo script per il riempimento della tabella)
Il tutto è composto da 3 file:
Il primo contiene la classe PHP;
Il secondo contiene il form per la ricerca;
Il terzo gli script per la paginazione e per riempire la tabella (inutile sottolineare che il casino è su questo terzo file).
Sono convinto che questi script possono risultare molto utili a tantissimi utenti.
Grazie per l'aiuto!! :book:



File Paginazione

<?php
// definiamo una costante per la pagina corrente
define("SELF", $_SERVER['PHP_SELF']);

// definiamo la classe
class Paging
{
// definiamo la pagina di partenza
function paginaIniziale($max_row)
{
if ((!isset($_GET['p'])) || ($_GET['p'] == "1"))
{
$parti_da = 0;
$_GET['p'] = 1;
}else{
$parti_da = ($_GET['p']-1) * $max_row;
}
return $parti_da;
}

// contiamo le pagine e stabiliamo quanti records devono essere impaginati
function contaPagine($conta, $max_row)
{
$pgg = (($conta % $max_row) == 0) ? $conta / $max_row : floor($conta / $max_row) + 1;
return $pgg;
}

// mostriamo l'elenco delle pagine
function listaPagine($p_corrente, $pgg)
{
$listapgg = "";
if (($p_corrente != 1) && ($p_corrente))
{
$listapgg .= " <a href=\"".SELF."?p=1\">Prima pag.</a> ";
}
if (($p_corrente-1) > 0)
{
$listapgg .= "<a href=\"".SELF."?p=".($p_corrente-1)."\"><</a> ";
}
for ($i=1; $i<=$pgg; $i++)
{
if ($i == $p_corrente)
{
$listapgg .= "<b>".$i."</b>";
}else{
$listapgg .= "<a href=\"".SELF."?p=".$i."\">".$i."</a>";
}
$listapgg .= " ";
}
if (($p_corrente+1) <= $pgg)
{
$listapgg .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">></a> ";
}
if (($p_corrente != $pgg) && ($pgg != 0))
{
$listapgg .= "<a href=\"".SELF."?p=".$pgg."\">Ultima pag.</a> ";
}
$listapgg .= "</td>\n";
return $listapgg;
}

// permettiamo la navigazione per pagine precedenti e successive
function precedenteSuccessiva($p_corrente, $pgg)
{
$impaginazione = "";
if (($p_corrente-1) <= 0)
{
$impaginazione .= "Precedente";
}else{
$impaginazione .= "<a href=\"".SELF."?p=".($p_corrente-1)."\">Pag. precedente</a>";
}
$impaginazione .= " | ";
if (($p_corrente+1) > $pgg)
{
$impaginazione .= "Prossima";
}else{
$impaginazione .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">Prossima pag.</a>";
}
return $impaginazione;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
</head>

<body>
</body>
</html>



File ricerca

<?php require_once('Connections/prodotto.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="CSSprodottotesto.css" rel="stylesheet" type="text/css" />

</head>
</html>


<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title></title>
</head>

<body>
<div align="center" class="prodottotesto"><span class="Stile4"><span class="Stile5"><span class="Stile6"></span></span></span><span class="Stile11">Ricerca prodotto<br />
</span>(per non iscritti) </div>
<form action="ricercaRisultatimini.php" method="post" enctype="multipart/form-data" name="formricerca" id="formricerca">
<p>
<span class="prodottotesto">
<label>Titolo prodotto
<input name="titolo" type="text" id="titolo" size="50" />
</label>
</span></p>
<p>
<span class="prodottotesto">
<label>tipo prodotto
<select name="tipo" id="tipo">
<option value="%" selected="selected">Tutti</option>
<option value="PRODOTTO1">PRODOTTO1</option>
<option value="prodotto2">prodotto2</option>
<option>Altro tipo</option>
</select>
</label>
</span></p>
<p>
<span class="prodottotesto">
<label>Descrizione prodotto
<input name="descrizione" type="text" id="descrizione" size="50" />
</label>
</span></p>
<p>
<span class="prodottotesto">
<label></label>
</span><span class="prodottotesto">
<label>
<input type="submit" name="Submit" value="Ricerca" />
</label>
</span></p>
</form>
<div align="center" class="prodottotestobarranavig"><a href="index.php" class="Stile5">Home</a></div>
</body>
</html>

File risultati:

<?php
if (!isset($_SESSION)) {
session_start();
}
$currentPage = $_SERVER["PHP_SELF"];

require_once('Connections/Prodotto.php');

//includiamo il file della classe per la paginazione
require("Connections//paginazione.php");

//connettiamoci a MySQL e selezioniamo il database
class MySQL
{
function MySQL()
{
$this->host_name = "localhost";
$this->user_name = "user";
$this->password = "";
$this->data_name = "database";
$this->link = mysql_connect($this->host_name, $this->user_name, $this->password) or die (mysq_error());
mysql_select_db($this->data_name) or die (mysq_error());
}
}

$maxRows_ricerca = 5;
$pageNum_ricerca = 0;
if (isset($_GET['pageNum_ricerca'])) {
$pageNum_ricerca = $_GET['pageNum_ricerca'];
}
$startRow_ricerca = $pageNum_ricerca * $maxRows_ricerca;

$vartipo_ricerca = "%";
if (isset($_POST['tipo'])) {
$vartipo_ricerca = (get_magic_quotes_gpc()) ? $_POST['tipo'] : addslashes($_POST['tipo']);
}
$vardescrizione_ricerca = "%";
if (isset($_POST['descrizione'])) {
$vardescrizione_ricerca = (get_magic_quotes_gpc()) ? $_POST['descrizione'] : addslashes($_POST['descrizione']);
}
$varnome_ricerca = "%";
if (isset($_POST['nome'])) {
$varnome_ricerca = (get_magic_quotes_gpc()) ? $_POST['nome'] : addslashes($_POST['nome']);
}
mysql_select_db($database_Prodotto, $Prodotto);
$query_ricerca = sprintf("SELECT Prodotto.nome, Prodotto.tipo, Prodotto.descrizione, Prodotto.altroProdotto FROM Prodotto WHERE Prodotto.nome LIKE '%%%s%%' AND Prodotto.tipo LIKE '%%%s%%' AND Prodotto.descrizione LIKE '%%%s%%' ORDER BY Prodotto.nome", $varnome_ricerca,$vartipo_ricerca,$vardescrizione_ricerca);
$query_limit_ricerca = sprintf("%s LIMIT %d, %d", $query_ricerca, $startRow_ricerca, $maxRows_ricerca);
$ricerca = mysql_query($query_limit_ricerca, $Prodotto) or die(mysql_error());
$row_ricerca = mysql_fetch_assoc($ricerca);

if (isset($_GET['totalRows_ricerca'])) {
$totalRows_ricerca = $_GET['totalRows_ricerca'];
} else {
$all_ricerca = mysql_query($query_ricerca);
$totalRows_ricerca = mysql_num_rows($all_ricerca);
}
$totalPages_ricerca = ceil($totalRows_ricerca/$maxRows_ricerca)-1;


$data = new MySQL();

// istanziamo la classe per l'impaginazione
$p = new Paging;

// numero massimo di risultati per pagina
$max = $maxRows_ricerca;

// identifichiamo la pagina da cui iniziare la numerazione
$inizio = $p->paginaIniziale($max);

// contiamo i records nel database
$query_count = mysql_query("SELECT Prodotto.nome, Prodotto.tipo, Prodotto.descrizione, Prodotto.altroProdotto FROM Prodotto WHERE Prodotto.nome LIKE '$varnome_ricerca' AND Prodotto.tipo LIKE '$vartipo_ricerca' AND Prodotto.descrizione LIKE '$vardescrizione_ricerca' ORDER BY Prodotto.nome") or die (mysql_error());
$count = mysql_num_rows($query_count) or die (mysql_error());

// troviamo il numero delle pagine che dovrà essere contato
$pagine = $p->contaPagine($count, $max);

// limitiamo la SELECT al numero di risultati per pagina
$query = mysql_query("SELECT Prodotto.nome, Prodotto.tipo, Prodotto.descrizione, Prodotto.altroProdotto FROM Prodotto WHERE Prodotto.nome LIKE '$varnome_ricerca' AND Prodotto.tipo LIKE '$vartipo_ricerca' AND Prodotto.descrizione LIKE '$vardescrizione_ricerca' ORDER BY Prodotto.nome LIMIT ".$inizio.",".$max) or die (mysql_error());

//mostriamo le pagine
$lista = $p->listaPagine($_GET['p'], $pagine);
echo $lista . "<br>";

//mostriamo il navigatore Precedente/Successiva
$navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine);
echo $navigatore;




?>




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link href="CSSProdottotesto.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.Stile10 {font-weight: bold}
-->
</style>
</head>
</html><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Risultati ricerca dei Prodotto</title>

</head>

<body class="Prodottotesto">
<div align="center"><span class="Stile10"><span class="Stile11"><span class="Stile12">Risultati della ricerca dei Prodotto
</span></span></span></div>

<table width="100%" border="1">
<tr>

<td colspan="5" bgcolor="#0099FF" class="Stile3">&nbsp;</td>
</tr>
<?php do { ?><tr>
<td colspan="3"><span class="Stile8"><strong>nome:<?php echo $row_ricerca['nome']; ?></strong> </span><span class="ProdottotestoNOMI"> </span> <br />
<span class="Stile8"> </span></td>
<td colspan="2"><span class="Stile8"><strong>tipo: <?php echo $row_ricerca['tipo']; ?> </strong></span></td>
</tr>
<tr>
<td colspan="5"><span class="Stile8"><strong>Descrizione: <?php echo $row_ricerca['descrizione']; ?></strong> </span></td>
</tr>
<tr>
<td colspan="5"><span class="Stile8"><strong>Altro sul Prodotto: <?php echo $row_ricerca['altroProdotto']; ?></strong> </span></td>
</tr>
<tr>
<td colspan="5"><div align="center" class="Prodottotestobarranavig">
<div align="left"><a href="registrazione.php"><em>Nota:...</em></a></div>
</div></td>
</tr>
<tr>
<td width="177"><span class="Stile8"><strong>Nick utente:</strong><strong> </strong></span></td>
<td width="160"><span class="Stile8"><strong>Provincia:</strong> </span></td>
</tr>
<?php } while ($row_ricerca = mysql_fetch_assoc($ricerca)); ?>
</table>

<p align="center">Questa Pagina contiene un totale di <strong> Prodotto trovati</strong>.</p>
<p align="center">
 
Prova a cambiare nel file ricercaRisultatimini.php questa riga

Da così:
PHP:
$count = mysql_num_rows($query_count) or die (mysql_error());

A così:
PHP:
$count = mysql_num_rows($query_count);
 
non basta inviare in get il numero della pagina, dovresti aggiungere una variabile in cui è settato l'ultimo valore per la ricerca.
 
Ho fatto come suggeriva Trogo e ora la situazione è che nella tabella mi stampa i contenuti, ma non mi visualizza " 1|2|3|4|... ecc.
Mentre per quello che dice eliox (visto che sono un primate php :crying: ) ho difficolta a realizzarlo. Mi puoi far vedere come farestri tu? :book: Poi lo script rimarrà a disposizione di tutti. Grazie
 

Discussioni simili