PB syntaxe header

Résolu
MISS97200 Messages postés 187 Date d'inscription   Statut Membre -  
kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai un soucis avec la syntaxe de mon header en php pour un serveur local.
j'utilise easyphp.
merci
Configuration: Windows XP
Internet Explorer 7.0

40 réponses

  • 1
  • 2
Résumé de la discussion

Problème d'implémentation de header() en PHP et l'impact des sorties prématurées sur les redirections, notamment avec EasyPHP sous Windows, où une ligne blanche ou un écho avant l'appel peut bloquer la redirection. Des échanges conseillent d'initialiser les variables, de vérifier les données POST avant leur utilisation et d'appeler header() avant toute sortie HTML, tout en confirmant la sélection de la base de données et l'exécution conditionnelle. Plusieurs corrections évoquent aussi l'usage des sessions et des tests d'authentification, avec des exemples montrant comment rediriger via Location et comment corriger une non sélection de base ou de variable.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Bonjour,

    Et donc, quelle est cette syntaxe ? Tu n'as pas un exemple à nous donner (ton code) ?

    Sans rien d'autre comme indication je dirais que tu tente d'envoyer des headers alors que ceux-ci ont déjà été envoyés, c'est l'erreur la plus courante.
    0
  2. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    voici mon code :

    <?php require_once('connexion.php'); ?>
    <?php session_start();
    $_SESSION['utilisateur']='';
    $_SESSION['mdp']='';
    $verif='';
    $utilisateur='';
    $uti='';
    $motpass='';

    if (isset($_POST['valider']) )
    {
    if (isset($_POST['user']))
    {
    $uti = $_POST['login'];
    $motpass = md5($_POST['pass']);
    mysql_select_db($database_dbmarchpub, $dbmarchpub);
    $verif_query=sprintf("SELECT * FROM user WHERE user='$uti' AND mdp='$motpass'");
    $verif = mysql_query($verif_query, $dbmarchpub) or die(mysql_error());
    $row_verif = mysql_fetch_assoc($verif);
    $utilisateur = mysql_num_rows($verif);

    if (isset($utilisateur))
    {
    $_SESSION['connexion'] = 'ok'
    header("Location:menup.php");
    exit;
    }
    else
    {
    header("Location:index.php?erreur=login");
    }
    }
    ?>

    voila ce que j'ai essayé de faire
    0
  3. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Il s'agit donc bien de cette erreur.

    Dans ton code :
    if (isset($utilisateur))
    {
    $_SESSION['connexion'] = 'ok'
    header("Location:menup.php");
    exit;
    }
    else
    {
    header("Location:index.php?erreur=login");
    }
    


    Tu ne peux utiliser la commande PHP header qu'en début de script PHP

    Je te propose de faire la même chose mais en javascript :
    if (isset($utilisateur))
    {
    $_SESSION['connexion'] = 'ok'
    echo "<script language='javascript'>document.location.replace('menu.php');</script>";
    exit;
    }
    else
    {
    echo "<script language='javascript'>document.location.replace('index.php?erreur=login');</script>";
    }
    

    0
  4. Thamior Messages postés 267 Statut Membre 47
     
    Tu ne peux utiliser la commande PHP header qu'en début de script PHP

    Faux, le header doit se faire avant tout affichage de type echo, print ou print_r ainsi qu'avant toutes balises html.

    Il est donc possible d'avoir un header après une vérification des données en PHP :).
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    donc où est l'erreur dans ce que j'ai écris
    0
  7. Thamior Messages postés 267 Statut Membre 47
     
    Est-ce cette page est appelé dans une autre page ?

    Proposition d'une solution :
    if (isset($utilisateur))
    {
    $_SESSION['connexion'] = 'ok'
    header("location: menup.php");
    exi();
    }
    else
    {
    header("location: index.php?erreur=login");
    exit();
    }
    0
  8. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    oui.
    0
  9. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    en fait maintenant ma page s'affiche mais rien ne se passe.
    il me manquait un ;
    help, le désespoir s'emparre de moi.
    0
  10. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Rien ne se passe, c'est donc qu'il y a bien une erreur, donc quelque chose se passe :)
    Est ce que tu as firefox ? Si oui navigue sur ta page en ouvrant le dégugger (Outil->Console d'erreur)
    Si un message d'erreur apparait peux-tu nous le mettre ici ?
    (une erreur du genre "headers already sent" peut être)

    Qu'est ce qu'il y a au juste dans le fichier que tu inclus (connexion.php)?
    0
  11. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    dans connexion.php, ce sont les paramètres de connexion. et non, il je n'ai pas firefox, je suis en stage.
    0
  12. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    je viens d'installer firefox, et je n'ai aucune erreur, que des avertissements.
    0
  13. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Re,

    Je persiste à dire que Header doit être utiliser avant tout autre chose (si possible bien sur).
    Regarde un exemple ici :
    http://fr.php.net/header
    Notemment le paragraphe suivant : Example#6 header() doit toujours être appelé en premier

    Il ne faut pas qu'il y ai de sortie PHP avant son appel, ne serait-ce qu'une ligne blanche au niveau du code PHP. Du moins c'est comme ça que j'interprète ce qu'il est écrit.

    Essai donc de supprimer les lignes blanches dans ton code (pas d'espace ni de ligne vide)
    0
  14. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    il n'y a pas ça dans mon code, que des lignes de commentaires.
    je viens de les supprimer et cela ne fonctionne toujours pas.
    0
  15. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Es-tu sur que le programme passe bien dans la condition :
    (isset($_POST['valider'])
    ?

    Peux tu mettre un echo "blabla"; dedans (juste apres) et un echo "toto"; dans un else si cette condition n'est pas validée.
    Peux tu mettre des traces un peu partout (dans chaque condition ou tu programme peux passer) afin de savoir exactement par où passe ton programme et donc comprendre son comportement ?
    0
  16. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    ok, je le fais.
    0
  17. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    je l'ai fais et tu as raison, le seul echo ('je ne passe pas') que j'ai mis, c'est ce que ça m'affiche. c'est le echo de mon if pour (isset($_POST['valider']).
    0
  18. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Fais voir le code du formulaire avec lequel tu accède à la page que tu as déjà donné.
    L'erreur vient soit du fait que tu as mal nommé ton bouton submit, du coup la valeur "valider" n'est pas référencée dans la variable globale $_POST, soit la méthode utilisée par ton formulaire est GET au lieu de POST (soit autre chose bien sur^^)

    Je reviens demain mais peut-être que d'ici tu aura résolu ton problème.
    Bonne chance.
    0
  19. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    voici le code, je n'ai toujours pas de solutions :

    <?php require_once('connexion.php'); ?>
    <?php session_start();
    $_SESSION['utilisateur']='';
    $_SESSION['mdp']='';
    $verif='';
    $utilisateur='';
    $uti='';
    $motpass='';

    if (isset($_POST['valider']) )
    {
    if (isset($_POST['user']))
    {
    $uti = mysql_real_escape_string($_POST['user']);//variable du nom d'utilisateur
    $motpass = md5($_POST['mdp']); //variable du mot de passe crypté
    $verif_query=("SELECT * FROM user WHERE uti='$uti' AND mdp='$motpass'"); // requête sur la table user
    $verif = mysql_query($verif_query, $dbmarchpub) or die(mysql_error());
    $row_verif = mysql_fetch_assoc($verif);
    $utilisateur = mysql_num_rows($verif);

    if ($utilisateur ==1)
    {// On test s'il y a un utilisateur correspondant
    $_SESSION['connexion'] = "ok";
    header("location:menup.php");// redirection si OK
    exit;

    }
    else
    {
    header("location:index.php?erreur=login");// redirection si utilisateur non reconnu
    exit;
    }
    }
    }
    ?>

    J'espère que vous pourez m'aider
    0
    1. djadito Messages postés 11 Statut Membre
       
      Salut est ce que ta résolu ton problème?
      g le meme blèm que le tien voila mon code:
      <?phpinclude ("config_connection_var.php");
      if(isset($_POST['id']))
      $LOGIN=$_POST['id'];
      else
      $LOGIN="";
      if(isset($_POST['pwd']))
      $PWD=$_POST['pwd'];
      else
      $PWD="";
      if(empty($LOGIN) OR empty($PWD))
      { // REDIRECTION VERS LA PAGE AUTHENTIFICATION
      header("Location: ".$relogin);
      }
      else
      { $query = "SELECT * FROM internal_index WHERE Name='$LOGIN' AND Password='$PWD'";
      $result = mysql_query($query) or die('Erreur SQL');
      $affected_rows = mysql_num_rows($result);
      if($affected_rows == 0)
      { // REDIRECTION VERS LA PAGE ERREUR
      header("Location: ".$pagelogin); }
      else { $_SESSION['login'] = $LOGIN;
      $req1 = "SELECT User_Profile_ID FROM internal_index WHERE Name='$LOGIN' AND Password='$PWD'";
      $res1 = mysql_query($req1) or die('Erreur SQL');
      $rows1 = mysql_fetch_array($res1);
      $req2 = "SELECT User_Profile FROM user_profile WHERE User_Profile_ID='$rows1[0]'";
      $res2 = mysql_query($req2) or die('Erreur SQL');
      $rows2 = mysql_fetch_array($res2);
      if($rows2[0]==6)
      { header("Location: ".$menu_admin);}
      else
      { if($rows2[0]==11)
      {header("Location: ".$menu_chargé);}
      }
      }
      }
      ?>
      SVP si ta une solution informe moi,merci
      0
      1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857 > djadito Messages postés 11 Statut Membre
         
        Djadito, le problème est résolu, si tu as le même soucis je te prierai de lire la discussion jusqu'au bout.
        0
  20. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Et si tu enlève les sauts de ligne dans ton code pour ne pas laisser d'espace ça donne quoi ?
    0
  21. MISS97200 Messages postés 187 Date d'inscription   Statut Membre 11
     
    cela m'a marqué aucune base sélectionnée donc j'ai rajouté ceci:
    mysql_select_db('marche_public');

    après la ligne $motpass = md5($_POST['mdp']);

    et là, quand j'entre le nom de l'utilisateur et le mot de passe qui sont dans la base de données, cela réaffiche la page.
    0
  • 1
  • 2