[PHP] variabile di sessione si azzera ricaricando la pagina?

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
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:
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>
Il div "divdestra" richiama per comodità l'elenco dei corsi con i codici lezione.
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++;
                }
            
        }
Cliccando sul pulsante di modifica della riga richiamo la funzione "aggiorna":
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();
                }


            
        }
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?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
intanto non vedo da nessuna parte session_start()
ogni pagina che usa le sessioni deve avere alla prima riga tale funzione
PHP:
<?php
session_start();
//eccc php e/o html
?>
poi cosa è
$lez = $_POST['idlezione'];
$_SESSION['primalezione']; <- ???
e cosi in altro punto simile
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Ciao,
session_start() è la prima riga della pagina, come vedi non ho postato la pagina completa.
La seconda domanda sottolinea quanto sono pirla... avevo scritto il nome della variabile di sessione dicendomi che l'avrei valorizzata dopo... mai fatto...
Comunque fatte le dovute integrazioni
PHP:
$_SESSION['primalezione'] = $lez;
e
Codice:
$_SESSION['maildelcliente'] = $posta;
quando l'esecuzione del codice arriva all'interno dell'ultimo (per ora) if
Codice:
if ($lezione_originale == $lez2 && $postiprenot_originali == $pos) {
                    include 'connect.php';
                    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();
                }
e mi richiama nuovamente la funzione "mostra", non si visualizza nulla.
Per controllare cosa arriva a quel punto, ho messo ancora due echo, così:
PHP:
function mostra(){
            echo $_SESSION['primalezione'];

            // recupero il codice della lezione e la registro come variabile di sessione x riutilizzarla dopo
            
            $lez = $_POST['idlezione'];
            $_SESSION['primalezione'] = $lez;

            if ($lez == "") {
                $lez = $_SESSION['primalezione'];
            }

echo "codice lezione ".$_SESSION['primalezione'];
            // oppure recupero la mail da ricercare e la registro come variabile di sessione per riutilizzarla dopo

            $posta = $_POST['mailcliente'];
            $_SESSION['maildelcliente'] = $posta;

            // 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++;
                }
            
        }
Il primo echo mi riporta correttamente il codice lezione, mentre il secondo è vuoto.
Ovviamente dipende da qui:
PHP:
$lez = $_POST['idlezione'];
            $_SESSION['primalezione'] = $lez;
perchè al secondo giro $lez è ovviamente vuoto, ma non riesco a capire come uscirne.
Per ora.
Intanto ci ragiono a mente fresca, ma se viene in mente la soluzione a qualcuno... grazie|
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Rieccomi.
Cambiando l'inizio della funzione "mostra" in questo modo
PHP:
$lez = $_POST['idlezione'];

            if ($lez) {
                $_SESSION['primalezione'] = $lez;
            }
            

            if ($_SESSION['primalezione']) {
                $lez = $_SESSION['primalezione'];
            }
FUNZIONA!
Alla prossima...
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Passare variabile di sessione con metodo GET PHP 10
U passare una variabile di sessione da pagina di joomla a pagina php Joomla 3
E Inviare variabile a PHP da ciclo in JS Javascript 0
A inserire variabile php colore in div html PHP 2
C [RISOLTO]Inserimento variabile php in input html PHP 20
F Passare una variabile php dal DB mysql alla pagina PHP 3
S [PHP] Rendere visibile variabile di un costrutto if in un altro costrutto if PHP 1
T PHP: variabile che cambia ogni 5 giorni... PHP 3
Tommy03 Variabile PHP per impostare una proprietà CSS PHP 2
L [PHP] Passare variabile PHP 3
J Passaggio variabile tra 2 file php PHP 15
Tommy03 Variabile PHP dentro a JQuery PHP 3
A [PHP] Scopo di una variabile PHP 4
M [PHP] Salvare campo di una tabella in una variabile PHP 14
B [PHP] Valore variabile non riconosciuto PHP 1
AMONRA75 [PHP] passare una variabile in una finestra MODAL PHP 1
P [PHP] $_GET non preleva variabile nell’URL PHP 4
A Php variabile immagine inesistente PHP 4
Shyson [PHP] Personalizzare variabile PHP 0
Monital Funzione php e campo database come variabile PHP 6
V [PHP] Variabile modificata in un if non mantiene quel valore PHP 5
K [PHP] Paginazione Wordpress: passare variabile PHP 6
A [PHP] Passaare una variabile ad un PHP 2
A [PHP] Non prende variabile $provincia ma tutte le altre si PHP 6
P [PHP] Query con variabile PHP 2
napuleone scrivere in un file <?php $variabile PHP 1
A [PHP] Widget Meteo con località variabile PHP 0
paloppa [PHP] Dubbio print variabile PHP 27
paloppa [PHP] Dubbio valore variabile PHP 16
B Scrivere in una casella di testo una variabile PHP PHP 9
T [PHP] passare una variabile in una finestra MODAL di bootstrap PHP 3
M [PHP] Mantenere variabile con datagrid nella pagina 2 PHP 1
L [PHP] Problema creazione query a numero di parametri variabile PHP 6
P Colore testo variabile PHP PHP 5
Occhioverde [PHP] Incrementare variabile al click di un pulsante PHP 5
elpirata [PHP] Stampare i valori di una variabile scritta su più righe PHP 1
T [php]Variabile in textbox via post PHP 9
bubino8 [PHP] Variabile da multipla Checkbox PHP 2
giancadeejay [PHP] Variabile volubile PHP 4
M [PHP] Includere solo il risultato di una variabile PHP 2
G [Javascript] jQuery PHP MySql - inserire variabile nel DataBase Javascript 8
Metazoo Recuperare variabile php da javascript senza aggiornare pagina PHP 5
L variabile php per html PHP 2
gandalf1959 [PHP] Con GET perdo un pezzo di variabile PHP 7
S [PHP] Aiuto! Non riesco a richiamare una variabile PHP 2
U [PHP] Parse error: syntax error, unexpected variabile (T_VARIABLE) PHP 8
M [PHP] Errore nell' assegnazione della variabile $this->id su una funzione PHP 1
cosmin Utilizzare una variabile php in CREATE TABLE mysql. PHP 2
G Ciclo if php per far comparire un pulsante solo nel caso in cui una variabile sia 0 PHP 2
C E' possibile assegnare all' attributo name di un form html il nome di una variabile php? PHP 6

Discussioni simili