Buongiorno a tutti,
quadro generale: ho scritto il sw di gestione di backoffice per una scuola di cucina.
Il calendario è pubblicato su web con una pagina dinamica che pesca i dati dalle tabelle "calendario" e "utentiscuola".
La tabella "calendario" contiene i dati delle lezioni (id lezione, posti disponibili, titolo, eccetera), la tabella "utentiscuola" i dati delle iscrizioni (id lezione, posti prenotati, anagrafica varia, eccetera).
Ogni volta che si inserisce un a nuova prenotazione i posti disponibili di "calendario" vengono scalati.
Ora sto cambiando la pagina di variazione/annullamento delle iscrizioni, che non avevo mai sviluppato in pieno.
La prima parte del codice prevede l'inserimento del codice lezione su cui si vuole intervenire.
Inserendo questo codice si ottiene l'elenco dei partecipanti.
Ecco il codice:
Il div "divdestra" richiama per comodità l'elenco dei corsi con i codici lezione.
Premendo il pulsante del form richiamo la funzione "mostra":
Cliccando sul pulsante di modifica della riga richiamo la funzione "aggiorna":
Ed è qui che ho riscontrato il problema.
Come si vede, all'inizio della funzione "mostra" valorizzo la variabile di sessione "primalezione" che mi serve poi più avanti per verificare se la prenotazione viene spostata ad un'altra lezione.
Verso la fine della funzione "aggiorna" ho inserito due echo per verificare se le variabili che utilizzo nel if sono corrette e vedo che $_SESSION['primalezione'] è vuota.
In breve (si fa per dire, vista la lunghezza di questo post) come mai è vuota?
quadro generale: ho scritto il sw di gestione di backoffice per una scuola di cucina.
Il calendario è pubblicato su web con una pagina dinamica che pesca i dati dalle tabelle "calendario" e "utentiscuola".
La tabella "calendario" contiene i dati delle lezioni (id lezione, posti disponibili, titolo, eccetera), la tabella "utentiscuola" i dati delle iscrizioni (id lezione, posti prenotati, anagrafica varia, eccetera).
Ogni volta che si inserisce un a nuova prenotazione i posti disponibili di "calendario" vengono scalati.
Ora sto cambiando la pagina di variazione/annullamento delle iscrizioni, che non avevo mai sviluppato in pieno.
La prima parte del codice prevede l'inserimento del codice lezione su cui si vuole intervenire.
Inserendo questo codice si ottiene l'elenco dei partecipanti.
Ecco il codice:
PHP:
<div id="divsinistra" class="testoPiccolo">
<p><? echo "$cod"; ?>, <br>
consulta l'elenco delle lezioni pubblicate e indica il codice della lezione per la quale vuoi modificare l'elenco dei partecipanti:</p>
<br>
<hr>
<br>
<form name="modulo" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Codice lezione: <input name="idlezione" type="text" size="5" onBlur="isnum(this)" /> <br><br>
Oppure inserisci la mail di un cliente per visualizzare l'elenco delle lezioni a cui è iscritto:<br><br>
Email cliente: <input name="mailcliente" type="text" size="50" />
<br><br><br>
<p align="right"><input type="submit" name="vedi" value=" OTTIENI L'ELENCO DESIDERATO "></p>
</form>
<br /><br />
</div>
<div id="divdestra">
<iframe src="../corsi_elenco.php" width="100%" height="600px" frameborder="0" ></iframe>
</div>
<div class="keepclear"></div>
Premendo il pulsante del form richiamo la funzione "mostra":
PHP:
if (isset($_POST['vedi'])){
mostra();
}
function mostra(){
// recupero il codice della lezione e la registro come variabile di sessione x riutilizzarla dopo
$lez = $_POST['idlezione'];
$_SESSION['primalezione'];
if ($lez == "") {
$lez = $_SESSION['primalezione'];
}
echo "codice lezione ".$lez;
// oppure recupero la mail da ricercare e la registro come variabile di sessione per riutilizzarla dopo
$posta = $_POST['mailcliente'];
$_SESSION['maildelcliente'];
// Se si è immasso il codice della lezione estraggo tuti i partecipanti
if ($lez) {
include 'connect.php';
$query = ("SELECT * FROM utentiscuola WHERE id_lezione='$lez'");
$vai = mysql_query($query);
$righe = mysql_num_rows($vai);
$introduzione = "Risultano ".$righe." record registrati nella lezione ".$lez;
}
// Se si è immassa la mail estraggo tutte le iscrizioni effettuate con quella mail
if ($posta) {
include 'connect.php';
$query = ("SELECT * FROM utentiscuola WHERE email='$posta'");
$vai = mysql_query($query);
$righe = mysql_num_rows($vai);
$introduzione = "Risultano ".$righe." registrazioni contenenti la mail ".$posta;
}
?>
<p><? echo "$introduzione"; ?><br>
Effettua i cambiamenti desiderati e clicca su <span class="rosso">AGGIORNA</span> <b>per ogni riga modificata</b>
<hr>
</p>
<?
// Elenco di quanto estratto dal db
$i = 0;
while ($righe > $i) {
$cod = mysql_result($vai, $i, "id_utente");
$nome = mysql_result($vai, $i, "nome");
$cognome = mysql_result($vai, $i, "cognome");
$email = mysql_result($vai, $i, "email");
$telefono = mysql_result($vai, $i, "telefono");
$transazione = mysql_result($vai, $i, "idTransazione");
$lez2 = mysql_result($vai, $i, "id_lezione");
$pagamento = mysql_result($vai, $i, "pagamento");
$postiprenotati = mysql_result($vai, $i, "postiprenotati");
$note = mysql_result($vai, $i, "note");
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<tr>
<td><? echo $cod; ?></td>
<td><input type="text" name="nome" value="<? echo $nome; ?>" size="15"></td>
<td><input type="text" name="cognome" value="<? echo $cognome; ?>" size="15"></td>
<td><input type="text" name="email" value="<? echo $email; ?>" size="20"></td>
<td><input type="text" name="telefono" value="<? echo $telefono; ?>" size="15"></td>
<td><input type="text" name="transazione" value="<? echo $transazione; ?>" size="25" readonly="readonly"></td>
<td><input type="text" name="pagamento" value="<? echo $pagamento; ?>" size="18"></td>
<td><input type="text" name="lezione" value="<? echo $lez2; ?>" ></td>
<td align="center"><input type="text" name="postiprenotati" value="<? echo $postiprenotati; ?>" size="5"></td>
</tr>
<tr>
<td colspan="9">Note: <input name="note" size="100" value="<? echo "$note"; ?>"></td>
</tr>
<tr>
<td colspan="3" align="center" class="rosso">
<!-- PULSANTE DI MODIFICA -->
<input type="hidden" name="riga" value="<? echo $cod; ?>">
<input name="aggiornamelo" class="rosso" type="submit" value=" AGGIORNA LA RIGA <? echo $cod; ?> ">
</td>
<td colspan="6" align="center" class="rosso">
<!-- PULSANTE DI ELIMINAZIONE -->
<input class="rosso" type="submit" value=" ELIMINA LA RIGA <? echo $cod; ?> " name="butta">
</td>
</tr>
<tr>
<td colspan="9"><hr></td>
</tr>
</form>
<?
$i++;
}
}
PHP:
if (isset($_POST['aggiornamelo'])){aggiorna();}
function aggiorna(){
$riga = $_POST['riga'];
$lez2 = $_POST['lezione'];
$nom = $_POST['nome'];
$cog = $_POST['cognome'];
$ema = $_POST['email'];
$tel = $_POST['telefono'];
$tra = $_POST['transazione'];
$pag = $_POST['pagamento'];
$pos = $_POST['postiprenotati'];
$not = $_POST['note'];
//recupero i posti disponibili prima della variazione
$lezione_originale = $_SESSION['primalezione'];
include 'connect.php';
$postidisponibili = ("SELECT posti FROM calendario WHERE id_lezione = '$lezione_originale'");
$esegui = mysql_query($postidisponibili);
$arr = mysql_fetch_array($esegui);
$postidisp_attuali = $arr['posti'];
$old = $_SESSION['old'] = $postidisp_attuali;
// recupero il numero di posti e la lezione prenotata in $riga (che corrisponde all'id utente unico della tabella utentiscuola)
$perposti = ("SELECT * FROM utentiscuola WHERE id_utente = '$riga'");
$si = mysql_query($perposti);
$arr2 = mysql_fetch_array($si);
$postiprenot_originali = $arr2['postiprenotati'];
$lez_originale = $arr2['id_lezione'];
mysql_close();
// Se lezione e posti prenotati non sono cambiati aggiorno il db utentiscuola e basta
echo "lezione originale ".$_SESSION['primalezione']." e lezione da form: ".$lez2."<br>";
echo "posti prenotati originali ".$postiprenot_originali." e posti da form: ".$pos;
if ($lezione_originale == $lez2 && $postiprenot_originali == $pos) {
echo "non sono cambiati ne lezione ne posti";
$richiesta = ("UPDATE utentiscuola SET nome = '$nom', cognome = '$cog', email = '$ema', telefono = '$tel', username = '$ema', idTransazione = '$tra', id_lezione = '$lez2', pagamento = '$pag', postiprenotati = '$pos', note = '$not' WHERE id_utente = '$riga' ");
$fai = mysql_query($richiesta);
mostra();
}
}
Come si vede, all'inizio della funzione "mostra" valorizzo la variabile di sessione "primalezione" che mi serve poi più avanti per verificare se la prenotazione viene spostata ad un'altra lezione.
Verso la fine della funzione "aggiorna" ho inserito due echo per verificare se le variabili che utilizzo nel if sono corrette e vedo che $_SESSION['primalezione'] è vuota.
In breve (si fa per dire, vista la lunghezza di questo post) come mai è vuota?