2010-07-27 10 views
11

Est-il possible d'utiliser une variable de session, puis de la désactiver directement après?Effacer la variable de session après utilisation

Exemple:

//==== 
//Process Form 
if ($_POST['Submit']) { 
    $update = $userSettings->update($_POST); 

    //If there are form errors 
if (!$update) { 
     //Load the errors into an array 
     $errors = $update[1]; 
    } else { 
     //Set the session 
     $_SESSION['showUpdated'] = true; 

     //Redirect to this page 
     header("Location: http://www.mysite.com/settings"); 
    } 
} 

//================== 

if ($_SESSION['showUpdated']) { 
echo "Settings Updated"; 
    unset($_SESSION['showUpdated']; 
} 

Ainsi, après l'envoi du formulaire, s'il n'y a pas d'erreurs:

  • ensemble une session pour dire la soumission du formulaire était correct
  • Recharger la page (à empêcher soumises à nouveau des données POST)
  • Si la variable de session 'showupdated' est défini, affiche le message "Mise à jour"
  • Désactiver la variable de session (nous ne verrons donc pas le message lors de la prochaine actualisation)

Actuellement, le problème est, si vous supprimez la variable de session immédiatement après; C'est comme si vous l'aviez désactivé avant la partie "si existe".

Des solutions? Est-ce même la meilleure façon de le faire?

Merci beaucoup!

Répondre

3

Cela semble devoir fonctionner. Assurez-vous d'appeler session_start() avant d'utiliser la session, et toujours exit() ou die() après un en-tête de redirection.

Je réalise ce que vous faites un peu différemment. Je garde un élément 'message' dans la session. Je collerai du texte comme «Vos données ont été sauvegardées», des messages d'erreur, etc. Puis, sur chaque page (en fait dans une classe de modèle de page), je vérifie si le $_SESSION['message'] est défini et non vide. S'il y a quelque chose là, j'affiche le message et place la valeur à une chaîne vide ou nulle.

+0

sortie() ou mourir() était ce qui me manquait, merci! – steveneaston

1

Vérifiez simplement s'il existe. C'est sûr de faire avant qu'il a été défini et vous dira votre réponse après qu'il a été défini.

if(!empty($_SESSION['showUpdated'])) { 
+1

Existe n'est pas une fonction, voulez-vous dire isset? –

+0

Ouais, comme ça. Pouvez-vous dire que cela fait un petit moment que j'ai codé en PHP? Merci @Anders S – TheJacobTaylor

+0

Je suis allé avec! Empty car, si je ne me trompe pas, il ne lancera aucun avertissement, erreur ou exception si le tableau ou la clé n'existe pas. – TheJacobTaylor

3

Je le fais de temps en temps. Je n'ai jamais de problèmes avec ça. Mais ce que j'ajouterais à la vôtre est un appel de fonction exit() après la redirection d'en-tête.

EDIT: La raison pour le exit() est qu'il va l'empêcher de traiter tout autre code et éliminera la possibilité de désactiver avant que vous vouliez vérifier après la redirection.

2

L'appel d'en-tête sans sortie après poursuivra l'exécution de la page. En utilisant cela à la place, il devrait tuer la page et ne pas supprimer la variable de session sur le même appel de page.

0

Ou vous pouvez simplement le définir sur false.

 
if ($_SESSION['showUpdated']) { 
echo "Settings Updated"; 
$_SESSION['showUpdated'] = false; 
} 

Et il semble que vous utilisez la version plus petite de PHP que 5.3, parce que dans 5.3 vous aurez remarqué lorsque vous utilisez la valeur non initialisée. Donc, vous devriez utiliser la fonction isset:

 
if (isset($_SESSION['showUpdated']) && $_SESSION['showUpdated']) { 
echo "Settings Updated"; 
$_SESSION['showUpdated'] = false; 
} 
23

J'ai remarqué une petite erreur dans l'exemple original qui pourrait causer d'autres problèmes.

unset($_SESSION['showUpdated']; 

doit être

unset($_SESSION['showUpdated']); 

Non compris cette fin ) dans le unset provoquera une erreur.

Questions connexes