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] La fonction header()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Par défaut [PHP-JS] La fonction header()
    Bonjour, j'ai un petit problème avec les redirections.
    Dans aucune de mes pages je n'arrive à faire marcher la fonction header(). Même les formulaires
    automatiques de Dreamweaver qui créent automatiquement les redirections ne fonctionnent pas!

    Voici un bout de code après la suppression de données dans ma base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     $deleteGoTo = "Communes.php";
      if (isset($_SERVER['QUERY_STRING'])) {
        $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
        $deleteGoTo .= $_SERVER['QUERY_STRING'];
      }
      header(sprintf("Location: %s", $deleteGoTo));
     
    Ce code a été généré automatiquement par deamweaver et permet normalement de me rediriger vers
    l'adresse contenue dans $deleteGoTo.
    Même en mettant ça:
     
    $deleteGoTo = "../autrechose.php";
     
      header(sprintf("Location: %s", $deleteGoTo));
    Ca me ramène exactement à la même page...toujours sur la page Communes.php !
    J'obtiens toujours une adresse de ce style: http://xxx.xx.xxx.xx/xxxx/pagesOptions/Communes.php?CommunesID=72025&submit=Supprimer+la+commune

    J'ai également essayé de faire marcher header( ) sur d'autres pages, vierges ou pas, mais rien à faire :/
    Y a t'il quelquechose de spécial à faire pour que ça marche? Merci d'avance =)

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Salut !



    pas la peine de t'embêter avec sprintf...

    au pire, si tu veux vraiment reproduire le comportement de ton script, fait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $page = 'lapage.php';
    if (isset($_SERVER['QUERY_STRING']))
    {
    <div style="margin-left:40px">$page .= (strpos($deleteGoTo, '?') !== false ) ? "&" : "?";
    $page .= $_SERVER['QUERY_STRING'];</div>}
    header('Location: '.$page);
    sinon, c'est vraiment bizarre que ça te renvoit toujours sur la même page... il doit y avoir un problème quelque part...

    quand tu dis que tu mets '../autrechose.php', c'est bien une modification du code, tu l'ajoutes pas à la suite ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Par défaut
    Merci! Je vais tester ça demain

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Par défaut
    Bon et bien j'ai essayé, mais le problème ne doit pas venir de la.
    Sinon oui c'est bien une modification du code.
    En fait j'ai un bouton de type submit qui doit valider un formulaire, et donc recharge la page, et la on rentre dans un if. Dans ce if, il y a une requête qui supprime des données dans une base de données, et ensuite la redirection.
    La suppression marche bien, en revanche la redirection ne veut pas marcher.
    Comme je l'ai dit, j'ai l'impression d'avoir un problème avec header(), je n'arrive pas à la faire fonctionner même avec une page très simple..

  5. #5
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 237
    Par défaut
    header() est une fonction qui doit se trouver tout en premier dans ton code ! Elle envoie des indications au navigateur sur la nature de la page !
    Quand on dit quelle doit se trouve en tout premier c'est faux On ne doit pas envoyer avant d'autre infos au navigateur en fait ! (ie. ne pas écrire : balise html ou print)

    Avec les modifications quelle erreur as-tu ?

  6. #6
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 38
    Par défaut
    Bonjour,
    Moi j'utilise header de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //va vers la page indiquée 
    header("Location: mod_cli.php"); 
    //Ou sinon retourne à la dernière page 
    header("Location: ".$_SERVER['HTTP_REFERER']);
    Attention l'utilisation de echo peut générer des bugs avec header.

  7. #7
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par CrashAngel
    Attention l'utilisation de echo peut générer des bugs avec header.
    Ce n'est pas que echo peut générer des bugs...
    l'utilisation d'echo est INTERDITE avant les appels à header (sauf utilisation du buffering)

    pour comprendre cela, il suffit de connaître un peu le protocole HTTP :

    une requête HTTP est conçue ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {METHODE} page HTTP/{VERSION}
    {Header1}: {Value1}
    {Header2}: {Value2}
    {HeaderN}: {ValueN}
     
    {Corps de la requête s'il y a lieu (cas d'une requête POST ou PUT)}
    une réponse est ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {Code numérique} {Phrase de Réponse}
    {Header1}: {Value1}
    {Header2}: {Value2}
    {HeaderN}: {ValueN}
     
    {Corps de la réponse (la page web en elle-même)}
    Ce que fait PHP c'est générer la réponse... afin de simplifier et d'optimiser le traitement par le navigateur, il séparre l'envoie de la requête en deux envoies : les en-têtes (d'un coup) et le corps (au fur et à mesure de la génération du code HTML ou autre).

    header permet d'ajouter ou de modifier les en-têtes à envoyer...

    Dès qu'un caractère doit être envoyé comme faisant partie du corps de la réponse, PHP envoie les en-tête et commence à envoyer le corps du message, ainsi on ne peut plus envoyer de nouveaux en-tête pour cette réponse.

    Voilà pourquoi un echo est interdit avant un appel header, en fait, c'est plutôt header qui est interdit après le premier envoie de caractère faisant partie du corps de la réponse
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  8. #8
    Membre éprouvé
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant CRM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Par défaut
    Je conseil de toujours faire un exit a la fin des header ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    ... 
    header( "Location: page.php" );
    exit;
    ?>
    Comme a expliqué SWOOG, il faut absolument que les headers soit envoyé avant le contenu donc attention au erreur d'etourdi comme les espaces avant/apres les balises php. Exemple les espaces entre ?> et <?php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php doit(); ?> <?php header("Location: go.php"); ?>
    Pour ne plus avoir ces problemes de header et d'utiliser des echo ou l'on veut, utiliser donc l'output buffering.
    En début de page on balande ob_start(); et hop c bon en plus après on peut faire tellement de chose

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Par défaut
    Hummm

    En ce qui concerne les echo ou les balises html, je ne pense pas avoir fait l'erreur, mais je vérifierai! pareil pour les balises php.
    Je vais essayer le :

    //Ou sinon retourne à la dernière page
    header("Location: ".$_SERVER['HTTP_REFERER']);
    Et aussi de mettre un exit.
    Merci à tous pour votre aide, je vous tient au courant

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 98
    Par défaut
    Bon et bien j'ai testé le exit, ça me remet sur la même page, sauf que la son contenu est vide :'(

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

Discussions similaires

  1. sur AMEN : PHP et fonction header()
    Par zephira dans le forum Autres hébergeurs
    Réponses: 0
    Dernier message: 05/04/2011, 17h21
  2. Réponses: 2
    Dernier message: 26/05/2010, 11h13
  3. [PHP-JS] Fonction header pas acceptée
    Par carelha dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2006, 18h41
  4. [PHP-JS] fonctionnement de la fonction 'header'
    Par enguerran dans le forum Langage
    Réponses: 8
    Dernier message: 02/06/2006, 08h10
  5. [PHP-JS] Arguments PHP d'une fonction javascript
    Par Néo-Tony dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/12/2004, 12h06

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