[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
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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.
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
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:

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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:

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
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:

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
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...
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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?
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
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
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
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
Autore Titolo Forum Risposte Data
L update tabelle in php mysql [risolto] PHP 6
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 6
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
marino51 [Risolto]videochat di messenger ha smesso di funzionare sul telefonino Smartphone e tablet 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15
T [Photoshop] Problema creazione pennello personalizzato [RISOLTO] Photoshop 3

Discussioni simili