Update

  • Creatore Discussione Creatore Discussione Gae58
  • Data di inizio Data di inizio

Gae58

Utente Attivo
26 Mar 2012
84
0
0
salve,

Mi trovo alle prese con una query in cui ho 2 tabelle, una dei Comuni ed una delle Regioni.

Nella Tabella dei Comuni ho un campo Regioni.

NElla select ho collegato attraverso la join il campo alla Tabella Regioni efunziona.

Adesso per lUpdate non so come fare.

Premetto che uso i PDO con i parametri.

Facendo varie prove ho notato che nella Tabella dei COmuni devo memorizzare il Progressivo della Regione. Ma a questo punto non ho capito il significato della Join nell'UPDATE.

In una form in Variazione, permetto la scelta della Regione da un comboBox e pensavo che sarebbe passato passare la Var della form per aggiornare il campo, ma non è così.

Questo è il codice dell'UPDATE:
PHP:
					$cSql = 'UPDATE Comuni  AS Comu
								LEFT JOIN Regioni AS Regi	ON Comu.Regione = Regi.Descrizione
										SET Comu.Descrizione=?, Comu.Cap=?, Comu.Prov=?, Comu.CodIstat=?, Comu.Regione=?  
											WHERE Comu.Progressivo = ?';
					$aPara = array( $Var['Des'], $Var['Cap'], $Var['Prov'], '', Regi.Progressivo, $Var['Prog'] );
Mi ritorna l'errore sul parametro Regi.Progressivo

Come faccio a passare il progressivo della abella Regioni?

grazie

Gaetano
 
Ultima modifica di un moderatore:
Ti perdono per non aver formattato il sorgente con i tag BBCode solo perché usi PDO, cosa assai rara da vedere.
Stavolta ho modificato io, la prossima però cancello.

Detto questo, passiamo al tuo problema. Per forza ti dà errore su Regi.Progessivo: non è una sequenza riconosciuta da PHP... A cosa ti riferisci? Una variabile?
 
chiedo scusa, come faccio a formattare con i tag BBCode?

Dopo che ho scelto la Regione nella Select ho la Var $_POST[Regi'+che contiene il nome della Regione, ma non lo memorizza nel dB.
Ho pensato volesse il dato numerico.

Regi.Progressivo è il campo dell'UPDATE che passo nei parametri, è stata un'ulteriore prova
 
Nella seconda barra di formattazione del post: ultimi tre pulsanti (nel tuo caso avresti dovuto usare l'icona con su scritto PHP).

Comunque, fai una cosa: posta tutto lo script. Voglio vedere come recuperi i vari dati del form.
 
PHP:
			$cSql = 'UPDATE Comuni  AS Comu
								LEFT JOIN Regioni AS Regi	ON Comu.Regione = Regi.Descrizione
										SET Comu.Descrizione=?, Comu.Cap=?, Comu.Prov=?, Comu.CodIstat=?, Comu.Regione=?  
											WHERE Comu.Progressivo = ?';
					$aPara = array( $Var['Des'], $Var['Cap'], $Var['Prov'], '', $Var['ProgRe'], $Var['Prog'] );
					$cQry = null;
						$cQry = cQuery( $Conn, $cSql, $aPara );

ho usato l'icona con php. Ho fatto bene?
 
è una normale pagina web con un form ed i valori li passo ad una funzione attraverso questa riga
PHP:
$lRis = Aggiorna( 'Comuni', $_POST )

Quindi l'array post della formm attraverso la func viene preso dall'array $Var

Quindi $Var corrisponde a $_POST
 
In teoria il codice giusto è:
PHP:
$cSql = 'UPDATE Comuni AS Comu
LEFT JOIN Regioni AS Regi ON Comu.Regione = Regi.Descrizione
SET Comu.Descrizione = ?, Comu.Cap = ?, Comu.Prov = ?, Comu.CodIstat = ?, Comu.Regione = ?
WHERE Comu.Progressivo = ?';
$aPara = array($Var['Des'], $Var['Cap'], $Var['Prov'], '', $Var['Regi'], $Var['Prog']);
Dunque inserisci questo, e se non funziona scrivi:
PHP:
var_dump($Var);
E vedi che dati contiene.
 
già fatto e la var $Var['Regi'], contiene il nome della Regione, soltanto che dopo aver salvato senza aver dato alcun tipo di errore, vado a controllare il dato e non mi mette la regione.

Apro a mano la tabelle e vedo che il progressivo è zero e manca, invece, il progressivo della regione

La cosa che non capisco è l'istruzione JOIN Regioni AS Regi ON Uffi.Regione = Regi.Progressivo,
Questa non dovrebbe servire a collegare i 2 campi ?
 
Ultima modifica:
Codice:
LEFT JOIN Regioni AS Regi ON Comu.Regione = Regi.Descrizione

Comu.Regione Non penso sia esatto in quanto la tabella è uffici e quindi devo mettere Uffi.Regione

Regi.Descrizione, avevo già provato a farlo, ma con lo stesso risultato.

QUando nel movimento è presente la Regione, quando vado in vaiazione, me la cancella

La soluzione è passare il dato numerioc, ma come faccio a darglielo?
 
La Tabella che devo Aggiornare è la Tabella Uffici, un campo di questa è il campo Regioni, dato Numerico.
Quando Visualizzo il Movimento, per evitare che mi visualizzi il dato numerico, nella select inserisco al Join e sin qui tutto funziona.

In un'altra pagina effettuo la modifica e la select della scelta della regione me le visulizza tutte.
Con l'UPDATE devo aggiornare il valore numerico del campo Regioni della Tabella Uffici.

Se nell'UPDATE non effettuo la Join come faccio ad inserire il dato numerico nel campo?
 
Nel form la select contenente le regioni deve avere il nome della regione come etichetta, e il campo numerico come valore.
Una cosa del genere, insomma:
HTML:
<select name="regione">
    <option value="1">Regione 1</option>
    <option value="2">Regione 2</option>
    <!-- ... -->
</select>
In questo modo l'ID della regione sarà già contenuto in $_POST['regione']. Non capisco che bisogno ci sia, a questo punto, di fare la JOIN.
 
La mia ignoanza è abbissal, mi sa che hai Ragione, se è così ti chiedo scusa sin da adesso per la mia ESAGERATA ignoranza ed incopetenza.

Proverò e ti farò sapere

Per il momento ti ringrazio tanto

Ciao Gaetano
 
Ti confermo quanto detto nel precedente messaggio, in quanto la logica è giusta.

Adesso funziona tutto bene.
Come logica ci ero arrivato quando dicevo che occorreva il dato numero, ma, purtroppo, non settavo il value dell'otion col progressivo.

Di nuovo grazie

Gaetano
 

Discussioni simili