IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

redirection qui ne fonctionne pas


Sujet :

Langage PHP

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 908
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 908
    Points : 420
    Points
    420
    Par défaut redirection qui ne fonctionne pas
    Bonjour à tous,

    j ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    unset($_SESSION["commande"]);
     
    if (!isset($_SESSION["commande"]))
    {
    	header("Location: http://www.lldiffusion.com/index.php?commande=null");
    }
    ma direction ne fonctionne pas et je ne comprends pas pourquoi...

    pourtant ma session commande n'existe plus....
    auriez-vous une idée...

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Points : 164
    Points
    164
    Par défaut
    Bonsoir,

    le code que tu nous montres se trouve bien en début de page ? aucun print / echo n'est fait auparavant car si c'est le cas, ta redirection ne fonctionnera pas.

    hormis ça, le code semble bon mais pas complet puisque je ne vois pas de session_start non plus.

  3. #3
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    simple point de vue mais évite les redirections par header et apprécie les <meta /> c'est beaucoup plus simple

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    Je n'ai jamais eu de pbs avec les header, et ils te permettent de ne pas envoyer de html, donc tu as moins à envoyer (juste le header), et c'est quand même plus pratique...

  5. #5
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Ma foi Frol, les headers sont tout de même un point crucial de PHP dans des appli WEB !!!!

    Je ne vois pas comment tu peux faire autrement pour diriger vers une page selon certaines conditions.....

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par frol
    simple point de vue mais évite les redirections par header et apprécie les <meta /> c'est beaucoup plus simple
    Je ne suis pas du tout d'accord. Header est fait pour ça, aucun intérêt d'utiliser les <meta>.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par sam01
    Bonjour à tous,

    j ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    unset($_SESSION["commande"]);
     
    if (!isset($_SESSION["commande"]))
    {
    	header("Location: http://www.lldiffusion.com/index.php?commande=null");
    }
    ma direction ne fonctionne pas et je ne comprends pas pourquoi...

    pourtant ma session commande n'existe plus....
    auriez-vous une idée...
    Rajoute un exit() après le header. C'est à faire systématiquement après une redirection pour éviter les erreurs.

  8. #8
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 908
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 908
    Points : 420
    Points
    420
    Par défaut
    Bonjour,

    je ne comprends l'utilité de l'exit()?
    A quel endroit dois-je le mettre?
    dans le if ou bien après?

  9. #9
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    oui mais si on as des pages incluse une dans l'autre et qu'on ne sai plus vraiment ce qui est envoyé ou pas un meta apporte moins de problèmes.
    Ce qui a aussi c'est que j'ai appris à utiliser le php sur free qui n'acceptait pas les headers donc... tare d'amateur

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par frol
    oui mais si on as des pages incluse une dans l'autre et qu'on ne sai plus vraiment ce qui est envoyé ou pas un meta apporte moins de problèmes.
    Ce qui a aussi c'est que j'ai appris à utiliser le php sur free qui n'acceptait pas les headers donc... tare d'amateur
    Comme l'a si bien dit vg33, avec un exit() après le header, il n't a aucun problème.
    @sam01 : le exit() arrête le traitement du script.

    Sinon free accepte les header, j'utilise cette fonction depuis plusieures années pour mon avatar dynamique (d'ailleurs faudrait que je pense à le mettre ici )

  11. #11
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    ah ben ou je me plantais ou j'étais autre part en fait j'étais sur un site ou il y avait un site publicitaire et ou mon site était dans une sorte de pseudo frame et comme il y avait quelque chose avant ma commande ça n'allait pas.

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par sam01
    je ne comprends l'utilité de l'exit()?
    Si tu utilises header(), cela envoie un header au navigateur Mais tu peux en envoyer plusieurs. Donc le exit() termine le script => la redirection est immédiate. Si tu n'as pas d'exit(), le script continue et peut donc réaliser des opérations que tu ne souhaitais pas. De plus, si tu envoies d'autres headers, tu peux avoir une erreur ("headers already sent...") ou seule la dernière redirection sera effectuée.

    Citation Envoyé par sam01
    A quel endroit dois-je le mettre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    unset($_SESSION["commande"]);
     
    if (!isset($_SESSION["commande"])) {
    	header("Location: http://www.lldiffusion.com/index.php?commande=null");
    	exit();
    }

  13. #13
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 908
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 908
    Points : 420
    Points
    420
    Par défaut
    c'est exactement ce qui s'est passé je pense,

    mon script à continuer après ma redirection.
    C'est dionc une règle générale en PHP, il faut toujours mettre un exit() derrieère un header.
    Houllala, ça m'en fait des fichiers à modifier....

    par contre je ne comprends pas pourquoi la redirection ne se fait àlors que condition est vérifiée...

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par sam01
    par contre je ne comprends pas pourquoi la redirection ne se fait àlors que condition est vérifiée...
    Tu peux envoyer plusieurs headers. Ils sont "exécutés" uniquement quand la connexion avec le navigateur est terminée = à la fin du script. Le exit() termine le script et donc force la redirection immédiatement.

  15. #15
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Je savais que le "exit()" était quasi-obligatoire après un header, mais pas que le script "stockait" les entête jusqu'à la fin de l'execution....

    En effet, si en plein milieu d'un script on met un header() sans exit(), le header redirige quand même instantannément.... Mais je suppose que si on ne met pas d'exit(), le script doit être mal fermé, et aura peut être tendance à laisser des failles de sécurités, du moins peut-être des messages d'erreurs....

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Php ne stocke pas les en-tête (du moins sans utilisation du tampon de sortie), il les envoie immédiatement, comme le ferait un echo.
    Mais, comme le dit le manuel :
    header

    (PHP 3, PHP 4, PHP 5)
    header -- Envoie un en-tête HTTP
    Description
    void header ( string string [, bool replace [, int http_response_code]] )

    header() permet de spécifier l'en-tête HTTP string lors de l'envoi des fichiers HTML. Reportez-vous à HTTP/1.1 Specification pour plus d'informations sur les en-têtes HTTP.

    Note : Depuis PHP 4.4.2 et PHP 5.1.2, cette fonction prévient l'envoi de plus d'un en-tête en même temps pour lutter contre les attaques par injection d'en-tête.

    Le paramètre optionnel replace indique si la fonction header() doit remplacer un en-tête précédemment émis, ou bien ajouter un autre en-tête du même type. Par défaut, un nouvel en-tête va écraser le précédent, mais si vous passez FALSE dans cet argument, vous pouvez forcer les en-têtes multiples pour un même type d'en-tête.
    plusieurs headers peuvent être envoyés à la suite, et parfois on peut envoyer plusieurs fois le même header. Seul le dernier dans ce cas sera exécuté. Pour forcer la redirection et éviter une continuation anarchique du script, il faut donc faire suivre le header par un exit().

  17. #17
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 908
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 908
    Points : 420
    Points
    420
    Par défaut
    merci pour ces précieux conseils.

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Avec plaisir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Data] Envoyer une map par un redirect qui ne fonctionne pas
    Par Logic_613 dans le forum Spring
    Réponses: 2
    Dernier message: 18/12/2012, 21h25
  2. [PHP 5.3] redirection qui ne fonctionne pas
    Par JimDraw dans le forum Langage
    Réponses: 10
    Dernier message: 06/11/2012, 09h44
  3. Simple redirection qui ne fonctionne pas
    Par Invité dans le forum Apache
    Réponses: 3
    Dernier message: 12/01/2012, 09h21
  4. Redirection qui ne fonctionne pas
    Par jexl dans le forum Apache
    Réponses: 4
    Dernier message: 21/03/2007, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo