[RESOLU] Redirection, variable SESSION

Eléphant du PHP | 337 Messages

14 févr. 2016, 04:07

Bonjour à tous,

Pour éviter les refresh malencontreux sur une url pleine de variables GET (et ce même si je fais des tests drastiques sur toutes les variables en question), je voudrais faire une redirection, qui emmène l'utilisateur vers un message de confirmation (ou d'infirmation), qui lui même permet de revenir vers la page de base.

Je me suis donc dit, tout bêtement, qu'avec un script dans ce genre-là, ça devrait fonctionner :

Code : Tout sélectionner

if(conditions pour valider) { // Phase de tests if(conditions) { // Ici, des tas de tests $_SESSION['msg_erreur'] = "Un message d'erreur"; $AJOUT = FALSE; header('Location: mapage.php'); } else { $AJOUT = TRUE; } // Tests ok, on confirme if($AJOUT == TRUE) { // Message de confirmation, puis redirection vers la même page, // avec une URL qui n'est pas farcies de variables GET $_SESSION['ajout_ok'] = TRUE; header('Location: mapage.php'); } } if($_SESSION['ajout_ok'] == TRUE) { echo "Message de confirmation"; $_SESSION['ajout_ok'] = FALSE; } else { if(!empty($_SESSION['msg_erreur'])) { echo $_SESSION['msg_erreur']; $_SESSION['msg_erreur'] = ""; } // ET AFFICHAGE DU CONTENU NORMAL ICI }

Dans mon cerveau moite, ça fonctionnait, sauf que ça fonctionne pas : les messages (que ce soit d'erreur ou de confirmation) ne s'affichent pas : il y a redirection immédiate.

Quelqu'un voit-il mon erreur ?

Merci de votre aide !

Eléphant du PHP | 337 Messages

16 févr. 2016, 03:13

Je retente ma chance en simplifiant le code (c'est un peu rebutant, faut avouer...)

Code : Tout sélectionner

session_start(); if($_GET['action'] == 1) { $_SESSION['msg_erreur'] = "Un message d'erreur"; header('Location: test.php'); } if(!empty($_SESSION['msg_erreur'])) { echo $_SESSION['msg_erreur']; unset($_SESSION['msg_erreur']); } echo "<a href='test.php?action=1'>LIEN</a>";

Avec ce code, comment se fait-il qu'en cliquant sur mon lien je n'obtienne pas le message d'erreur ? J'ai beau chercher, je pige pas :-k

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

16 févr. 2016, 09:25

Bonjour,

header("location...") doit toujours être immédiatement suivi d'un exit; pour éviter d'envoyer du code HTML, toujours, aucune exception. :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 337 Messages

16 févr. 2016, 21:33

Eeeeeh ben, ça m'en a fait des header('location') à rattraper tout ça...
Merci @rthur, je me coucherai moins con ce soir :D

Eléphant du PHP | 337 Messages

17 févr. 2016, 14:18

Je "dé-résous" ce sujet, parce que depuis que j'ai mis des exit après chaque header location, j'ai des trucs bizarres un peu partout...

Par exemple, dans le code suivant :

Code : Tout sélectionner

// Suppression de la clef unset($_SESSION['panier'][$_ID]); // On réindexe le tableau s'il reste des articles, if(sizeof($_SESSION['panier']) > 0) { $_SESSION['panier'] = array_values($_SESSION['panier']); } // Sinon, on supprime tout else { unset($_SESSION['panier']); } header('Location: panier.php'); exit;
...sans le "exit" pas de problème, mais avec le "exit", il refuse de me supprimer la dernière clef de $_SESSION['panier'].

Eeeeuhhh... #-o

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

18 févr. 2016, 03:03

Fait des tests complémentaires car il n'y a pas de raisons que ça change quelque chose à ce niveau là.

Qu'est-ce que faisait ta page après le header('location...')?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 337 Messages

18 févr. 2016, 14:43

Effectivement, je mettais à jour ma commande dans la base de données après cette portion de code.
Du coup, quand il ne restait plus rien dans le panier, la mise à jour n'était plus lue avec le exit, et le dernier article ne disparaissait jamais.

Le "exit" est exigeant ! Merci @rthur.