PDA

View Full Version : [PHP+PGsql] Domandina su come eseguire una serie di query...


Jarsil
10-08-2002, 11:59
Ho bisogno di fare una cosa del genere:

Lo script php iniziale richiama un file contenente le funzioni tra cui:

Query1:

Esegue la query su un DB in una precisa tabella e inserisce i valori in un men¨ a tendina HTML. Fin qui, nessun problema:


<?php
function cliente($db,$cliente)
{
global $cliente;
global $data;
//global $idtemp; =$cliente
$Query="SELECT id,ragsoc FROM tcliente";
$db->query($Query);
$data = $db->getDataTable();
$tot_rows = $db->getNumRows();
for($row=1; $row<=$tot_rows; $row++)
{
$selected =(($data[$row][1]==$cliente)?(' selected'):(''));
$idcli[$cliente]=$data[$row][0];
// $idtemp=$idcli[$cliente];
?>
<option value="<?=$data[$row][1]?>"<?=$selected?>><?=$data[$row][1]?>
<?php
}
}



DopodichÚ per˛, da quel maledetto men¨ a tendina deve uscire il parametro per la successiva query.
In pratica chi usa sta pagina deve selezionare il nome di un cliente e da questo devo poter portare in un altro men¨ a tendina le varie tipologie di sede che usufruiscono del servizio (Sede Principale, Secondaria, ecc.), sedi che sono contenute in un'altra tabella relazionata alla prima:


<?php
function sede($db,$cliente)
{
global $sede;
$Query="SELECT tpsede FROM tsede WHERE cliente=$data[$row][1]";
$db->query($Query);
$data1 = $db->getDataTable();
$tot_rows = $db->getNumRows();
for($row=1; $row<=$tot_rows; $row++)
{
$selected =(($data1[$row][0]==$cliente)?(' selected'):(''));

?>
<option value="<?=$data1[$row][0]?>"<?=$selected?>><?=$data1[$row][0]?>
<?php
}
}
?>


La seconda query non ne vuole sapere di funzionare.
O meglio, la query funziona ma il parametro del WHERE Ŕ vuoto, per cui non ottengo risultati.

Qualcuno ha idee?

DM Ilweran
10-08-2002, 12:51
Non sono un esperto di PhP e non ci programmo da un 3 mesi ma credo che l'errore sia nel fatto che la query sia una semplicissima stringa che PhP passa al database (mai usato Postgre... eppure dovrebbe piacermi un bel po' :=) ).
Per questo motivo non interpreta le variabili PhP che inserisci nella query: $data Ŕ una variabile PhP '$data' Ŕ un vettore di 5 char che Postgre non trova.

Advisory:
Questo post potrebbe contenere svariate stronzate :)

Ciao !

Jarsil
10-08-2002, 16:59
in teoria il trucco per evitare l'ho fatto ossia, fare in modo che il contenuto di quel dato valore nella matrice risultante dalla query venga passato a una variabile definita con "global" la quale rimane (o dovrebbe) invariata nella successiva funzione.

Il problema in realtÓ sta ne fatto che lo script non raccoglie la selezione fatta dall'utente nel men¨ a tendina, e si prende sempre l'ultimo valore uscente dal ciclo for{}

P.S.
Provalo, PostGresql... fidati :)

E' eccezionale, veloce e linux 100% :p

DM Ilweran
10-08-2002, 17:37
Non ho ben capito sto trucco...
La variabile c'Ŕ ma non Ŕ nella query...
PerchŔ non provi a fare una maialata del tipo
"SELECT tpsede FROM tsede WHERE cliente="$data[$row][1];
^
In questo modo la stringa query viene chiusa dopo l'uguale e PhP dovrebbe passare correttamente il valore di $data che in ogni caso in memoria c'Ŕ (Ŕ globale).
La query da quel che capisco dal tuo script non Ŕ parte di PhP ma una semplice varibile (sarebbe un vettore) che va passata al database che la interpreta con il suo motore SQL.

A casa non utilizzo database... cioŔ ho un bel po' di CD ma mica cosý tanti.
Il database me lo sono fatto io in Python :D Ovviamente devo smettere di comprarne altrimenti mi sa che il mio programmino spanna e di brutto :p

Jarsil
10-08-2002, 18:07
Originally posted by DM Ilweran
Non ho ben capito sto trucco...
La variabile c'Ŕ ma non Ŕ nella query...
PerchŔ non provi a fare una maialata del tipo
"SELECT tpsede FROM tsede WHERE cliente="$data[$row][1];


PEr il Php Ŕ indifferente, quello che sta fra doppi apici se ha un $ davanti Ŕ considerato variabile quindi prende il valore che questa ha assegnato...