Mobione Posté 12 Février 2006 Posté 12 Février 2006 Salut a ts ! j'ai un script qui date de 4ans que j'utilisé il ya longtemps et là quand j'ai décidé de le reprendre, tout remarche nickel ! sauf que pour se loguer sur login.php.. il ne renvoie pas sur la page de membre (index.php avc loggin par cookie), mais renvoie vers index.php comme si c'etait un visiteur non logué ! donc le problême est pour se loguer, sachant que les variables sont OK, et que la connexion a la db est OK, et vu que je suis nul en php ! alors que pour s'inscrire et le reste, tt marche nickel ! Si quelqu'un veut bien m'aider, j'en serais vraiment reconnaissent je suis vraiment bloqué ! vous pouvez voir le script ici : https://206.225.91.72:8443/sitepreview/http...i.com/login.php Ici le haut de la page login.php : <? include("$inc"."conf.php");include("$inc"."funct.php");connexiondb();if($Submit) {$req=mysql_query("select * from $db_tabl1 where email=\"$email\" and pass=\"$pass\"");if(mysql_num_rows($req)=="0"){$messag="Votre mot de passe n'est pas valide !"; }else{setcookie("pyscripts","$email/$pass");header("location: index.php");exit;}}if($Mail){$query = mysql_query("SELECT pass FROM $db_tabl1 WHERE email='$email'"); list($passwd) = mysql_fetch_row($query);$nb=mysql_num_rows($query);if($nb<1){ $message="Aucun membre ne correspond à cette adresse."; }else{$date = date("d-m-Y"); $heure = date("H:i"); $sujet = 'Votre Mot de passe'; $message = "Le $date à $heure, vous avez demmandé votre mot de passe. Le voici :\n\nMot de passe : $passwd \n---------------------------------------\nMerci de vos visites sur $nomsitew !\n$urlsitew\n"; mail ($email, $sujet, $message,"From: $mailmasterw");$message="Votre mot de passe vous a été envoyé à l'adresse <u>".$email."</u>";}}include("$inc"."avant.php");?> En attendant vos réponses,
Sarc Posté 12 Février 2006 Posté 12 Février 2006 Dans le code que tu viens de donner, il y a un espace avant <?... Si c'est réellement le cas dans ton script, le setcookie ne marchera pas, et donc personne ne sera logué effectivement !
infotech Posté 12 Février 2006 Posté 12 Février 2006 une remarque sur ton formulaire d'inscription: On peut y entrer n'importe quel informations exemple: test Votre nom :test Votre prénom :test Adresse e-mail :test Titre de votre site :test Adresse de votre site :test et ca passe! Pas de cotorolr de la validité ni du mail ni du site. à revoir. sinon bonne idée. have a fun.
Mobione Posté 12 Février 2006 Auteur Posté 12 Février 2006 sarc > non ce n'est pas le cas ! il n'ya pas d'espace avant <? du début de page ! nfotech > step by step.. l'important pour moi est qu'on puisse se loguer, le reste c'st facile ! lol
Dan Posté 13 Février 2006 Posté 13 Février 2006 J'aimerais que tu me dises ce qu'est supposé faire ce code: list($passwd) = mysql_fetch_row($query); Dan
Mobione Posté 16 Février 2006 Auteur Posté 16 Février 2006 A vrai dir je ne sais aps trop ! vu que le script d'origine le contient ! entoutcas je l'ai simplement enlvé, et cela na rien changé ! entout cas le Cookie n'est pas créé ! ce qui me pousse a croire a un problême de syntaxe. Voici l'erreure que ça me donne quand j'essaye de me connecter a la page de membres : [client 206.225.91.72] PHP Warning: setcookie() expects parameter 3 to be long, string given in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 13[client 206.225.91.72] PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 14 Si quelqu'un veut bien jeter un coup d'euil dessus ce serait vraiment sympa !
NorSeb Posté 16 Février 2006 Posté 16 Février 2006 Bonjour, Essaye en remplaçant setcookie("pyscripts","$email/$pass"); par setcookie("pyscripts",$email."/".$pass, time());
Setep-en-Bes Posté 16 Février 2006 Posté 16 Février 2006 [client 206.225.91.72] PHP Warning: setcookie() expects parameter 3 to be long, string given in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 13[client 206.225.91.72] PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 14 Deux erreurs ici : La première indique le setcookie attend un nombre "long" comme 3ème paramètre. Ce qui est étrange vu que tu n'en spécifie pas.la solution de Norseb devrait arranger çà. De toute façon il faut toujours spécifier une durée de vie à un cookie, ne serait-ce que pour en contrôler l'utilisation. La seconde est très claire : tu ne pourras pas envoyé ton cookie parce que dans config.php à la ligne 18 tu as déjà envoyé des données (un echo possible ?) et par conséquent il a envoyé les entêtes. Le cookie devant être placé dans l'entête, c'est un peu comme s'il avait raté le train. Pour solutionner le deuxième problème, tu peux, ou eviter tout echo / print ... avant l'envoi de setcookie() et header(). Ou alors mettre en tampon les données par un ob_start au début de ton script puis ob_flush à la fin pour envoyer les données. cf. Bufferisation de sortie
NorSeb Posté 16 Février 2006 Posté 16 Février 2006 La seconde est très claire : tu ne pourras pas envoyé ton cookie parce que dans config.php à la ligne 18 tu as déjà envoyé des données (un echo possible ?) et par conséquent il a envoyé les entêtes. Le cookie devant être placé dans l'entête, c'est un peu comme s'il avait raté le train. En fait, la seconde erreur découle de la première. L'affichage du premier warning empèche l'envoi d'entète (puisque celui-ci doit être fait avant tout affichage). La résolution de la première erreur devrait tout résoudre d'un seul coup
Setep-en-Bes Posté 16 Février 2006 Posté 16 Février 2006 C'est pas faux çà! C'est le réveil, j'ai du mal, merci NorSeb.
Mobione Posté 16 Février 2006 Auteur Posté 16 Février 2006 Merci de vos réponses, cela dit en remplaçant comme m'a dit de faire NorSeb la ligne de setcookie() Les erreures d'avant ne viennent plus ! par contre elles sont remplacées par d'autres erreures. [client 206.225.91.72] PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 13[client 206.225.91.72] PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/ploufi.com/httpdocs/config.php:18) in /var/www/vhosts/ploufi.com/httpdocs/login.php on line 14
NorSeb Posté 16 Février 2006 Posté 16 Février 2006 Cette erreur vient du fait que tu envoi une information autre que l'entète au navigateur avant l'envoi des entètes (où sont créés les cookies, ...). Il faut donc virer les lignes en trop avant le code php, les echo ""; , les balise html, etc... Poste ton code complet si tu veux...
Mobione Posté 16 Février 2006 Auteur Posté 16 Février 2006 Il n'ya pas de balise html, ou d'echos dans la page login.php avant le setcookie d'apres ce que je crois. Enfin tu peux voir ici, voici la page compléte : <?include("$inc"."conf.php");include("$inc"."funct.php");connexiondb();if($Submit) {$req=mysql_query("select * from $db_tabl1 where email=\"$email\" and pass=\"$pass\"") or die('Erreur de connexion');if(mysql_num_rows($req)=="0"){$messag="Votre mot de passe n'est pas valide !";}else{setcookie("pyscripts",$email."/".$pass, time());header("location: index.php");exit;}}if($Mail){$query = mysql_query("SELECT pass FROM $db_tabl1 WHERE email='$email'"); list($passwd) = mysql_fetch_row($query);$nb=mysql_num_rows($query);if($nb<1){ $message="Aucun membre ne correspond à cette adresse."; }else{$date = date("d-m-Y"); $heure = date("H:i"); $sujet = 'Votre Mot de passe'; $message = "Le $date à $heure, vous avez demmandé votre mot de passe. Le voici :\n\nMot de passe : $passwd \n---------------------------------------\nMerci de vos visites sur $nomsitew !\n$urlsitew\n"; mail ($email, $sujet, $message,"From: $mailmasterw");$message="Votre mot de passe vous a été envoyé à l'adresse <u>".$email."</u>";}}include("$inc"."avant.php");?> <form method="post" action="login.php"> <div align="left">Pour pouvoir vous identifier, veuillez saisir vos e-mail et mot de passe :<br> <? if($messag) { echo"<p align=\"center\"><b>".$messag."</b><br></p>"; }?> <br> </div> <table width="100%" border="0" cellpadding="0" align="center" cellspacing="0" height="70"> <tr bgcolor="#FFFFFF"> <td width="35%"> <div align="right"><b><font size="2"> Adresse e-mail :</font></b></div> </td> <td width="43%"> <div align="center"> <input type="text" name="email"> </div> </td> <td width="22%"> <div align="center"> </div> </td> </tr> <tr bgcolor="#FFFFFF"> <td width="35%"> <div align="right"><b><font size="2"> Mot de passe :</font></b></div> </td> <td width="43%"> <div align="center"> <input type="password" name="pass" value=""> </div> </td> <td width="22%"> <div align="center"> <input type="submit" name="Submit" value="Envoyer"> </div> </td> </tr> </table></form><div align="center"> <hr width="100%" color=#000000 size=1> <form method="post" action="login.php"> <div align="left"> <p>Mot de passe perdu ? Indiquez votre adresse e-mail et nous vous l'enverrons par e-mail : </p> <? if($message) { echo"<p align=\"center\"><b>".$message."</b><br></p>"; }?> </div> <table width="100%" border="0" cellpadding="0" align="center" cellspacing="0" height="35"> <tr bgcolor="#FFFFFF"> <td width="35%"> <div align="right"><b><font size="2"> Adresse e-mail :</font></b></div> </td> <td width="43%"> <div align="center"> <input type="text" name="email"> </div> </td> <td width="22%"> <div align="center"> <input type="submit" name="Mail" value="Envoyer"> </div> </td> </tr> </table> </form> <p> </p> <p> <?include("$inc"."apres.php");mysql_close();?> </p></div>
NorSeb Posté 17 Février 2006 Posté 17 Février 2006 Il y a une ligne vide au dessus de la balise php '<?' Ca vient peut-être de là. Sinon ca vient peut-être des 2 fichiers inclus au début du script.
Mobione Posté 17 Février 2006 Auteur Posté 17 Février 2006 il n'ya pas de ligne vide au debut du code source ! J'aimerais que tu en-juge par toi même des deux fichiers ! les deux fichiers conf.php : <?$db_host="localhost";$db_b="base";$db_pass="pass";$db_login="login";$db_tabl1="membres";$db_tabl2="modules";$nomsitew="Plouf";$urlsitew="https://206.225.91.72:8443/sitepreview/http/ploufi.com";$urldossier="https://206.225.91.72:8443/sitepreview/http/ploufi.com/index.php";$nomw="Nom";$mailmasterw="mail_AT_yahoo.fr";$adminp="adminpass";?> et le fichier funct.php : <?$local="1";function verif_session(){if(!session_is_registered('login')){Header("Location: index.php?t=login");exit;}}function connexiondb(){global $db_host, $db_login, $db_pass, $db_b;if(!($db = mysql_connect($db_host,$db_login,$db_pass))) { echo "Erreur lors de la connexion";exit;}if(!mysql_select_db($db_) {echo "Erreur lors de la sélection de la base";exit;}}// Vérifie si un champ est videfunction est_vide($champ,$message){ if(empty($champ)){echo"<script language=\"Javascript\">alert(\"$message\");history.back();</script>";exit;}}//Vérifie adresse e-mailfunction verif_email($email){$email = addslashes(stripslashes(strtolower(trim($email))));if (!ereg(".@.{5}", $email)){echo"<script language=\"Javascript\">alert(\"Vous avez mal saisi l'adresse e-mail !\");history.back();</script>";exit;}list($user, $domaine_user) = split("@", $email, 2); // vérif si email existe réellement$email_ok = checkdnsrr($domaine_user, "MX");if ($email_ok != 1){echo"<script language=\"Javascript\">alert(\"L'adresse e-mail n'est pas valide ou n'existe pas !\");history.back();</script>";exit;}}function hexa_correct($code_hexa) { $code_hexa = strtolower($code_hexa); if (!(ereg("^[0-9a-f]{6}$",$code_hexa)) ) { $message = "Votre code hexadécimal $code_hexa n'est pas correct !"; $message .= "<br>Il doit être du type : <b>FFFFFF</b>, ou encore <b>000000</b><br><br>\n"; $message .= "<a href=\"java script:history.go(-1);\">Retour au formulaire</a>\n"; die ($message); } return true;}?> Vraiment, ce script est important pour moi, et là il arrête pas de me faire l'erreur
NorSeb Posté 17 Février 2006 Posté 17 Février 2006 Envoi-moi les fichiers en MP si tu veux je jeterais un oeil...
Setep-en-Bes Posté 17 Février 2006 Posté 17 Février 2006 Comme proposé précèdement, il y a une solution qui peut te permettre de continuer en attandant de trouvé d'où viens le problème. Il s'agit de La Bufferisation de sortie. Avec un ob_start() au tout début de ton script (=au fichier demandé, pas les fichiers qu'il inclus) tu pourra mettre en cache les données avant de les envoyer, tout en pouvant envoyer des entêtes. Pour libéré le cache et l'envoyer au client : ob_flush à la fin du script. (Cette fonction est appelée par défaut à la fin d'un script, elle est donc "facultative" bien que préférable) Si toute fois ceci ne fonctionne pas, cela peut vouloir dire qu'il y a des données envoyées hors des balises php. PS: cette solution peut-être conservée définitivement, elle est très pratique et permet même un meilleur contrôle de l'affichage. Exemple, si une seule erreur se produit on efface le cache et on renvoi vers une page d'erreur ...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant