[risolto] UPDATE di una tabella all'interno di un ciclo while

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buonasera, eccomi ancora con un altro scoglio da superare.
Argomento del sito: lezioni di cucina
In breve:
Tramite un form permetto la selezione di un mese e un anno, visualizzo l'elenco delle lezioni al fine di permetterne la variazione o il completamento delle voci mancanti.
La pagina e' piuttosto lunga, quindi vi fornisco l'Url http://www.teatro7.com/backoffice/aggiorna.php

Come si vede ho messo un bottone AGGIORNA a fianco di ogni voce all'interno del ciclo WHILE, premendo il quale si richiama quella che per me era una semplice funzione di UPDATE... ma non funziona! non solo, ma se echo l'id della lezione (che secondo me dovrebbe essere riga per riga quello che riprendo nello script con il classico $_POST) in realta' risulta sbagliato...

Cosa sbaglio?

Grazie
 
Il tuo problema è che hai fatto un unico form html che racchiude al suo interno tutti i vari tasti prodotti dal while mentre devi creare un form nuovo per ogni record che il while ti stampa fuori.

Se dopo questo accorgimento non funziona ancora ti invito a postare il codice della pagina, poiché in questo caso potrebbero esserci degli errori nello script in PHP.
 
Il tuo problema è che hai fatto un unico form html che racchiude al suo interno tutti i vari tasti prodotti dal while mentre devi creare un form nuovo per ogni record che il while ti stampa fuori.

Se dopo questo accorgimento non funziona ancora ti invito a postare il codice della pagina, poiché in questo caso potrebbero esserci degli errori nello script in PHP.

Scusa per il lungo silenzio, ma ho dovuto occuparmi di un altro progetto. Ora sono tornato su questo e ho seguito il tuo consiglio. Funziona.
Pero' incorro in un altro problema... e so che si puo' risolvere ma non ricordo come.
Prima di effettuare la ricerca che da vita al ciclo while di cui sopra, chiedo di impostare un mese e un anno in un altro form a inizio pagina. Prima della funzione che contiene il ciclo while, definisco due variabili, $annoP e $meseP, poi all'interno della funzione recupero con _POST $mesepartenza e $annopartenza dal form poi richiamo le due variabili con global e infine pongo le due variabili globali uguali a quelle recuperate dal form, cosi':
PHP:
$meseP = "";
$annoP = "";

function mostra() {
	
	$mesePartenza = $_POST['mesePartenza'];
	global $meseP;  $meseP = $mesePartenza;	
	$annoPartenza = $_POST['annoPartenza'];
	global $annoP; $annoP = $annoPartenza;
...

Ora io pensavo che i valori di $meseP e $annoP potessero essere richiamati e utilizzati in altre funzioni all'interno della pagina. Invece pare che si perdano i valori per strada... e non sono riuscito a capire dov'e' l'errore.
Se serve, l'url della pagina è http://www.teatro7.com/backoffice/aggiorna.php

grazie per ogni aiuto
 
Ultima modifica di un moderatore:
Ciao, non ti preoccupare per gli impegni, è normale avere le proprie priorità.
Quanto al problema, hai provato a fare semplicemente così:
PHP:
#> Se i vari valori in _POST esistono e non sono vuoti li usiamo per riempire le varie variabili
$meseP = !empty($_POST['mesePartenza'])? $_POST['mesePartenza'] : "";
$annoP = !empty($_POST['annoPartenza'])? $_POST['annoPartenza'] : "";

function mostra() {
	global $meseP;
	global $annoP;

	$mesePartenza = $meseP;
	$annoPartenza = $annoP;

#> ...


ps: quando esponi del codice php, usa i tag di formattazione per PHP, torna più comodo ;)
 
Ultima modifica:
Le variabili globali non dovrebbero restare "vive" durante la sessione?

No assolutamente, finita l'esecuzione nel momento in cui invii il dato in post terminano.
Se ti occorre una sessione allora usa il session_start() ad inizio script e riempi il vettore $_SESSION, che oltre a conservare i dati durante la sessione utente è anche superglobale.
 
Ultima modifica di un moderatore:
Fammi sapere se risolvi ;)

Niente... non ne esco!
Ho cercato di semplificare al massimo il mio ragionamento:
- Inizializzo le due variabili di sessione ponendole = ""
- Premendo il tasto del primo form richiamo la funzione mostra
- Recupero i due valori con $_POST
- Inserisco due IF: se la variabile di sessione è "" allora attribuisco il valore recuperato con $_POST, else faccio il contrario, cioe' attribuisco alle due variabili interne alla funzione il valore delle variabili di sessione.

E fino a qui tutto bene (righe da 65 a 80)
A questo punto eseguo la ricerca nel db, espongo i risultati nei diversi form - uno per ogni record.
Mi trovo davanti una pagina che riporta tutte le lezioni del mese selezionato, pronte per le eventuali variazioni.
Effettuo una variazione qualunque, e premo il pulsante AGGIORNA.
I record vengono aggiornati, ma quando richiamo la funzione mostra per mostrare ancora lo stesso mese con le variazioni apportate, ecco le variabili di sessione sono vuote!
Le variabili di sessione esistono fino alla riga 199.
Poi spariscono.
Non riesco a capire perche'. Non ho chiuso il browser, nemmeno la pagina. Eppure le variabili si azzerano.
Qualche idea?
Sono alla frutta...
 
Ok, proviamo ad escludere prima la causa più banale: ad inizio script, subito dopo l'apertura del tag php, hai istanziato session_start() ?
PHP:
<?php
session_start();

#> ... etc

Poi, in caso ancora non funzioni (oppure hai già agito come indicato) mi mostreresti come hai modificato il codice?
 
Ok, proviamo ad escludere prima la causa più banale: ad inizio script, subito dopo l'apertura del tag php, hai istanziato session_start() ?
PHP:
<?php
session_start();

#> ... etc

Poi, in caso ancora non funzioni (oppure hai già agito come indicato) mi mostreresti come hai modificato il codice?

Allora...
Per cominciare si, ho iniziato con SESSION_START().
Poi per prima cosa nel <body> c'e' il primo form che serve a selezionare il mese e l'anno da visualizzare per le modifiche. Il tasto di tipo SUBMIT richiama, una volta premuto, la funzione 'mostra'. Appena prima di
PHP:
 if (isset($_POST['vedi']))
ho dichiarato le due variabili di sessione così:
PHP:
 $_SESSION['meseP'] = "";
  $_SESSION['annoP'] = "";

La funzione 'mostra' parte così:
PHP:
function mostra() {
	
	$mesePartenza = $_POST['mesePartenza'];
	$annoPartenza = $_POST['annoPartenza'];  	
	
	if ($_SESSION['meseP'] == ""){$_SESSION['meseP'] = $mesePartenza;}else{$mesePartenza = $_SESSION['meseP'];}
	if ($_SESSION['annoP'] == ""){$_SESSION['annoP'] = $annoPartenza;}else{$annoPartenza = $_SESSION['annoP'];}
	
	 echo "dentro mostra ecco le due variabili: $mesePartenza e $annoPartenza";
	 
	 
	if($annoPartenza == "") {
		echo "Devi indicare almeno un anno per la visualizzazione della lezioni";
	}elseif ($mesePartenza == ""){
		echo "Devi indicare il mese che vuoi visualizzare";
	}else{
// ...
E se tutto va bene mi connetto al db, seleziono le lezioni di quel mese e anno, e le elenco con il ciclo WHILE sulla pagina.
Ogni lezione selezionata è contenuta in un form, ciascuno con un bottone che, premuto, richiama la funzione 'aggiorna'.

Alla fine del ciclo WHILE:
PHP:
<?php
	 
     $i++;

 }
		
	}
}	
/* qui termina il ciclo WHILE */

/* aggiornamento delle singole voci */

if (isset($_POST['aggiornami'])){
aggiorna();}



function aggiorna(){

$mesepart = $_SESSION['meseP'];
$annopart = $_SESSION['annoP'];

$idok = $_POST['idlezione'];	
$chefok = $_POST['chef'];
$titolook = $_POST['titolo'];
$sottotitolook = $_POST['sottotitolo'];
$dettagliok = $_POST['dettagli'];
$eurook = $_POST['euro'];

A questo punto mi connetto nuovamente al db, eseguo un UPDATE della lezione variata e poi richiamo nuovamente la funzione 'mostra' per ri-visualizzare la stessa selezione di mese e anno dell'inizio.

Solo che a questo punto le variabili di sessione sono NULL (ho verificato inserendo un echo di SESSION_ENCODE() in punti diversi della pagina.
Le variazioni al db vengono eseguite correttamente.
Se vuoi vedere la pagina in azione : http://www.teatro7.com/backoffice/aggiorna.php
E puoi selezionare gennaio, febbraio o marzo 2014 (e anche cambiare qualcosa per verificare che le variazioni avvengono regolarmente, se vuoi)

Grazie per l'aiuto
 
RISOLTO!
Non capisco bene come mai, ma aggiungendo all'interno di ogni form del ciclo WHILE:
PHP:
<? $mesePartenza = $_SESSION['meseP'];
	$annoPartenza = $_SESSION['annoP'];
	?>
e poi
PHP:
<input type="hidden" name="mesePartenza" value="<? echo $mesePartenza; ?>" />
        <input type="hidden" name="annoPartenza" value="<? echo $annoPartenza; ?>" />

Tutto funziona a meraviglia!

Grazie comunque per l'aiuto
(tanto non finisce qui... ora devo affrontare le prenotazioni delle lezioni!)

A presto
 

Discussioni simili