Envoi de mot de passe par email

arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015 - 13 juin 2010 à 19:11
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015 - 19 juin 2010 à 16:11
J'ai un problème avec ce code:

<form action="" name="send" method="post">


</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 url_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:');
}
?>



(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.

28 réponses

devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
14 juin 2010 à 05:07
salut,
if (isset($_POST['courriel'])){
//tu te connecte
else {
//tu ne te connect pas et en voulant executer
$query = "SELECT * FROM url_users WHERE user_email='$courriel'";
$resultat = mysql_query($query)
or die("L'interrogation a echouée car ". mysql_error() ."." );
//l'erreur surviens
}
//pour resoudre ca place le mysql_connect() en //dehors du couple if/else

CORDIALEMENT
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 06:55
Ok, ça marche 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...
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
14 juin 2010 à 10:15
1- forgot2.php c'est le fichier dans lequel ce trouve le code ci-dessous ?
2- j'ai supprimer deux header ? quel header
3- il ne doit pas avoir d'affichage ni d'espace avant l'utilisaion de la fonction header() or dans ton code il y'a le formulaire qui est au dessus et en bas tu fais appel a celle-ci
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 12:55
Oui, forgot2.php est bien le fichier dans lequel ce trouve le code ci-dessus.

Les header que j'ai supprimé sont cela:
header('Location:signup.php');

et
header('Location:');


Je ne comprend pas ce que tu veux dire par "pas d'affichage ni d'espace".
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
14 juin 2010 à 13:02
par exemple
echo "test";
header("location:index.php") ceci cause l'erreur precedent c'est a dire already sent car le echo lui même en voie un header; il de meme si elle preceder par du html et par espace je voulais dire si tu a le caractere espace" " dans le fichier du code source avant l'appel de header() tu a la meme erreur ceci est valable aussi pour la fonction session_start()
donc ton erreur viens sur la ligne 27 je sur que ca correspond a du html ou un espace d'identation
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 13:26
Ok, j'ai décidé de pas m'embeté: j'ai supprimé les 2 headers. Donc j'ai bien aucunes erreurs, mais je reçois pas les identifiants par mail...
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
14 juin 2010 à 13:38
fait

if(!mail($courriel, 'qfdqsfq.kk. Votre mot de passe', $message, "From:sqdqsd@qfdqsfq.kk" )) {
die("mail non envoyer");
}
ci c'est le cas le problème viens du en guise d'information mail en local ne marche pas si ton serveur smtp requis une authentification comme le cas avec stmp.live.fr donc penche toi vers phpmailer et en plus avec mail simplement si tes headers ne sont pas bien construit il y'a un gros risque que tes messages soit considérer comme spam donc même s'il sont envoyer il seront dans le courrier indésirable donc avec phpmailer tu pourra éviter ca
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 14:54
Je ne comprend pas, je fait ça comme tu m'as dit:

<form action="" name="envoi" method="post">


</form>

<?php //début code php
$connec = mysql_connect("localhost", "xxxxx", "zzzzzzz" );
mysql_select_db("yyyyyy_acces" );
if (isset($_POST['courriel'])){
// test des variables
$_SESSION['recuperation']['erreur'] = 'Tous les champs sont obligatoires';
} else {
$courriel = htmlentities(addslashes( $_POST['courriel']));
$sql "SELECT * FROM url_users WHERE user_email '".$courriel."'";
$requete = mysql_query($sql);
$utilisateur = mysql_fetch_object($requete);
$nbUtilisateurs = mysql_num_rows($requete);
mysql_close($connec);
if ($nbUtilisateurs == 0)
$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, 'xxxxx.kk. Votre mot de passe', $message, "From:service@xxxxx.kk" );
}

if(!mail($courriel, 'xxxxx.kk. Votre mot de passe', $message, "From:service@xxxxx.kk" )) {
die("mail non envoyer");
}


Mais rien. Il n'y a aucunes erreurs et aucuns mails reçu... ça m'énerve ^^. Je vois pas où ça coince .

?>
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 14:55
Oups, désolé, voici le code: 

<form action="" name="envoi" method="post"> 
 
 
</form> 

<?php //début code php 
$connec = mysql_connect("localhost", "xxxxx", "zzzzzzz" ); 
mysql_select_db("yyyyyy_acces" ); 
if (isset($_POST['courriel'])){ 
// test des variables 
$_SESSION['recuperation']['erreur'] = 'Tous les champs sont obligatoires'; 
} else { 
$courriel = htmlentities(addslashes( $_POST['courriel'])); 
$sql "SELECT * FROM url_users WHERE user_email '".$courriel."'"; 
$requete = mysql_query($sql); 
$utilisateur = mysql_fetch_object($requete); 
$nbUtilisateurs = mysql_num_rows($requete); 
mysql_close($connec); 
if ($nbUtilisateurs == 0) 
$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, 'xxxxx.kk. Votre mot de passe', $message, "From:service@xxxxx.kk" ); 
} 

if(!mail($courriel, 'xxxxx.kk. Votre mot de passe', $message, "From:service@xxxxx.kk" )) { 
die("mail non envoyer"); 
} 

?>
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
14 juin 2010 à 15:15
if (isset($_POST['courriel'])){ 
// test des variables 
$_SESSION['recuperation']['erreur'] = 'Tous les champs sont obligatoires'; 
} else { 
//---
}

