problema con aggiornamento sessione e submit

Ciao a tutti,

ho un piccolo problema con un form per aggiornare un form. Ricevo delle variabili in sessione tra cui l'email, l'utente in questa pagina (che ho ridotto al minimo per farvi vedere l'esempio) aggiorna la propria mail, fatto questo faccio aggiornare la sessione con la nuova mail. Il problema è che se clicco sulla submit anche se ho messo il controllo del campo vuoto mi aggiorna la sessione e mette vuoto e non capisco come mai.. posto il codice

<?php
session_start();
require_once('config.php');
require_once('db_vars.inc');
?>

<!-- codice html -->

<?php
$user_email=$_POST['user_email'];
if( isset($_POST['submit']) && (trim($_POST['submit']) == "Modifica indirizzo email") ) {
                                                                            
    if($_POST['user_email'] == "")
    {
        echo "Attenzione, email vuota.";
    }
elseif((!isset($_POST['user_email'])) || (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $user_email)))
{
  echo "Attenzione, formato email non valido.";
}
else{
    $update=mysql_query("update tbl_users SET user_email='$user_email' WHERE user_id='$_SESSION[user_id]'"); 
    $_SESSION['user_email'] = $user_email;   // aggiorno la sessione con la nuova mail
    }
}
?>

<form action="<?php print $_SERVER['PHP_SELF']?>" method="post">


<div>
<input type="text" name="user_email">

<br />
<input type="submit" value="Modifica indirizzo email">
</div>

</form>

<?php print $_SESSION['user_email']; ?>
inviato 8 anni fa
Falco72
X 0 X

Ciao,

il consiglio che posso darti è di stampare il valore della variabile $user_email dopo l'assegnazione della variabile $_POST e verificare che questa non sia vuota.

:bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

ciao Zeta, fatto e risulta vuota... infatti non so come risolverla e perchè fa questo... dato che eredita la variabile dalla pagina precedente e poi c'è il controllo di campo vuoto che dovrebbe evitare questo. :-\

risposto 8 anni fa
Falco72
X 0 X

Ciao,

prova sostituire $_POST con $HTTP_POST_VARS e fare un print_r di quest'ultimo.

:bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

 if($_POST['user_email'] == "") serve a vedere se è vuoto? io solitamente uso if (isset ($var) && empty($var))! prova anche così e vedi che succede :)

inoltre nel caso di stringhe e array potresti usare rispettivamente strlen($stringa)==0 e count($array)==0. ovviamente se danno 0, si tratta di stringhe o array vuoti.

risposto 8 anni fa
larchitetto
modificato 8 anni fa
X 0 X

stessa cosa... stesso problema!!! :buck:

risposto 8 anni fa
Falco72
X 0 X

ehm, scusami, potresti ricapitolare a parole semplici quello che vorresti fare e che problema logico ti ritrovi?

vediam se riusciamo a risolvere xD

risposto 8 anni fa
larchitetto
X 0 X
<?php
else{
    $update=mysql_query("update tbl_users SET user_email='$user_email' WHERE user_id='$_SESSION[user_id]'"); 
    $_SESSION['user_email'] = $user_email;   // aggiorno la sessione con la nuova mail
    }
}
?>

altra cosa: ma non potresti usare $user_email come associazione di $_POST, così come hai fatto precendentemente??

inoltre, per debuggare a fondo la tua applicazione, utilizza var_dump($var), meglio se fai un echo, delle variabili nei punti in cui ti serve che contenuto hanno... <.<

infine un blocco di if-else dentro un if non è granchè...

bene: detto questo riguardo il tuo codice e spero di trovare qualcosa di pià sostanzioso XD

ciaoo

risposto 8 anni fa
larchitetto
modificato 8 anni fa
X 0 X

ciao,

prova a mettere nel bottone un name da verificare nella condizione:

tu hai scritto:

<?php
if( isset($_POST['submit']) && (trim($_POST['submit']) == "Modifica indirizzo email") ) {
[...]
<input type="submit" value="Modifica indirizzo email">
[...]
?>

ebbene, POST['sumbit'] sarà sempre non definito (non vuoto) poichè $_POST['submit'] non esiste in quanto nessun elemento della form ha quel name! conterrà invece un vettore di un elemento di tipo stringa con associazione "user_email" e valore pari a quello inserito dall'utente nella form.

il primo if (quello citato) sarà sempre falso, e allora, inserendo qualsiasi cosa (anche un indirizzo email valido) ti darà sempre una risposta che non ti aspetti.

io ho provato il codice, sperando di aver operato correttamente, se vuoi verificare quanto sto scrivendo, alla fine del blocco del "mega if", metti un "else echo("quello che ti pare");": se ti apparirà in output proprio ques'echo in qualsiasi caso, mi sa che avremo trovato il problema del tuo script; altrimenti cercheremo ancora, ok? XD

fammi sapere =D

risposto 8 anni fa
larchitetto
modificato 8 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda