Envoi de mot de passe par email

Rechercher

Envoi de mot de passe par email

Par arbilus  -  16 reponses  -  Le 13/06/2010 16:44  -  Editer  - 

J'ai un problème avec ce code:

[code]

[/code]

(script qui envoi le password d'un membre dans sa boite mail)

Le problème, c'est que lors de son execution ça me met "Access denied for user 'xxxx'@'localhost' (using password: NO" .

Cela veut dire que j'ai voulu essayer de me connecter sans mdp. Or je l'ai bien fait pourtant (voir: "zzzz") . Je ne comprend pas l'erreur.

PS: les xxxx, zzzz, le nom de la BDD et sqdqsd@qfdqsfq.kk sont à remplacer biensur :)

 

Réponses apportées à cette discussion

Par arbilus  -  Le 13/06/2010 16:45  -  Haut de page  - 
<form action="" name="send" method="post"><input type="text" name="courriel" value="" /><input type="submit" name="envoi" value="Remplacer" /></form> <?php //début code phpif (isset($_POST['courriel'])){$connec = mysql_connect("localhost", "xxxx", "zzzzzz" );mysql_select_db("ghgkldfs_acces" );// test des variables    $_SESSION['recuperation']['erreur'] = 'Tous les champs sont obligatoires';    header('Location:signup.php');  // redirection vers le formulaire} else {    $courriel = htmlentities(addslashes( $_POST['courriel']));$query = "SELECT * FROM users WHERE user_email='$courriel'";$resultat = mysql_query($query)or die("L'interrogation a echouée car ". mysql_error() ."." );mysql_close($connec);$message='Cher membre,Suite à votre demande voici vos identifiants de connexion à votre compteLogin de connexion : '.$pseudo.'Mot de passe : '.$motdepasse.' PS: N\'hésitez pas à faire un tour sur le forum ou sur le chat ;)';//on envoie le mailmail($courriel, 'qfdqsfq.kk. Votre mot de passe', $message, "From:sqdqsd@qfdqsfq.kk" );header('Location:');}?>
 
Par Cyrano  -  Le 14/06/2010 08:15  -  Haut de page  - 

Gros malin, regarde ton code de plus près et tente de ralentir le rythme de tes pensées en suivant pas à pas ce qui se passe pendant le déroulement des opérations ;-)

Tu vas réaliser que tu ne fais pas la connexion au bon endroit. Donc la connexion qui est effectuée est automatique mais retourne une erreur parce qu'il n'y a pas les bons paramètres.

Je ne te donne pas la réponse pour l'isntant, je te laisse la trouver, c'est trop gros pour que tu le manques.

:D

Un conseil : indente bien ton code, tu te faciliteras la lecture etdu coup auras également moins de risques de faire ce genre de faute d'inattention :

<form action="" id="send" method="post">
  <input type="text" name="courriel" value="" />
  <input type="submit" name="envoi" value="Remplacer" />
</form>
<?php //début code php
if (isset($_POST['courriel']))
{
    $connec = mysql_connect("localhost", "xxxx", "zzzzzz" );
    mysql_select_db("ghgkldfs_acces" );
    // test des variables
    $_SESSION['recuperation']['erreur'] = 'Tous les champs sont obligatoires';
    header('Location:signup.php'); // redirection vers le formulaire
}
else
{
    $courriel = htmlentities(addslashes( $_POST['courriel']));
    $query    = "SELECT * FROM users WHERE user_email='". $courriel ."'";
    $resultat = mysql_query($query) or die("L'interrogation a echouée car ". mysql_error() ."." );
    mysql_close($connec);
    $message  = 'Cher membre,
Suite à votre demande voici vos identifiants de connexion à votre compte
Login de connexion : '. $pseudo .'
Mot de passe : '. $motdepasse.'
PS: N\'hésitez pas à faire un tour sur le forum ou sur le chat ;)';
    //on envoie le mail
    mail($courriel, 'qfdqsfq.kk. Votre mot de passe', $message, "From:sqdqsd@qfdqsfq.kk" );
    header('Location:');
}
?>

 

 
Par arbilus  -  Le 14/06/2010 12:51  -  Haut de page  - 

trouvé ! (il fallait mettre le mysql connect avant le if ) mais maintenant j'ai une autre erreur: "Warning: Cannot modify header information - headers already sent by (output started at /home/xxxx/public_html/forgot2.php:6) in /home/xxx/public_html/forgot2.php on line 27 " Donc ce que j'ai fait, c'est que j'ai supprimé ces 2 "header" du code. Et là... Tout fonctionne ! Ou presque... : Pas d'erreur , mais aucun mail reçu. Je ne comprend pas...

 
Par Cyrano  -  Le 14/06/2010 13:10  -  Haut de page  - 

C'est presque ça : la connexion à MySQL était effectivement mal placée, mais au départ, la logique était de n'effectuer la connexion que si elle était nécessaire.En la déplaçant avant le « if », il y aura connexion systématique. As-tu songé à la mettre dans le « else » ? dans ce cas, il n'y a connexion que si le formulaire est validé et que ça devient nécessaire.

Pour le problème de header, tu dois avoir un conflit avec un session_start quelque part : on ne peut rien envoyer au navigateur avant de lancer une session : si tu as ce message, c'est que des erreurs sont rencontrées avant le session_start et affichent donc des erreurs. Lorsque ce type de problème survient, c'est que le lancement de la session est mal placé dans le déroulement de ton code.

 
Par arbilus  -  Le 14/06/2010 16:21  -  Haut de page  - 

Problème réglé ! Voir:

 
Par arbilus  -  Le 14/06/2010 16:23  -  Haut de page  - 

Merci pour ton aide

 
Par Cyrano  -  Le 14/06/2010 16:32  -  Haut de page  - 

Pas de quoi.

Mais attention quand même : j'ai regardé un peu le tuto, j'y ai relevé divers problèmes dont un majeur.

À partir du code suivant montré dans le tuto :

$email_to = $_POST['email_to'];
$tbl_name=members;
$sql="SELECT password FROM $tbl_name WHERE email='$email_to'";

Il y a une erreur à la ligne 2 : « members » devrait être entre guillemets, là tu vas avoir une erreur de constante indéfinie.

La faute majeure, c'est que ce code est ouvert à un piratage par injection SQL. Ce code ne montre nulle part de validation des données envoyées, donc si dans le champ « email_to » j'écris ceci : « ' OR name ='admin », ça va donner au final la requête suivante :

SELECT password FROM members WHERE email='' OR name ='admin'

Je te laisse deviner les conséquences possibles.

 

 
Par arbilus  -  Le 19/06/2010 14:46  -  Haut de page  - 

Mince, alors comment je peux faire ? (désolé du temps de réponse, j'étais occupé)

 
Par arbilus  -  Le 19/06/2010 14:47  -  Haut de page  - 

Parceque je vois pas en quoi un mail de confirmation permettrait d'empecher cela...

 
Par Cyrano  -  Le 21/06/2010 08:17  -  Haut de page  - 

Tu peux dans un premier temps valider les données reçues, par exemple vérifier que l'adresse de courriel est conforme. Ensuite, tu peux les protéger avec la fonction mysql_real_escape() qui va transformer les apostrophes en « \' » : en faisant ça, la requête que j'ai illustrée précédemment deviendrait :

SELECT password FROM members WHERE email='\' OR name =\'admin'

Dans ce cas, la requête ne retournera aucun résultat : partant de là, tu peux renvoyer un message d'erreur au lieu du mot de passe.

 
Par arbilus  -  Le 21/06/2010 13:17  -  Haut de page  - 

Ok, je prend en compte ce que tu dis.

 
Par Cyrano  -  Le 21/06/2010 13:20  -  Haut de page  - 

Garde toujours à l'esprit un principe fondamental : on ne peut jamais accorder une confiance pleine et entière aux données reçue d'un utilisateur. La validation est dont systématiquement obligatoire et ne doit en aucun cas être négligée.

Si tu le souhaites, mets ici le code que tu envisages de mettre en fin de compte quand il sera prêt et il se trouvera toujours quelqu'un pour te donner un commentaire sur sa validité :)

 
Par arbilus  -  Le 21/06/2010 13:22  -  Haut de page  - 

Je suis entrain de regarder ça:

 

ça me semble vraiment pas mal: tout fonctionne, je reçoit bien un nouveau mot de passe (encore mieux que ce que je voulais) . Avec ajout en MD5 dans la BDD . Bref, je crois que j'ai trouvé ce que je cherchais .

C'est bourré de fautes, mais je me suis arrangé pour les enlevé .

 

Donc problème (je pense) définitivement réglé ! Cependant, merci pour ton aide.

 
Par Cyrano  -  Le 21/06/2010 13:28  -  Haut de page  - 

Pas de quoi :)

Pour les fautes, n'hésite jamais à prendre le temps nécessaire à leurs corrections, tu en retireras un bénéfice non négligeable à long terme. Mon tout premier script en PHP, c'était un forum. Il relativement complet quoique très basique, on est très loin d'un PHPBB, mais même j'ai écrit ça en 2003, depuis 4 ou 5 ans, je n'y ai pas apporté la moindre correction et il fonctionne toujours malgré les changement de versions de PHP sur le serveur. À l'époque, je n'étais qu'un amateur, apprenant le PHP comme toi aujourd'hui. Paradoxalement, je suis aujourd'hui un professionnel et je gagne ma vie avec le PHP, mais je dois passer un temps considérable à corriger des erreurs laissées par des prédecesseurs laxistes. Rigueur et discipline sont les règles indispensables si tu veux construire des applications solides et durables ;)

 
Par arbilus  -  Le 21/06/2010 13:43  -  Haut de page  - 

Merci du conseil !

 
Par  -  Le 07/01/2012 06:03  -  Haut de page  - 

Really very nice Good article! Thank you so much for sharing this post. discount ugg boots

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |