Envoi de mot de passe par email

Signaler
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015
-
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015
-
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

Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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...
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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".
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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...
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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 .

?>
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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"); 
} 

?>
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015

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
}
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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 ?
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

Pas la peine d'essayer le mdp :D c'est à titre d'exemple bien sur.
Messages postés
194
Date d'inscription
dimanche 18 mars 2007
Statut
Membre
Dernière intervention
11 juillet 2015


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
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

http://www.phpeasystep.com/phptu/21.html


Problème réglé :D . Merci pour votre aide
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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 !)
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

Si j'utilise ce script: http://www.aspwebpro.com/aspscripts/websitetools/forgotpassword.asp

Il y a encore des failles ?
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
93
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
20 avril 2015

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.
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -