Résolu - Message d'erreur

Bonjour,

Je suis allé sur PHP Débutant pour pouvoir permettre au utilisateurs de mon site de beneficier d’un espace membre.

J’ai donc ma première page : login.htm qui contient un formulaire d’inscription.

Ensuite ma page login.php qui verifie si l’utilisateur entre le bon mot de passe.

Puis enfin ma page verif.php avec le code de vérification tout en haut de la page qui n’autorise l’utilisateur à entrer sur la page que s’il est connecté. Cette page contient ensuite un code html basic.

Tous fonctionne sauf que lorsque l’utilisateur s’identifie et que l’identification est correct il arrive donc sur la page verif qui lui indique qu’il est bien connecté, mais avant il y a un message PHP :

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\login.php:4) in c:\program files\easyphp1-8\www\login.php on line 25

Voici la ligne 25 du fichier login.php :

session_start();

Pourriez vous m’aider pour ce problème que je ne comprend pas?

Merci de votre aide.

Julien
Edité le 11/06/2007 à 00:25

Il y a des données envoyées avant session_start(). Vérifie les caractères blancs (espace, etc) avant la balise ouvrante <?php, idem pour echo.

Voici le code PHP :

<? $host = "xxx"; $name = "xxx"; $pwd = ""; $connexion = mysql_connect("xx","xxx",""); mysql_select_db("xxx",$connexion); if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) { extract($_POST); // on recupère le password de la table qui correspond au login du visiteur $sql = "select pwd from tbl_user where login='".$login."'"; $req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error()); $data = mysql_fetch_assoc($req); if($data['pwd'] != $pass) { echo '

Mauvais login / password. Merci de recommencer

'; include('login.htm'); // On inclut le formulaire d'identification exit; } else { session_start(); $_SESSION['login'] = $login; echo 'Vous etes bien logué'; echo 'Report'; echo 'test'; } } else { echo '

Vous avez oublié de remplir un champ.

'; } ?>

J’ai regardé est pourtant je ne vois rien. ( je ne suis pas un expert j’ai donc peut etre mal vu). Si vous voyez l’erreur.

Merci

Julien

Je crois que j’ai trouvé ! Je n’avais pas mis le code PHP avant le code HTML.

En faite ce n’est pas la bonne solution. Lorsque je place mon code PHP avant le code HTML cela fonctionne. Mais dans ma page j’ai du code HTML avec du CSS à placer avant le code PHP.

Et maintenant 2 messages cible session_start() :

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\login.php:16) in c:\program files\easyphp1-8\www\login.php on line 102

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\login.php:16) in c:\program files\easyphp1-8\www\login.php on line 102

tu ne dois rien placer avant session_start(). Ton HTML et ton CSS tu le colles après, sinon cela ne marchera pas.
Après pour les messages d’erreur et compagnie, rien ne t’empêche de les mettre dans des variables au lieu de faire des echo, et de faire l’echo de ces variables dans ton contenu plus bas…
Edité le 10/06/2007 à 21:42

J’ai chercher et essayer des trucs mais apparement c’est du n’importe quoi. Pourrais tu me donner un exemple de variable pour placer les messages dedans?

Merci.

Julien

J’ai réussi à faire les variables finalement comme tu m’as conseillé, mais je n’arrive pas à faire en sorte que ça soit la bonne phrase qui apparaisse en fonction de l’identification (qu’elle soit bonne ou mauvaise). Certes j’appel la variable PHP au milieu du code HTML et elle s’affiche mais meme lorsque l’identification n’est pas bonne la phrase " vous êtes logué " apparait.

Voila mon code PHP avant le HTML et le CSS :

<? $host = "localhost"; $name = "root"; $pwd = ""; $connexion = mysql_connect("localhost","root",""); mysql_select_db("test",$connexion); if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) { extract($_POST); // on recupère le password de la table qui correspond au login du visiteur $sql = "select pwd from tbl_user where login='".$login."'"; $req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error()); $data = mysql_fetch_assoc($req); if($data['pwd'] != $pass) { } else { session_start(); $_SESSION['login'] = $login; } } else { $mess1= '

You forgot to fill a field.

'; $mess2= 'Identification - Home'; } ?>

Et voila ce que j’ai mis dans le code HTML pour avoir les phrases :

<? if($data['pwd'] != $pass) { echo '

Mauvais login / password. Merci de recommencer

'; } else { $_SESSION['login'] = $login; echo 'You are well identified'; } else { echo " \$mess1\""; echo " \$mess2\""; } ?>

Lors d’une identification reussi j’ai la bonne phrase et lorsque l’identification n’est pas bonne, la phrase et également correct.

Mais lorsqu’un champs à été oublié voilà le message d’erreur que j’ai :

Parse error: parse error in c:\program files\easyphp1-8\www\login.php on line 129

Ligne 129 : else {
echo " $mess1"";
echo " $mess2"";
}

?>

Merci de votre aide
Edité le 10/06/2007 à 23:46


<?php
$host = "xxx";
$name = "xxx";
$pwd = "";
$connexion = mysql_connect("xx","xxx","");
mysql_select_db("xxx",$connexion);

if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
  extract($_POST);
  // on recupère le password de la table qui correspond au login du visiteur
  $sql = "select pwd from tbl_user where login='".$login."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

  $data = mysql_fetch_assoc($req);

  if($data['pwd'] != $pass) {
    $message = '<p>Mauvais login / password. Merci de recommencer</p>';
    include('login.htm'); // On inclut le formulaire d'identification
    exit;
  }
  else {
    session_start();
    $_SESSION['login'] = $login;
    
    $message = "Vous etes bien logué <br /> \n"
    ."<a href="verif.php">Report</a> <br /> \n"
    ."<a href="test.php">test</a>";
  }   
}
else {
  $message = '<p>Vous avez oublié de remplir un champ.</p>';
}

?>
<html>
<body>
<!-- blablabla mon code, mon design -->
<b><?php echo $message ?></b>
<!-- blablabla la fin de mon design -->
</body>
</html>

Et quelque chose comme ça, qui définit le contenu de ta variable, que tu appelles ensuite ?
J’ai pas lu tout ton code source, mais ce que tu as du faire, c’est une variable différente pour chaque message. Or il faut choisir une seule variable, et ainsi php lui assignera le bon message en fonction de si l’utilisateur est connecté ou non. Tu n’as donc qu’à appeller cette seule et unique variable pour avoir le texte où tu le veut, quel qu’il soit.

Edit : c’est quoi ce forum de merde qui mets de l’htmlentities quand il faut pas… :pfff:
Edité le 10/06/2007 à 23:55

Ah oui exact j’en faisait plusieurs ! Merci beaucoup cela marche impécable!

Merci de ton aide !

Julien :slight_smile:

Si cela fonctionne sans problème, tu peux mettre [résolu] dans le titre de ton topic :wink: