mathieu147 Posté 18 Octobre 2005 Partager Posté 18 Octobre 2005 (modifié) Bonjour , J'ai un problème de cookies. Je voudrais demander une authentification sur une page. Les login/mot de passe sont contenus dans une base mySQL: base : base table : membres champs de la table : login et mdp. Seulement, j'ai une erreur: Warning: Cannot modify header information - headers already sent by (output started at /var/www/tests/protection.php:13) in /var/www/tests/protection.php on line 57 Warning: Cannot modify header information - headers already sent by (output started at /var/www/tests/protection.php:13) in /var/www/tests/protection.php on line 58 et je ne vois pas du tout d'où elle vient... Voici le code: <?php//Réception des infos entrées dans le forumaire$motdepasseentre = @$_POST["pass"];$login = @$_POST["login"];echo $motdepasseentre;echo "<br />";echo $login;//Connection$mysql_id = mysql_connect('hote', 'login', 'motdepasse');mysql_select_db('base', $mysql_id);//Recherche du mot de passe correspondant au login entré//Construction de la requète$requete = "SELECT mdp FROM membres WHERE login='" . $login . "'";echo "<br /> Requete : ";echo $requete;//Soumission de la requète à la base, et stockage du résultat dans la variable $result$result = mysql_query($requete,$mysql_id);//Mise en forme du résultat par PHP. La variable $membre contiendra le mot de passe de l'enregistrement trouvé.$membre = mysql_fetch_object($result);//Vidage de la variable pour désencombrer la mémoiremysql_free_result($result);//On vient d'aller chercher le mot de passe correspondant au login, il faut le comparer à celui entré dans le formulaire.$bonmotdepasse = $membre->mdp;echo "<br /> Mot de passe de la base de données : ";echo $bonmotdepasse;echo "<br /> Mot de passe entré dans le formulaire : ";echo $motdepasseentre;//Si les mots de passe correspondent, on met "ok" dans le cookieif($bonmotdepasse==$motdepasseentre){ echo "<br /> Les mots de passe correspondent"; setcookie("passe","ok"); //LIGNE 50 Header("Location: ".$_SERVER["PHP_SELF"]); //LIGNE 51}//Sinon, on laisse le cookie videelseif($bonmotdepasse!=$motdepasseentre){ echo "<br /> Les mots de passe ne correspondent pas"; setcookie("passe",""); //LIGNE 57 Header("Location: ".$_SERVER["PHP_SELF"]); //LIGNE 58}//On lit le cookie$isOK = (@$_COOKIE["passe"]!="");//S'il n'est pas vide, on affiche le menuif($isOK){?> <center> <A href="?pass=no">Déconnecter</A> - <A href="page1.php">Page 1</A> - <A href="page2.php">Page 2</A> - <A href="page3.php">Page 3</A> </center><hr><?php}//S'il est vide, on affiche le formulaireelse{?> <form method="post"> <table><tr> <td><input type="password" name="pass"></td> <td><input type="text" name="login"></td> <td><input type="Submit" value="Entrer"></td> </tr></table> </form><?php}?> Merci beaucoup d'avance! PS1: je suis débutant, je ne connais pas grand chose PS2: Si je mets le bon mot de passe, l'erreur se trouve sur les lignes 50 et 51. Modifié 19 Octobre 2005 par mathieu147 Lien vers le commentaire Partager sur d’autres sites More sharing options...
KaRaK Posté 18 Octobre 2005 Partager Posté 18 Octobre 2005 Bonjour, Il ne faut aucun affichage avant d'envoyer le cookie. Un simple retour à la ligne peut provoquer cette erreur. Bon courage Lien vers le commentaire Partager sur d’autres sites More sharing options...
MS-DOS_1991 Posté 18 Octobre 2005 Partager Posté 18 Octobre 2005 (modifié) Salut Il me semble que tu affiche du texte avant le header de ta condition if if($bonmotdepasse==$motdepasseentre){ echo "<br /> Les mots de passe correspondent"; setcookie("passe","ok"); //LIGNE 50 Header("Location: ".$_SERVER["PHP_SELF"]); //LIGNE 51 } //Sinon, on laisse le cookie vide elseif($bonmotdepasse!=$motdepasseentre) { echo "<br /> Les mots de passe ne correspondent pas"; setcookie("passe",""); //LIGNE 57 Header("Location: ".$_SERVER["PHP_SELF"]); //LIGNE 58 } La fonction header() doit etre utilisée AVANT TOUT AFFICHAGE de texte, c'est donc sans doute ceci qui génère une erreur à l'exécution Modifié 18 Octobre 2005 par MS-DOS_1991 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 18 Octobre 2005 Partager Posté 18 Octobre 2005 Bonjour, Les erreurs de header sont dû à l'affichage d'un ou plusieurs caractères avant la redirection php. Tu dois donc enlever tous les 'echo'. Portekoi Lien vers le commentaire Partager sur d’autres sites More sharing options...
mathieu147 Posté 18 Octobre 2005 Auteur Partager Posté 18 Octobre 2005 Rebonjour, Merci pour vos réponses! Malheureusement, j'ai enlevé tous les echo, tous les affichages de texte, et ça remet exactement la même erreur :/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
NorSeb Posté 18 Octobre 2005 Partager Posté 18 Octobre 2005 Rerebonjour, Tu peux nous remettre ton code corrigé stp ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
mathieu147 Posté 18 Octobre 2005 Auteur Partager Posté 18 Octobre 2005 Voilà, j'ai carrément changé, pour que ce soit plus clair... En fait j'ai refait pareil, mais en deux pages. Sur la première, un bête formulaire en html: <form action="auth.php" method="post"> <p>Login:</p><br /> <input type="text" name="login"> <p>Mot de passe:</p><br /> <input type="password" name="pass"> <br /> <input type="Submit" value="Ok"></form> et la deuxième page (auth.php) contient ceci: <?php//Récupération du login et de mot de passe entrés$login = $_POST['login']; $pass = $_POST['pass']; //Connection à la base de données$mysql_id = mysql_connect('hote', 'login', 'mot_de_passe');mysql_select_db('base', $mysql_id);//Construction de la requète: On va chercher le mot de passe correspondant au membre dont on a le login.$requete = "SELECT mdp FROM membres WHERE login='" . $login . "'";//Soumission de la requète à la base, et stockage du résultat dans la variable $result$result = mysql_query($requete,$mysql_id);//Mise en forme du résultat par PHP. La variable $membre contiendra le mot de passe de l'enregistrement trouvé.$membre = mysql_fetch_object($result);//La variable $bonmotdepasse contient le mot de passe venant de la base.$bonmotdepasse = $membre->mdp;//Vidage de la variable pour désencombrer la mémoiremysql_free_result($result);//Comparaison des mots de passeif($bonmotdepasse==$motdepasseentre){ setcookie("passe","ok"); Header("Location: ".$_SERVER["PHP_SELF"]);}elseif($bonmotdepasse!=$motdepasseentre){ setcookie("passe"); Header("Location: ".$_SERVER["PHP_SELF"]);}?> Tout ce code php est AVANT tout le reste, avant même le doctype. J'ai toujours ce Warning: Cannot modify header information - headers already sent aux lignes avec setcookie() et Header(). Encore merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
mathieu147 Posté 18 Octobre 2005 Auteur Partager Posté 18 Octobre 2005 Maintenant ça marche... Je ne sais pas comment ça se fait, j'ai fait un nouveau fichier, j'ai copier/collé petit à petit pour voir à partir de quand ça commençait à foirer, et puis je suis arrivé au bout et ça a fonctionné. La vérité est ailleurs, moi je vous le dis... En tout cas, merci de votre soutient! :-D Lien vers le commentaire Partager sur d’autres sites More sharing options...
Compte supprimé Posté 18 Octobre 2005 Partager Posté 18 Octobre 2005 Et c'était quoi ce carré au début de ton code ?? Lien vers le commentaire Partager sur d’autres sites More sharing options...
MS-DOS_1991 Posté 19 Octobre 2005 Partager Posté 19 Octobre 2005 Et c'était quoi ce carré au début de ton code wink.gif ?? Bien vu Il me semble aussi que la fonction setcookie() renvoie le même type d'information que header(). Par conséquent, l'usage de l'une interdit l'autre P.S: Dites-moi si je me trompe Lien vers le commentaire Partager sur d’autres sites More sharing options...
Compte supprimé Posté 19 Octobre 2005 Partager Posté 19 Octobre 2005 P.S: Dites-moi si je me trompe Tu te trompe. Quand tu appelle setcookie() le serveur s'en souvient mais n'envoie rien, il le fait soit à l'appel du header(), ou au premier affichage Lien vers le commentaire Partager sur d’autres sites More sharing options...
MS-DOS_1991 Posté 19 Octobre 2005 Partager Posté 19 Octobre 2005 Tu te trompe.Quand tu appelle setcookie() le serveur s'en souvient mais n'envoie rien, il le fait soit à l'appel du header(), ou au premier affichage wink.gif Au temps (autant) pour moi alors Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 19 Octobre 2005 Partager Posté 19 Octobre 2005 Oui, c'est le petit carré qui coinçait, celui avant le <?php Lien vers le commentaire Partager sur d’autres sites More sharing options...
mathieu147 Posté 19 Octobre 2005 Auteur Partager Posté 19 Octobre 2005 Moi je ne vois pas de petit carré avant <?php :-/ Enfin, merci quand-même :-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
MS-DOS_1991 Posté 19 Octobre 2005 Partager Posté 19 Octobre 2005 Moi je ne vois pas de petit carré Pourtant il y en a un: <?php Lien vers le commentaire Partager sur d’autres sites More sharing options...
mathieu147 Posté 19 Octobre 2005 Auteur Partager Posté 19 Octobre 2005 Et moi je n'en vois pas?! C'est un problème à approfondir, ça... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant