Newsgroup: it.comp.www.php
Titolo: Query doppia stesso risultato!

Ciao a tutti !
Ho la neccessità di visualizzare il risultato di una query due volte
nello stessa pagina, e mi chiedevo come potesso fare.
Dunque... ho scritto una piccola classe che si connette ad un DB esegue la
query e ne estrae i risultati salvandoli in un array.
Questo è il codice:
$db = new db;
$db->dbOpen("localhost" , "utente" , "pass" );
$db->dbSelect("nome_db");
$db->dbQuery("SELECT id,nome FROM categoria;");
while($row = $db->dbFetch()) {
echo "<option value = \"$row[nome_categoria]\">$row[nome]</option>"; }
echo "</select>";
Il codice funziona e, raccoglie i risultati in un menu a discesa
utilizzato per eseguire delle ricerche.
Poche decine di righe piu' in basso devo recuperare lo stesso
risultato in maniera tale da costuire un menu di navigazione.
Ma per il momento riesco a farlo eseguendo nuovamente il codice sopra.
Anche facendo 
while($row) {
echo "<a href = \"view_category.php?id=$row[id]\">";
echo $row[nome] . "</a><br>";
} 
... non ottengo nessun risultato.
Quindi in generale, la domanda è posso tenere una copia del risultato
salvata senza dover rieseguire neccessariamente una query ?
Grazie e a presto. 

 ... non ottengo nessun risultato.
Questo perchè, se ho capito bene come funziona DbFetch, $row viene
riempita ogni volta con un solo risultato e il resto del "materiale" viene
perso.
Quello che potresti fare sarebbe modificare la prima parte del codice con
qualcosa tipo:
$count = 0;
$db = new db;
$db->dbOpen("localhost" , "utente" , "pass" );
$db->dbSelect("nome_db");
$db->dbQuery("SELECT id,nome FROM categoria;");
while($row = $db->dbFetch()) {
	$result[$count]=$row;
	$count++;
}
dopodichè dovresti poter "mostrare" i risultati con un semplice:
for ($i=0; $i<=$count; $i++) {
  echo "<option value  =\"$result[$i][nome_categoria]\">$result[$i][nome]</option>";
  echo "</select>";
}
almeno per il primo caso. Il ciclo penso vada benissimo anche per il
secondo caso, comunque. Spero sia giusto, sono un po' arrugginito e non è
il massimo dell'eleganza, ma come aggiustamento volante dovrebbe
funzionare (di modi per ridurre le variabili e aumentare la leggibilità
ne troverai sicuramente quanti vuoi).
See you,
		Silver Drake
-- 
We starve-look At one another Short of breath
Walking proudly in our winter coats Wearing smells from laboratories
Facing a dying nation Of moving paper fantasy
Listening for the new told lies With supreme visions of lonely tunes

 echo "</select>";
Non conosco questo metodo di interfacciamento con db, ma con mysql avrei
fatto cosi':
$db=mysql_connect("localhost","utente","pass");
$rs_result=mysql_query("select id,nome FROM categoria;",$db);
mysql_close($db);
// Copio il risultato della query in una variabile temporanea
$rs_result_temp=$rs_result;
while ($rs=mysql_fetch_array($rs_result_temp)) {
        ...
}
...
...
...
//Piu' in basso posso riscrivere
$rs_result_temp=$rs_result;
while ($rs=mysql_fetch_array($rs_result_temp)) {
        ...
}
-- 
Ciao,
        Fabrizio
<=- 
http://www.negusweb.it
 -=>

 salvata senza dover rieseguire neccessariamente una query ?
Soluzione molto piu' semplice:
<?php 
$db = new db;
$db->dbOpen("localhost" , "utente" , "pass" );
$db->dbSelect("nome_db");
$db->dbQuery("SELECT id,nome FROM categoria;");
$menu = "";
while($row = $db->dbFetch()) 
{
 echo "<option value = \"$row[nome_categoria]\">$row[nome]</option>"; 
 $menu .= "<a href = \"view_category.php?id=$row[id]\">" . $row[nome] .
"</a><br>";
}
echo "</select>";
// ...
print ($menu);
?>
-- 
I'am what I'am, I do what I can

> nello stessa pagina, e mi chiedevo come potesso fare.
<cut>
Ok... grazie per le dritte: sono riuscito nell'intento.
In effetti la soluzione non era poi così complicata lo ammeto,
ma talvolta ai problemi ci si gira attorno piuttosto che risolveri  :o)
A presto
clust

 echo "</select>";
all'interprete! od almeno da quanto ricordo si poteva fare così!!
byez all
--------

 avrei fatto cosi':
Lo hai testato il codiche che hai postato o vai a naso? 
Non credo possa funzionare a causa del funzionamento interno dei
recordset del link a mysql.


 recordset del link a mysql.
Quale link ?
$rs_result contiene il risultato dell'interrogazione, non è un collegamente
a qualcosa del mysql.
Per cui la puoi trattare come una normale variabile.
E tu lo hai provato il codice ? :-)


 $rs_result contiene il risultato dell'interrogazione,
Sbagliato. $result contiene una resource al risultato della query, non
i risultati della stessa. Da manuale una risorsa č:
a special variable, holding a reference to an external resource.
Il che signifca che e' un riferimento al recordset restituito da MySQL. 
Ora, il codice $rs=mysql_fetch_array($rs_result_temp) sposta in avanti
il puntatore all'interno dei risultati della query di MySQL, il ciclo
while viene eseguito fintanto che ci sono ancora record da estrarre.
Il tuo codice $rs_result_temp=$rs_result; non imposta $rs_result_temp
con i valori restituiti dalla query, ma lo imposta con il riferimento
alla risorsa MySQL che identifica i record restituiti dalla query, ed
infatti se testi il codice ti accorgerai che il secondo cicli NON viene
eseugito proprio perche' il promo ha spostato al termine della lista il
puntatore.
Saluti.


 puntatore.
Hai ragione. Mi aveva tratto in inganno il fatto che potessi prima chiudere
il db e poi effettuare un mysql_fetch_array.
Comunque hai provato con mysql_data_seek ?
Ovvero:
$rs_result=mysql_query("SELECT * FROM test.prova");
while ($rs=mysql_fetch_array($rs_result)) {
        ...
}
// Riposizione il puntatore al primo record.
mysql_data_seek($rs_result,0);
while ($rs=mysql_fetch_array($rs_result)) {
        ...