//ceci ca c problème puisque tu dit au script si je reçoit les données du formulaire je teste sinon j'envoie le mail alors que tu recoit bel et bien le formulaire ce qui fait que tu ne rentre jamais dans la condition else tu doit plutôt faire
if (isset($_POST['courriel'])){ 
// test des variables 
$_SESSION['recuperation']['erreur'] = 'Tous les champs sont obligatoires'; 
 
//traitement +envoie du mail
} else {
    // autre traitement
}
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 15:22
J'ai trouvé mieux que mon code:

<?

$host="localhost"; // Host name 
$username="arbilus"; // Mysql username 
$password="azertyab"; // Mysql password 
$db_name="arbilus_acces"; // Database name 


//Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect to server"); 
mysql_select_db("$db_name")or die("cannot select DB");

// value sent from form 
$email_to=$_POST['email_to'];

// table name 
$tbl_name=url_users; 

// retrieve password from table where e-mail = $email_to(mark@phpeasystep.com) 
$sql="SELECT user_password FROM $tbl_name WHERE user_email='$email_to'";
$result=mysql_query($sql);

// if found this e-mail address, row must be 1 row 
// keep value in variable name "$count" 
$count=mysql_num_rows($result);

// compare if $count =1 row
if($count==1){

$rows=mysql_fetch_array($result);

// keep password in $your_password
$your_password=$rows['user_password'];
// ---------------- SEND MAIL FORM ---------------- 

// send e-mail to ...
$to=$email_to; 

// Your subject 
$subject="Your password here"; 

// From 
$header="from: your name "; 

// Your message 
$messages= "Your password for login to our website \r\n";
$messages.="Your password is $your_password \r\n";
$messages.="more message... \r\n";

// send email 
$sentmail = mail($to,$subject,$messages,$header); 

}

// else if $count not equal 1 
else {
echo "Not found your email in our database";
}

// if your email succesfully sent 
if($sentmail){
echo "Your Password Has Been Sent To Your Email Address.";
}
else {
echo "Cannot send password to your e-mail address";
}

?>


Seulement là aussi, à chaque fois le message "Cannot send password to your e-mail address" s'affiche. Je ne sais pas pourquoi. Serait-ce possible que mon hébergeur refuse l'envoi d'email par script ?
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 15:27
Pas la peine d'essayer le mdp :D c'est à titre d'exemple bien sur.
0
devil_may_cry Messages postés 194 Date d'inscription dimanche 18 mars 2007 Statut Membre Dernière intervention 11 juillet 2015
14 juin 2010 à 15:40

Pas la peine d'essayer le mdp :D c'est à titre d'exemple bien sur.

de toute facon voi au pres de ton hebergeur pour voir si la fonction mail n'est pas desactiver si c'est pas le cas donc ceci peut impliquer qu'une authetification est peut etre requise dans ce cas utilise phmailer amoins que tu soit assez robuste pour gerer la connexion avec les sockets
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
14 juin 2010 à 16:21
http://www.phpeasystep.com/phptu/21.html


Problème réglé :D . Merci pour votre aide
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 juin 2010 à 20:03
Salut,

Au passage :
Le script que tu as retenu présente des failles énormes de sécurité.
Il est très facilement possible d'envoyer des mails à ton insu (spam, etc ...), de retirer tous les mots de passe de ta base, d'accéder à tous les comptes, j'en passe et des meilleures.

Ce script est à proscrire !!!

Cordialement,

Kohntark -
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
16 juin 2010 à 23:10
Mince... Est-il possible de corriger le script de façon à supprimer ces failles ?

Oh non, c'est la loose là ^^ . Je croyais en avoir finit avec ce problème .

Si vous pourriez m'aider à trouver un script du même style que celui-ci infaillible ? (peut être que vous avez ça dans vos cartons !)
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
16 juin 2010 à 23:53
Si j'utilise ce script: http://www.aspwebpro.com/aspscripts/websitetools/forgotpassword.asp

Il y a encore des failles ?
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 juin 2010 à 20:03
heu ... c'est un script ASP, pas PHP.

Mince... Est-il possible de corriger le script de façon à supprimer ces failles ?

Oui, bien sur, mais à dire vrai vu ton dernier message tu auras peut être du mal.

L'archi minimum :
- utiliser mysql_real_escape_string()
- contrôler que le format du mail reçu soit valide
- utiliser md5() comme décrit plus bas dans la page


Cordialement,

Kohntark -
0
arbilus Messages postés 93 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 20 avril 2015
17 juin 2010 à 21:18
Oui, je sais bien que c'est du ASP.. Mais je pensais qu'un du forum connaitrait et pourrais répondre à mon message... Meme si c'est un forum pour le php.

Et non, je suis pas assez fort pour corriger des failles. Mais j'aimerais bien que tu me précise quelles sont les failles de ce script.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
17 juin 2010 à 22:03
mais je pensais qu'un du forum connaitrait et pourrais répondre à mon message

Pour une question sur le langage ASP il y a le forum ASP.

Mais j'aimerais bien que tu me précise quelles sont les failles de ce script.


Je le ferai avec plaisir, et si tu t'es documenté sur la fonction mysql_real_escape_string() le lien http://fr2.php.net/manual/fr/security.database.sql-injection.php ne t'auras pas échappé. Il explique de façon assez simple les risques encourus et la manière de s'en préserver.
Avec les différents mots clés présents dans cette doc tu peux bien évidemment approfondir via les moteurs de recherche ("injection sql", "php filtrage des données utilisateur", etc ...)
Le gros point noir de ce script ce trouve à ce niveau (ainsi que les 2 autres déjà cités)

Si tu as des questions suite à ces lectures (qui seront toujours bien plus complètes que ce que tu pourras trouver sur un forum) n'hésite pas !!


Cordialement,


Kohntark -
0
Rejoignez-nous