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 :

[PHP-JS] Pb avec le header et meta


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut [PHP-JS] Pb avec le header et meta
    salut !

    je solicite votre aide pour un pb un peu bisard que je rencontre en ce moment avec mes redirections...

    J'explik vite fait: j'ai une page de recherche ds laquelle il y a un formulaire, au Submit le formulaire fait appel a la page recherche.php.
    Cette page là verifie si o moins un champs du formulaire est rempli.
    Si OUI je effectue la recherche ( ca marche nikel)
    si NON je redirige vers la page contenant le formulaire.

    Le pb est que la syntaxe que j'utilise pour la redirection ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    if(($nom == "") && ($prenom == "") && ($fonction == "") && ($ville == ""))
      {
        // alors rien n'a ete rempli ds le formulaire donc on retourne a l'accueil.
        header("Location: ./intra_v1.php?p=Accueil");
      }
    l'erreur retourner est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Warning: Cannot modify header information - headers already sent by
    Apres ca je me suis dis qu'en utilisant le méta ca marcherai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    echo '<meta http-equiv="refresh" content="0; url=intra_v1.php?page=Accueil>';
    Mais le résultat est pas bon car cela m'affiche la ligne de code sans faire de redirection !

    Puis sans vraiment m'en rendre compte j'ai utilisé les deux syntaxe a la fois et la par miracle sa marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    if(($nom == "") && ($prenom == "") && ($fonction == "") && ($ville == ""))
      {
        // alors rien n'a ete rempli ds le formulaire donc on retourne a l'accueil.
        echo '<meta http-equiv="refresh" content="0; url=intra_v1.php?page=Accueil>';
        echo 'header("Location: ./intra_v1.php?p=Accueil")';
      }

    Donc je souhaiterai savoir s'il y a une explication a ca ??? et surtout s'il n'y a pas une syntaxe plus simple et moins "Bricolé" ???

    Merci d'avance ...

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    C'est bizarre tout ça, dans ta version meta je penses que tu as un souci avec tes guillemets...
    Pour le header il faut rien mettre avant pas de code HTML ou d'espace
    http://php.developpez.com/faq/?page=...s_already_sent
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  3. #3
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Salut,

    Ta solution première ( utiliser la fonction header avec Location ) est la meilleure.

    Il faut juste t'arranger pour ne faire aucun affichage ( ton fichier php doit commencer par <?php sans espace avant ni aucun texte ) avant l'utilisation de la fonction header.

    Si tu places des cookies aussi ça peut poser un problème, car ceci implique l'envoie d'un header.

    Peux-tu poster la totalité de ta page PHP ? On pourra alors t'aider plus précisément si tu ne trouves pas l'endroit où tu fais un affichage.

    A+
    K

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    PS : dans ta deuxième solution, tu as oublié un double quote :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<meta http-equiv="refresh" content="0; url=intra_v1.php?page=Accueil">';
    K

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    Merci bien !

    effectivment un guillemet oublié !

    Si je comprend bien ! dans mon cas c'est impossible d'utiliser le Header .
    Je trouve bisard car pourtant pour les pages php il faut utiliser cette fonction ;.. bref

    encore merci !

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Il n'est pas impossible d'utilise header mais il faut le faire correctement. Rien ne doit être envoyé au navigateur avant d'appeler cette fonction : pas d'espace, pas de passage à la ligne, rien.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    voici le debut de la page Recherche.php

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
     
    <?
    //-----------------------------------------
    // FICHIER QUI VA ENREGISTRER LES DONNEES TRANSMISSENT PAR LE FORMULAIRE
    //------------------------------------------------------------------------
     
    //récupération de $limite
        if(isset($_GET['limite']))
        {
          $limite=$_GET['limite'];
        }
        else   $limite=0;
     
    function verifLimite($limite,$total,$nombre) {
        // je verifie si limite est un nombre.
        if(is_numeric($limite)) {
     
    // si $limite est entre 0 et $total, $limite est ok
            // sinon $limite n'est pas valide.
            if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
                // j'assigne 1 à $valide si $limite est entre 0 et $max
                $valide = 1;
            }    
            else {
                // sinon j'assigne 0 à $valide
                $valide = 0;
            }
        }
        else {
                // si $limite n'est pas numérique j'assigne 0 à $valide
                $valide = 0;
        }
    // je renvois $valide
    return $valide;
    }
     
    $tab_criteres[0] = ""; // tableau recapitulatif des criteres de recherche
     
    //---------------
    // RECUPERATION DES DONNEES.
    //----------------------------
    if(isset($_POST['rechercher']))
    {
      // on remplit le tableua de criteres de recherche
      $tab_criteres[0] = $nom = $_POST['nom'];
      $tab_criteres[1] = $prenom = $_POST['prenom'];
      $tab_criteres[2] = $fonction = $_POST['fonction'];
      $tab_criteres[3] = $ville = $_POST['ville'];
     
      if(($nom == "") && ($prenom == "") && ($fonction == "") && ($ville == ""))
      {
        // alors rien n'a ete rempli ds le formulaire donc on retourne a l'accueil.
        echo '<meta http-equiv="refresh" content="0; url=intra_v1.php?page=Accueil">';
        //echo 'header("Location: ./intra_v1.php?p=Accueil")';
      }
      else...
    si vous trouvez une soluce !

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    C'est évident, et la réponse se trouve dans la FAQ :
    http://php.developpez.com/faq/?page=...s_already_sent

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    d'accord ! mais si rien ne doit etre envoyé comment faire des test ou mettre en place des conditions pour la redirection

    car si je ne met rien avance il y aura redirection sans avoir pu traiter les infos poster ....???

    je trouve po logique ...

  10. #10
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Ton fichier php doit commencer par <?php sans espace avant ni aucun texte. Dans l'exemple que tu as donné, il y a des retours à la ligne avant.
    K

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Si tu veux, je peux te fournir un script de plusieurs dizaines (voire centaines) de lignes avant le premier appel à header() et cela ne pose aucun problème.
    Il faut bien faire la différence entre un traitement et un affichage.
    Ici, le problème vient effectivement des quelques passages à la ligne en début de script. C'est envoyé au navigateur avant que tu appelles header(), donc cette fonction pert tout son intérêt.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    Je ne vois pas très bien ce qu'on entend par pas de passage a la ligne !

    Si je prend mot pour mot cela veut dire que je vais devoir mettre en une seul ligne(c bete non?)

    je vois vraiment po comment réorganiser le code pour que cela marche !!

  13. #13
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Pour faire simple :

    Ceci NE MARCHE PAS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    <?php
    // ici ton code et ton header()
    Ceci FONCTIONNE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    // ici ton code et ton header()
    K

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    j'ai testé cette solution deja et ca ne fonctionne pas ! c'est pour ca que je ne comprend po !

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    <?php
    //-----------------------------------------
    // FICHIER QUI VA ENREGISTRER LES DONNEES TRANSMISSENT PAR LE FORMULAIRE
    //------------------------------------------------------------------------
     
    //récupération de $limite
        if(isset($_GET['limite']))
        {
          $limite=$_GET['limite'];
        }
        else   $limite=0;
     
    function verifLimite($limite,$total,$nombre) {
        // je verifie si limite est un nombre.
        if(is_numeric($limite)) {
     
    // si $limite est entre 0 et $total, $limite est ok
            // sinon $limite n'est pas valide.
            if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
                // j'assigne 1 à $valide si $limite est entre 0 et $max
                $valide = 1;
            }    
            else {
                // sinon j'assigne 0 à $valide
                $valide = 0;
            }
        }
        else {
                // si $limite n'est pas numérique j'assigne 0 à $valide
                $valide = 0;
        }
    // je renvois $valide
    return $valide;
    }
     
    $tab_criteres[0] = ""; // tableau recapitulatif des criteres de recherche
     
    //---------------
    // RECUPERATION DES DONNEES.
    //----------------------------
    if(isset($_POST['rechercher']))
    {
      // on remplit le tableua de criteres de recherche
      $tab_criteres[0] = $nom = $_POST['nom'];
      $tab_criteres[1] = $prenom = $_POST['prenom'];
      $tab_criteres[2] = $fonction = $_POST['fonction'];
      $tab_criteres[3] = $ville = $_POST['ville'];
     
      if(($nom == "") && ($prenom == "") && ($fonction == "") && ($ville == ""))
      {
        // alors rien n'a ete rempli ds le formulaire donc on retourne a l'accueil.
        // echo '<meta http-equiv="refresh" content="0; url=intra_v1.php?page=Accueil">';
        header("Location: ./intra_v1.php?p=Accueil");
      }
      else...
    voici l'erreur

    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\...\intra_v1.php:4) in c:\program files\easyphp1-8\www\...\recherche.php on line 53

    ??

  15. #15
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Ta page ne serait pas incluse à partir d'une autre, qui elle ferait un output ?

    Sinon, je ne vois pas, en effet, on dirait que tu n'as rien affiché, donc les headers ne devraient pas être envoyés si tu utilises cette page telle quelle. Vérifie qu'elle n'est pas appellée par une autre.

    PS : tu n'es pas obligé de mettre ./ dans ton Location, seulement le nom de la page suffit, car c'est relatif.
    K

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    peut etre qu'il y a une erreur au niveau de mon fichier intra_v1.php

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?php
     
    echo '<title>LES CONTACTS</title>';
     
    echo '<table border="0" width="100%">';
    echo '<tr>';
               echo '<td align="center"><img src="images/icone_contact.gif" border="0"></td>';
               echo '<td align="center"><img src="images/TITRE_v1.bmp" border="0"></td>';
    echo '</tr>';
    echo '<tr>';
               echo '<td colspan="2"><HR></td>';
    echo '</tr>';
    echo '<tr>';
               echo '<td colspan=2 align="center">'; include("la_date.php"); echo'</td>';
    echo '</tr>';
    echo '<tr>';
               echo '<td></td>';
               echo '<td></td>';
    echo '</tr>';
    echo '<tr>';
               echo '<td valign="top">'; include("menu.html"); echo '</td>';
               echo '<td valign="top">'; include("tableau_central.php"); echo'</td>';
    echo '</tr>';
    echo '</table>';
     
    ?>

  17. #17
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Chacun de tes "echo" casse la possibilité d'utiliser la fonction header.
    K

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Points : 61
    Points
    61
    Par défaut
    ahhhh !

    Mince alors, car c'est tout mon site qui est géré a partir de là.

    donc je suppose que je ne pourrai po utiliser de header() où que se soit.

  19. #19
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    451
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 451
    Points : 287
    Points
    287
    Par défaut
    salut

    ya toujours la bidouille sinon...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "<script>document.location.href='index.php?inc=58';</script>";
    -> redirection forcée en javascript



    a+

  20. #20
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Il faut que tu sépares le code "métier" ( validation, calculs, etc ) du code d'affichage.

    Ainsi, dans ta page intra_v1.php, en tête, tu inclus les fichiers de traitement d'abord; ils pourront tous faire des header Location, car aucune information ne sera affichée.

    Ensuite, tu fais tes includes "d'affichage" pour la suite.

    Ca implique peut-être une refonte de ton site...

    a+
    K

Discussions similaires

  1. Réponses: 12
    Dernier message: 05/11/2008, 20h43
  2. [PHP-JS] Probleme avec le header
    Par kev484 dans le forum Langage
    Réponses: 18
    Dernier message: 14/12/2007, 17h20
  3. [PHP-JS] Comment créer une boucle avec des headers
    Par djinnwatcher dans le forum Langage
    Réponses: 10
    Dernier message: 17/07/2006, 15h48
  4. Réponses: 5
    Dernier message: 11/04/2006, 18h12
  5. Réponses: 3
    Dernier message: 11/04/2006, 10h00

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