Newsgroup: it.comp.www.php
Titolo: Qualcuno mi ci da un occhio a sto script

questo script mi dovrebbe abbinare i miei costi alle mie commesse
che nel database hanno un codice uguale. Non prende il valore successivo di
$codicecommessa.
 while($row = pg_fetch_assoc($sqltotal)) {
 
	echo
"<tr><td>{$row['data']}</td><td>{$row['nome_azienda']}</td><td>{$row['nome_commessa']}</td><td>{$row['localita']}</td>";
	echo
"<td>{$row['ore_lavorative']}</td><td>{$row['ore_assenza']}</td><td>{$row['tipo_ass']}</td>";
 
	$row =pg_fetch_assoc($risultato_costi);
	$costidb=$row['codice_commessa'];
	$codicecommessacosti=trim($costidb);
	print "mm".$codicecommessacosti."ss";
	$cont=0;
	$row=0;
 
	while(($cont<=$numerocommesse)&&(isset($codicecommessacosti))){
		$row = pg_fetch_assoc($risultato_commessa);
		$commessadb=$row['codice_commessa'];
		$codicecommessa=trim($commessadb);
		print "(".$codicecommessa." x ".$codicecommessacosti.")";
		if($codicecommessa==$codicecommessacosti){
		    print "ciclo";
		    $row3 = pg_fetch_array($sqltotal2);
		    echo
"<td>{$row3['tipo_spesa']}</td><td>{$row3['tipo_trasp']}</td><td>{$row3['valuta']}</td><td>{$row3['importo']}</td></tr>";
		}else print "</tr>";
		$cont++;
	    }
 
    }
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

"lorenzo"  ha scritto nel messaggio:

provo a  capire:
 - il secondo while (quello che contiene il '$codicecommessa' incriminato)
   viene eseguito più volte ma solo il primo '$codicecommessa' contiene un valore:
 se è cosi:
 - hai controllato quante righe ti ritorna la query 'individuata' da
   '$risultato_commessa'?
   immagino che sia '$numerocommesse'...secondo il tuo script
 e se è cosi_
 - se (per e.s.) '$risultato_commessa'=1, quindi un result set,
   il ciclo while viene iterato 2 volte:
    0<=1 --> si, preleva primo result set
    1<=1 --> si, preleva secondo(?) result set
allora:
- prova a cambiare il '<=' in '<'...
  e se ho capito il tuo script dovrebbe funzionare...
Ciao
_SV_


aspetta, il problema è che la prima volta funziona cioè, quando entra nel
primo while la prima volta va tutto bene.
la seconda volta che entra nel primo while il $codicecommessa del secondo
while non viene settato cioè la fecth non riparte da capo, c'è un modo per
farla ricominciare dall'inizio, forse devo mettere la select dentro al primo
ciclo?


 ciclo?
si, una soluzione potrebbe essere quella di rifare nuovamente la query al DB
_SV_


anche se la select la metto dentro al primo ciclo lo script non funziona,
cioè salta fuori un'altro errore, e cioè che ci possono essere più costi con
lo stesso codice commessa.


 lo stesso codice commessa.
non mi è chiaro...
tu effettui la tua query prima che inizi il ciclo, giusto?
durante il ciclo il database viene modificato?
se non viene modificato non capisco perche rifacendo la query ottieni dei
dati 'errati', se il risult set è uguale quello fatto prima dell'inizio del ciclo...
c'è qualcosa che mi sfugge...
cmq...
un'altra soluzione potrebbe essere quella di memorizzare
il result set della tua query in un array prima d iniziare il ciclo e quindi
utilizzare quello per prelevare il tuo $row['codice_commessa'];
in quanto pg_fetch_assoc() 'dimentica' i result set che ha prelevato.
_SV_


no il database non viene modificato in alcun caso, prelevo solo i dati con
una select tutto qui, cmq adesso provo con gli array e poi ti so dire.



:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

Ho provato a fare come mi avevate detto, cioč a salvare tutti i risultati
negli array ma quello che mi stampa non č quello che volevo notate qualche
errore?
 
$select_codice_commessa_costi="SELECT codice_commessa, data FROM costi ORDER
BY data";
        $risultato_costi=@pg_query($connessioneDB2, $select_codice_commessa_costi)
	            or die("impossibile fare la select a commessa costi");
 $select_codice_commessa="SELECT codice_commessa FROM commesse ORDER BY
codice_commessa";
    $risultato_commessa=@pg_query($connessioneDB2, $select_codice_commessa)
	or die("impossibile fare la select a commessa ");
$i=0;
$j=0;
while($row =pg_fetch_assoc($risultato_costi)){
    $costidb=$row['codice_commessa'];
    $codicecommessacosti[$i]=trim($costidb);
    print "mm".$codicecommessacosti[$i]."ss";
    $i++;
}
 while($row = pg_fetch_assoc($risultato_commessa)){
	$commessadb=$row['codice_commessa'];
	$codicecommessa[$j]=trim($commessadb);
 
	$j++;
 }
	$select_codice_commesse="SELECT codice_commessa FROM ore ORDER BY
codice_commessa";
		$risultato_commesse=@pg_query($connessioneDB2, $select_codice_commesse)
		    or die("impossibile fare la select a commessa ore ");
 
while($row = pg_fetch_assoc($risultato_commesse)){
		$commessedb=$row['codice_commessa'];
		$codicecommesse[$k]=trim($commessedb);
		$k++;
}
$numerorighe=pg_num_rows($risultato_costi);
$numerorichecommessa=pg_num_rows($risultato_commessa);
while($row = pg_fetch_assoc($sqltotal)) {
 
    echo
	"<tr><td>{$row['data']}</td><td>{$row['nome_azienda']}</td><td>{$row['nome_commessa']}</td><td>{$row['localita']}</td>";
    echo
	"<td>{$row['ore_lavorative']}</td><td>{$row['ore_assenza']}</td><td>{$row['tipo_ass']}</td>";
 
    for($j=0;$j<=$numerorighecommessa;$j++){
	$k=0;
	for($i=0;$i<=$numerorighe;$i++){
	print "(".$codicecommessa[$j]." x ".$codicecommessacosti[$i].")";
	    if($codicecommessa[$j]==$codicecommessacosti[$i]){
 
		print "--".$codicecommesse."--";
		if($codicecommessacosti[$i]==$codicecommesse[$k]){
		    print "ciclo";
		    $row3 = pg_fetch_array($sqltotal2);
		    echo
			"<td>{$row3['tipo_spesa']}</td><td>{$row3['tipo_trasp']}</td><td>{$row3['valuta']}</td><td>{$row3['importo']}</td></tr>";
		}else print "</tr>";
	    }
	    $cont++;
	    $k++;


		    $row3 = pg_fetch_array($sqltotal2);
...e concludo che non potra' mai funzionare, perche' intrecciare le query
in questo modo e' la scorciatoia piu' sicura verso il CGT (Casino Globale
Totale).
Facciamo che spegni il computer, prendi carta e penna, e descrivi, con il
MASSIMO dettaglio, cosa esattamente vuoi fare. Piu' o meno in quel punto,
dove c'e' $row3, ti stai incartando. Domandati: "cosa ritorna row3, e PER
QUALE MOTIVO DOVREBBE RITORNARE QUELLO CHE CREDO RITORNI?".
Altra cosa, fattelo stampare via via, con commenti:
	print "Adesso estraggo il record della commessa";
 
	print "Lo ho estratto e il valore del codice e' ...";
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

 mettere in pratica senza avere studiato e' pericoloso.
Ti ringrazio Leonardo ma non mi serve più perchè il mio datore di lavoro si
rimangia le cose, e adesso ne vuole altre e colmpletamente diverse. e tutte
entro giovedi cioè domani, sei stato molto di aiuto e mi dispiace averti
fatto scervellare così come mi dispiace a me lasciare le cose a metà.
Grazie di nuovo
Lorenzo
