Ciao a tutti.
Mi sono accorto che c'è un problema nella ricerca dei documenti relativa a un progetto che avevo sviluppato tempo fa
In pratica la prima pagina risulta esatta, ma se voglio visualizzare il resto dei risultati della stessa query mi ritrovo con tutti i dati del db.
Per capirci, in un altra pagina (quella con il modulo di selezione) seleziono un cliente (posso scegliere i documenti anche in base ad un certo intervallo di tempo..ma non è importante adesso) e visualizzo inviando le variabili al codice della pagina sotto i risultati che interessano; ad esempio per il cliente Tal dei tali ci sono 6 fatture, la pagina dovrebbe visualizzare un elenco con i dati dei primi 5 (ho impostato l'intervallo così per prova) e nella successiva seconda pagina (pag2) il rimanente documento. Ok?
Ecco se clicco su pagina 2 mi ritrovo con parte di tutti gli altri documenti di tutti i clienti ( come si avessi fatto una query che dovrebbe restituirmi tutto quello che c'è nel db).
Codice PHP:
....
else {
include("dati.php");
$link=mysql_connect("$db_host","$db_login","$db_pass")
or die ("Non riesco a connettermi a [b]$db_host");
mysql_select_db ($database, $link)
or die ("Non riesco a selezionare il db $database
");
if (($_REQUEST['clie']=="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']==""))
{
$tutto = "SELECT * FROM fatture ORDER BY data";
}
elseif (($_REQUEST['clie']!="")&&($_REQUEST['firstinput']=="")&&($_REQUEST['secondinput']==""))
{
$tutto = "SELECT * FROM fatture where id_cliente = '".$_REQUEST['clie']."' ORDER BY data";
}
elseif (($_REQUEST['clie']!="")&&($_REQUEST['firstinput']!="")&&($_REQUEST['secondinput']==""))
{
list($giorno,$mese,$anno) = split("/",$_REQUEST['firstinput']);
$datain = mktime(0,0,0,$mese,$giorno,$anno);
$tutto = "SELECT * FROM fatture where id_cliente = '".$_REQUEST['clie']."' and data >= '".$datain."' ORDER BY data";
}
.........//ci sono altre condizioni qui
$righe_per_pagina = 5;
if (!isset($_REQUEST['pagina'])) $pagina = 1;
else {
if ($_REQUEST['pagina'] <= 0) $pagina = 1;
else $pagina = $_REQUEST['pagina'];
}
global $pagina, $righe_per_pagina;
$query = mysql_query ($tutto,$link)
or die ("Non riesco ad eseguire la richiesta $tutto");
$totr=mysql_num_rows($query);
// arrotonda al numero intero + alto
$numero_pagine = ceil($totr/$righe_per_pagina);
// calcola il numero della pagina corrente
$pagina_corrente= ceil($pagina-1/$righe_per_pagina);
echo " <div align=center>[b]Pagina $pagina_corrente di $numero_pagine[/b]</div>
[b]Numero fatture trovate: <font color=\"#FF0000\" size=\"5\"> ".$totr." </font>[/b] <a href=\"ricerca.php\">Ritorna al modulo</a>
<table border=1 width=\"600\" cellspacing=\"0\" cellpadding=\"5\"><tr>
<td width='80' align='center'>[b]Fattura N°[/b]</td>
<td width='150' align='center'>[b]Data[/b]</td>
<td width='250' align='center'>[b]Cliente[/b]</td>
<td width='120'align='center'>[b]Dettagli[/b]</td></tr></table>
";
$tutto.=" LIMIT ".(($pagina-1)*$righe_per_pagina).", ".$righe_per_pagina;
$querylim = mysql_query ($tutto,$link)
or die ("Non riesco ad eseguire la richiesta $tutto");
if (mysql_num_rows($querylim) > 0) {
while( $row = mysql_fetch_array($querylim) )
{
$cust = $row["id_fattura"];
$querycust = mysql_query("SELECT * FROM clientidb JOIN fatture ON clientidb.id_user=fatture.id_cliente
WHERE fatture.id_fattura = $cust",$link);
while( $rowcust = mysql_fetch_array($querycust) )
{
$cognome_cliente = $rowcust["cognome"];
$nome_cliente = $rowcust["nome"];
}
?>
<html>
<script type="text/javascript">
function PopupCentrata(dest_url) {
var w = 600;
var h = 800;
var l = Math.floor((screen.width-w)/2);
var t = Math.floor((screen.height-h)/2);
window.open(dest_url, "nome_finestra", "width=" + w + ",height=" + h + ",top=" + t + ",left=" + l);
}
</script>
</html>
<?
echo "
<table border=0 width=\"600\" cellspacing=\"3\"><tr>
<td width='80' align='right'>[b]$row[numero_fatt][/b]</td>
<td width='150' align='center'>[b]".date("d/m/y", $row['data'])."[/b]</td>
<td width='125' align='left'>[b] $cognome_cliente[/b]</td>
<td width='125' align='left'>[b] $nome_cliente[/b]</td>
<td width='120'align='center'>[b]<a href=\"#\" onClick=\"PopupCentrata('filmato.php?variabile=$cust')\">Visualizza</a>[/b]</td>
</tr>
</table>";
}
echo $_REQUEST['id_user'];
echo "<center>
";
if ($numero_pagine > 1) {
//inizio della condizione per creare l'elenco delle pagine
for ($pag = 1; $pag <= $numero_pagine; $pag++) {
echo "[ <a href=?";
echo "pagina=".($pag).
" title=\"Vai a pagina $pag\">".$pag."</a> ] ";
}
} // fine "elenco"
echo "</center>";
}
}
?>
Penso di aver individuato il problema.
Richiamando le restanti pagine della paginazione dei dati in pratica perdo le variabili dei request e viene eseguita la prima query (cioè la prima quella che richiama l'elenco completo)....credo.
Come devo risolvere la cosa?
Ho provato, ma il problema è più ostico del previsto.
Potete almeno darmi un'idea?
Grazie