Est-il possible d'utiliser une variable de session, puis de la supprimer directement après?
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'];
}
Donc, après la soumission du formulaire, s'il n'y a pas d'erreur:
Actuellement, le problème est que, si vous annulez la variable de session immédiatement après; C'est comme si vous l'aviez dés-défini avant la partie "si existe".
Des solutions? Est-ce même la meilleure façon de le faire?
Merci beaucoup!
Cela ressemble à cela devrait fonctionner. Assurez-vous d'appeler session_start () avant d'essayer d'utiliser la session et quittez toujours () ou die () après un en-tête de redirection.
J'accomplis ce que tu fais un peu différemment. Je garde un élément 'message' dans la session. Je vais coller du texte comme "Vos données ont été enregistrées", des messages d'erreur, etc. Ensuite, 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, j'affiche le message et définit la valeur sur une chaîne vide ou null.
J'ai remarqué une petite erreur dans l'exemple d'origine qui pourrait causer d'autres problèmes.
unset($_SESSION['showUpdated'];
doit être
unset($_SESSION['showUpdated']);
Ne pas inclure cette fin )
dans la unset
provoquera une erreur.
Je fais ça de temps en temps. Je n'ai jamais de problèmes avec ça. Mais ce que je voudrais ajouter au vôtre, c’est un appel à la fonction exit()
après la redirection de l’en-tête.
EDIT: La raison pour exit()
est qu’elle l’empêchera de traiter du code supplémentaire et éliminera la possibilité de réinitialisation avant que vous ne souhaitiez vérifier après la redirection.
L'appel en-tête sans sortie après continuera à exécuter la page.
header("Location: http://www.mysite.com/settings");
exit;
L’utiliser à la place devrait tuer la page et ne pas annuler la variable de session sur le même appel de page.
Il suffit de vérifier pour voir s'il existe. Cela est sûr avant de le définir et vous communiquera votre réponse une fois celle-ci définie.
if(!empty($_SESSION['showUpdated'])) {
Ou vous pouvez simplement le définir sur false.
if ($ _SESSION ['showUpdated']) { echo "Paramètres mis à jour"; $ _SESSION ['showUpdated'] = false; }
Et il semble que vous utilisiez une version plus petite de PHP que la version 5.3, car dans la version 5.3, vous remarquerez que vous utilisez une valeur non initialisée. Donc, vous devriez utiliser la fonction isset:
if (isset ($ _SESSION ['showUpdated']) && $ _SESSION ['showUpdated']) { echo "Paramètres mis à jour"; $ _SESSION ['showUpdated'] = faux; }