Newsgroup: it.comp.www.php
Titolo: PHP e postgreSQL select che errore!!!!

ciao raga perchè questo pezzo di codice mi da errore?
 $sqlcliente="
	      INSERT INTO clienti
	      (nome_azienda)
	      VALUES
	      ('$cliente')
	      ";
	      $risultato=@pg_query($connessioneDB, $sqlcliente)
	            or die("impossibile queryare il cliente");
 
	      $idcliente=("SELECT max(id_cliente) FROM clienti")
	             or die("impossibile selectare il cliente");
 
	      $sqlordini="
	      INSERT INTO ordini
	      (id_cliente)
	      VALUES
	      ('$idcliente')
	      ";
	       $risultato=@pg_query($connessioneDB, $sqlordini)
	            or die("impossibile queryare l'ordine");
nel browser mi da "impossibile queyrare l'ordine" invece il database mi
segnala che non posso fare la "SELECT max(id_cliente) FROM clienti".
why?
Ho scritto male?
grazie tante....
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 segnala che non posso fare la "SELECT max(id_cliente) FROM clienti".
id_cliente è un intero?
Perchè lo inserisci come stringa?
Ciao
Marco


id cliente lo inserisce il database in automatico io non lo inserisco ci
faccio solo la select.


 faccio solo la select.
Direi di no.
      $sqlordini="
      INSERT INTO ordini
      (id_cliente)
      VALUES
      ('$idcliente')
Ciao
Marco


si è vero li lo inserisco io.
Ma allora come dovrei fare?


             or die("impossibile queryare il cliente");
$connessioneDB è ok?
Ludovico

 Ma allora come dovrei fare?
Togli gli apici.
Ciao
Marco

 	      
Non è che da qualche parte manca un pg_query? :-)
E' un po' difficile che una semplice assegnazione di stringa ti generi 
un errore ;-)
-- 
Fabrizio "Hermooz" Ermini

 $connessioneDB è ok?
si si è tutto ok e ne sono siduro al 100%



ma dove? io ho solo aggiunto una riga in piů? aspe ti posto il codice:
 $sqlcliente="
	      INSERT INTO clienti
	      (nome_azienda)
	      VALUES
	      ('$cliente')
	      ";
	      $risultato=@pg_query($connessioneDB, $sqlcliente)
	            or die("impossibile queryare il cliente");
 
	      $idcliente="SELECT MAX(id_cliente) FROM clienti"
	             or die("impossibile selectare il cliente");
 
	      $sqlordini="
	      INSERT INTO $ordini
	      (id_cliente)
	      VALUES
	      ('$idcliente')
	      ";
	       $risultato=@pg_query($connessioneDB, $sqlordini)
	            or die("impossibile queryare l'ordine");
 
	      $idordine=("SELECT max(id_ordine) FROM ordini");
	      $sqlcommessa="
	      INSERT INTO commesse
	      (nome_commessa, id_ordine)
	      VALUES
	      ('$commessa', '$idordine')
	      ";
	      $risultato=@pg_query($connessioneDB, $sqlcommessa)
	            or die("impossibile queryare la commessa");
	      $idcommessa=("SELECT max(id_commessa) FROM commesse");
 
	      $sqlcosti="
	      INSERT INTO $costi
	      (localita, importo, tipo_spesa, tipo_trasp, valuta, data, id_commessa)
	      VALUES
	      ('$zona','$spesa','$categoria','$dettaglio', '$valuta','$data',
'$idcommessa')
	      ";
	      $risultato=@pg_query($connessioneDB, $sqlcosti)
	            or die("impossibile queryare i costi");
ho aggiunto solo il pezzo che ho postato in precedenza e prima di
aggiungerlo funzionava tutto


 
Te l'ho detto dove.
questa
 > 	      $idcliente="SELECT MAX(id_cliente) FROM clienti"
 > 	             or die("impossibile selectare il cliente");
NON E' UNA QUERY... è solo un'assegnazione di variabile. Dentro 
$idcliente ci ritrovi solo la stringa "SELECT MAX(id_cliente) FROM 
clienti" e non l'id_cliente.
Ah, incidentalmente, usare il max(id_cliente) per avere l'ultimo id 
inserito è sbagliato. In un ambiente concorrente non è garantito che sia 
davvero l'ultimo inserito.
Chiaro ora? :-)
-- 
Fabrizio "Hermooz" Ermini

 si si è tutto ok e ne sono siduro al 100%
e che ne dici di farti dire da PostgreSQL qual'è l'errore?
http://it2.php.net/manual/en/function.pg-last-error.php
dove suggerisce anche
Use pg_result_error(), pg_result_status() and pg_connection_status() for
better error handling.
Ludovico

 clienti" e non l'id_cliente.
anche se sbagliato, ed hai fatto bene a notarlo (non ci ero neanche arrivato
e leggere li..), non dovrebbe ritornare un errore o "false", per cui non
entra in quel "or die()".
Dovrebbe ritornare false in casi tipo
$a = 0 or die("eh, si");
$a = "0" or die("eh, si");
$a = "" or die("eh, si");
$a = false or die("eh, si");
Ludovico

ok ho provato a fare così:
  $sqlcliente="
	      INSERT INTO clienti
	      (nome_azienda)
	      VALUES
	      ('$cliente')
	      ";
	      $risultato=@pg_query($connessioneDB, $sqlcliente)
	            or die("impossibile queryare il cliente");
 
	      $idcliente="SELECT MAX(id_cliente) FROM clienti"
	             or die("impossibile selectare il cliente");
 
	      $idclienterisult=@pg_query($connessioneDB, $idcliente)
	            or die("impossibile queryare il cliente");
 
	      $sqlordini="
	      INSERT INTO $ordini
	      (id_cliente)
	      VALUES
	      ('$idclienterisult')
	      ";
	       $risultato=@pg_query($connessioneDB, $sqlordini)
	            or die("impossibile queryare l'ordine");
 e adesso il DB mi da sto errore:
can't parse "resouce id #4"



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

nel browser mi da "impossibile queyrare l'ordine"
                                           ^^^^^^
e avevo capito "...il cliente". Dopo quel punto l'errore, come ti hanno
detto, e' che non esegui piu' la query :-)
Leonardo


 }
l'errore è dopo per idcliente perchè quello lo inserisce nella tabella


	             or die("impossibile selectare il cliente");
Queste due righe non significano niente (o meglio: significano una cosa
diversa da quella che pensi tu).
Togli tutte le @ che trovi e aggiungi questa riga in cima al codice PHP
	error_reporting(E_ALL);
Ricordati che se il sistema ti segnala un errore lo devi eliminare, non
serve a niente ordinargli di non avvisarti (questo e' quel che fa @).
Altrimenti tanto varrebbe spegnere il monitor e dire "Ecco, ora va: non
ci sono piu' errori!" :-)))
===
A parte questo, pg_query NON TI RITORNA UN RISULTATO. Ti ritorna invece
un puntatore a un risultato. Se poi vuoi il risultato, devi usare altre
funzioni (es.: pg_fetch_array) sul puntatore.
	$idcliente_Q = "SELECT MAX(id_cliente) FROM clienti";
	$idcliente_H = pg_query($conn, $idcliente_Q);
	$idcliente_D = pg_fetch_row($idcliente_H, 0);
	$idcliente   = $idcliente_D[0];
Qui idcliente_Q e' la QUERY (una stringa); idcliente_H e' la handle con
cui recuperi i risultati, il cursore insomma (una risorsa); idcliente_D
sono i dati relativi alla prima (#0) t-upla che recuperi (un array); ed
infine $idcliente e' il numero che gli hai detto di trovarti.
Che pero' e' sbagliato: il numero che serve a te sarebbe casomai non il
massimo ID cliente, ma l'ID *SUCCESSIVO* - perche' stai inserendone uno
nuovo. Quindi dovresti usare semmai $idcliente + 1.
Questa scelta e' corretta dal punto di vista numerico, ma ti porta a un
bagno di sangue in ambiente concorrente... perche' se due copie del tuo
script partono sfalsate di abbastanza poco (rarissimamente succedera'),
una preleva l'ID 5, l'altra preleva anche lei l'ID 5, la prima crea una
nuova t-upla con ID 6 credendolo unico (e ha ragione) e la seconda crea
una t-upla con ID 6 credendolo unico (e pero' si sbaglia), e addebita a
un cliente roba che e' di un altro cliente --> disastro.
La soluzione finale :-) con PostgreSQL e': avere il campo id_cliente di
tipo SERIAL; inserire i dati del cliente _SENZA_ specificare l'ID, cosa
che dice a PostgreSQL di arbitrare un id_cliente buono; e poi, chiedere
cortesemente a PostgreSQL quale sia l'ID appena creato con currval()...
c'e' un post in proposito fresco fresco di oggi.
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.