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, header impossible


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut Redirection, header impossible
    Bonjour, à la suite d'une boucle je dois rediriger sur une page, et je ne peux pas utiliser de header, j'utilise donc la formule suivant :

    echo '<META HTTP-EQUIV="refresh" CONTENT="1; URL=index.php">';

    Ce qui me gène c'est qu'il y a un temps d'attente, avant de changer de page, de plus je trouve ça moche comme solution.

    Connaitriez vous un autre moyen pour aller sur une page assez rapidement (si possible du php).

    Je ne peux pas utiliser de header car je me trouve sur une page php inclus sur une autre page qui a un echo avant.

    Pour une meilleure compréhension voici ma situation synthétisé, merci :

    Page index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    echo'<html> blabla'
    include('config.php')
    echo' blablabla </html>
    ?>
    Page config.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    if (true)
     
    { //redirection à faire :
     
    echo '<META HTTP-EQUIV="refresh" CONTENT="1; URL=pagesouhaité.php">'; //fonctionne mais lent
     
    header('location: pagesouhaité.php'); //fonctionne pas 
     
    ???? // autre solution ? Merci :D
    }
    ?>
    EDIT : Je n'avais pas testé jusqu'à maintenant de mettre la valeur de CONTENT à 0, (ça me semblait impossible un time de 0) j'ai eu tord du coup avec ce code plus de problème de temps, reste que ce n'est pas très propre pour une redirection donc si vous avez une meilleurs solution à me proposer je suis tout ouïe , merci.

    Ma solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<META HTTP-EQUIV="refresh" CONTENT="0; URL=index.php">';

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 105
    Points : 119
    Points
    119
    Par défaut
    Salut,

    normalement header fonctionne tres bien, vérifie bien que tu mets une majuscule a "Location" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Location:index.php");
    edit: désolé, j'avais mal lu ton histoire de echo!

    Il y a un truc que je ne comprends pas, dans quel cas pourrais tu bien faire un echo de données et mettre juste apres une redirection ?

    si c'est l'insertion de texte avant qui te pause probleme, essaie de faire une bufferisation de sortie, regarde du coté de ob_start http://php.net/manual/fr/function.ob-start.php

  3. #3
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Bonsoir, tout d'abord merci.

    Si j'ai bien compris ton idée tu me propose que je mette par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    ob_start (FonctionRedirection);
    echo 'Blabla';
    ob_end_flush();
    include('config.php')
    ?>
    et que dans mon include j'ai quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    function FonctionRedirection($page)
    {
     header('location: '.$page);
     }
     
    if (true)  // si condition vrai, redirection à faire :
    { 
    FonctionRedirection(pagesouhaité);
    }
    ?>
    Le problème c'est qu'en faisant de cette manière apparemment mon header ne passe pas avant mon echo mais en même temps car je trouve avec xdebug le problème que header soit déclaré après..



    Pour les explications J'ai une page.php qui contient un include sur un menu, et un autre include sur plusieurs page php suivant le résultat d'une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    // blabla
     
     include('menu.php'); //j'appelle mon menu
     
    /blabla
     
     if(!empty($_GET['page']))       // si la page est appelé du menu..
    {include($_GET['page'].'.php')  // .. j'appelle ma page
     
    ;} 
    ?>
    Je me trouve actuellement sur un des page php de ce deuxième include, mon code php se trouve donc derrière l'echo et compagnie de page.php.

    Et comme je souhaite sur ces page php pouvoir faire des redirections voilou.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 105
    Points : 119
    Points
    119
    Par défaut
    En me servant de ton dernier exemple, quelques modifications et j'arrive a me rediriger sans probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
     
    include('config.php');
     
    ob_start ("test");
    echo 'Blabla';
     
    ob_end_flush();
     
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?php
     
    function FonctionRedirection($page)
    {
    	header('Location: '.$page);
    }
     
    function test()
    {
    	if (true)  // si condition vrai, redirection à faire :
    	{
    		FonctionRedirection("http://www.google.fr");
    	}
    }
     
    ?>
    J'ignore comment tu battis tes pages mais ce genre de situation peut être éviter en revoyant la structuration de celles ci.
    Car tout de même, un ob_start pour faire une simple redirection me semble un peu lourd.

    Peut etre pourrais tu t'inspirer de MVC ? je pense que ca t'aidera a éviter ces petits pieges.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Les fonctions header et session_start (je ne sais pas si il y en a d'autre qui sont concernées) ne doivent pas être précédé par un quelconque affichage (même un echo "" ou code html.

    Ce que tu peux faire, c'est mettre ob_start(); au début de toutes tes pages pour ne plus avoir ce problème.

  6. #6
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Bonjour, merci encore pour l'attention que vous portez.

    Dans ton code tu porte l'include devant le ob_start, donc le header se trouve devant, hors mon include doit se trouver derrière sinon il n'y aurait pas de soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    include('config.php');
     
    ob_start ("test");
    echo 'Blabla';
     
    ob_end_flush();
     
    ?>
    De plus si je m'arrange pour que ca marche il y a le problème que ce qu'il y a dans le ob_start ne va pas s'afficher jusqu'à qu'a que j'appelle ma fonction qui redirige.

    Oui je pourrais surement m'inspirer de MVC c'est une façon de programmer que j'ai prévu d'apprendre mais là je ne pourrais m'y mettre tout de suite, mon projet doit être rendu sous peu.

    Bah pour le moment je reste avec mon :
    echo '<META HTTP-EQUIV="refresh" CONTENT="0; URL=index.php">';

    En tout cas merci, le ob_start est tout de même bien intéressant.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2008, 06h33
  2. Redirection header suite à variable session
    Par jive dans le forum Langage
    Réponses: 13
    Dernier message: 05/07/2006, 01h01
  3. Problème redirection header ('location:
    Par Jiraiya42 dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2006, 17h08
  4. [Frame] [Redirection] Header
    Par trach.sam dans le forum Langage
    Réponses: 3
    Dernier message: 16/05/2006, 16h45
  5. redirection header ne marche pas!!!
    Par duga dans le forum Langage
    Réponses: 4
    Dernier message: 01/10/2005, 11h58

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