New MDP par mail: problème hash MD5
Dernière réponse : dans Programmation
Bonjours, me revoila avec du lourd
accrochez vous:
Bon, en faite c'est un script qui permet de générer un nouveau mdp, de l'inscrire sous forme crypté (en md5) dans la BDD et de l'envoyer par mail grace au mail du formulaire.
Bref, c'est un script de récupération de mot de passe fait par moi et grace à vous
(j'ai fait des petites compils de script) .
Le seul problème, c'est que je comprend pas pourquoi le mot de passe envoyé est sous forme crypté alors que j'ai bien spécifié que $newpass était la "version" non crypté qui serait envoyé.
Pourriez-vous m'aider à comprendre ?
accrochez vous:
<form name="form1" method="post" action="sendpass.php">
<input onclick="this.value='';" value="Votre e-mail" name="email_to" id="mail_to" size="25" />
<input name="Submit" value="Envoyer" type="submit" />
</form>
<?php //début code php
$host="localhost"; // Host name
$username="xxxxx"; // Mysql username
$password="xxxxxxx"; // Mysql password
$db_name="xxxxx"; // 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");
if (isset($_POST['Envoyer'])){
$email_to=$_POST['email_to'];
function mdpAleatoire($longueur=5)
{
$mdp = '';
// liste des caractères pour créer le mot de passe
$caracteres = 'NBVCXWQSDFGHJKLMPOIUYTREZA1234567890';
// longueur de la chaine
$nombre_caractreres = strlen($caracteres);
// On initialise la fonction aléatoire
srand(microtime()*1000000);
// On boucle sur le nombre de caractères voulus
for($i = 0; $i < $longueur; $i++)
{
// tirage d'un nombre inférieur ou égal à la longueur de la chaine de caractères
$position = rand(0, $nombre_caractreres-1);
// on cumule le caractère dans le mot de passe
$mdp = $mdp.substr($caracteres, $position, 1);
}
// on renvoie le mot de passe (on peut le stocker quelque part...)
return $mdp;
}
$newpass = mdpAleatoire();
$newpasshash = md5($newpass);
$query = new MysqlQuery($conn);
$qresult = $query->GetSingleQuery('--SINGLE',"SELECT user_password FROM _users WHERE user_email = '{$email_to}';",array("user_password"));
if($qresult < 0)
{
// Error
header("Location: edit_information.php?e=2");
exit;
}
// Store information in database
$qresult = $query->SendSingleQuery("UPDATE _users SET user_password = '{$newpasshash}' WHERE user_email = '{$email_to}';");
if($qresult == -1)
{
// Error occurred
header("Location: edit_information.php?e=2");
exit;
}
else
{
// Success, added
header("Location: edit_information.php?e=P");
exit;
}
}
$to=$email_to;
// Your subject
$subject="Your password here";
// From
$header="from: your name <admin@xxxxx.net>";
// Your message
$messages= "Your password for login to our website \r\n";
$messages.="Your password is $newpass \r\n";
$messages.="more message... \r\n";
// send email
$sentmail = mail($to,$subject,$messages,$header);
// if your email succesfully sent
if($sentmail){
echo "Your Password Has Been Sent To Your Email Address.";
}
?>
Bon, en faite c'est un script qui permet de générer un nouveau mdp, de l'inscrire sous forme crypté (en md5) dans la BDD et de l'envoyer par mail grace au mail du formulaire.
Bref, c'est un script de récupération de mot de passe fait par moi et grace à vous
(j'ai fait des petites compils de script) . Le seul problème, c'est que je comprend pas pourquoi le mot de passe envoyé est sous forme crypté alors que j'ai bien spécifié que $newpass était la "version" non crypté qui serait envoyé.
Pourriez-vous m'aider à comprendre ?
Autres pages sur : new mdp mail probleme hash md5
Lassé par la pub ? Créez un compte
Meilleure solution
Voila (bande de flemmards
)
)
<?php
$host="localhost"; // Host name
$username="xxxxx"; // Mysql username
$password="xxxxxx"; // Mysql password
$db_name="xxxxxx"; // 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");
if (isset($_POST['submitted'])) { // Handle the form.
if (empty($_POST['email'])) { // Validate the email address.
$uid = FALSE;
echo "Server Error: Please reload page";
} else {
// Check for the existence of that email address.
$query = 'SELECT id FROM users WHERE user_email = \''.mysql_real_escape_string($_POST['email']).'\'';
$result = mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());
if (mysql_num_rows($result) == 1) {
// Retrieve the user ID.
list($uid) = mysql_fetch_array ($result, MYSQL_NUM);
} else {
echo "Server Error: Please reload page";
$uid = FALSE;
}
}
if ($uid) { // If everything’s OK.
// Create a new, random password.
$newpass = substr ( (uniqid(rand(),1)), 3, 10);
$p = md5($newpass);
$query = "UPDATE users SET user_password = '{$p}' WHERE id = '{$uid}'";
$result = mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());
if (mysql_affected_rows() == 1) { // If it ran OK.
// Send an email.
$subject="Your password here";
// From
$header="from: your name <admin@xxxxx.net>";
$messages= "Your password for login to our website \r\n";
$messages.="Your password is $newpass \r\n";
$messages.="more message... \r\n";
mail($_POST['email'],$subject,$messages,$header);
print ("<script language = \"JavaScript\">");
print ("location.href = 'forgotok.html';"); // La redirection si tout c'est bien passé.
print ("</script>");
mysql_close();
exit();
} else { // If it did not run OK.
echo "<p><font color=”red” size=”+1″>Your password could not be changed due to a system error We apologize any inconvenience</font></p>";
}
} else { // Failed the validation test.
echo "<p><font color=”red” size=”+1″>Please tr again</font></p>";
}
} // End of the main Submit conditional.
?>
<form name="form1" method="post" action="">
<input onclick="this.value='';" value="Votre e-mail" name="email" id="mail_to" size="25" />
<input name="submitted" value="Envoyer" type="submit" />
</form>
Moi y a un truc que je comprend pas, c'est comment le mail peut bien être envoyé.
Après que tu ait fait ton "UPDATE", tu a un "if truc then redirige(); exit(); else redirige(); exit');" donc le code du dessous ne peut pas s'exécuter.
Donc si cette partie de code s'exécute, alors le mail ne peut pas être envoyé.
Je ne sais pas comment ton code se débrouille, mais si nulle part tu stocke ton mot de passe en clair, alors tu ne pourra jamais le récupérer après une redirection.
Après que tu ait fait ton "UPDATE", tu a un "if truc then redirige(); exit(); else redirige(); exit');" donc le code du dessous ne peut pas s'exécuter.
Donc si cette partie de code s'exécute, alors le mail ne peut pas être envoyé.
Je ne sais pas comment ton code se débrouille, mais si nulle part tu stocke ton mot de passe en clair, alors tu ne pourra jamais le récupérer après une redirection.
ça donne donc ça:
<form name="form1" method="post" action="">
<input onclick="this.value='';" value="Votre e-mail" name="email_to" id="mail_to" size="25" />
<input name="Submit" value="Envoyer" type="submit" />
</form>
<?php //début code php
$host="localhost"; // Host name
$username="xxxxx"; // Mysql username
$password="xxxxxxxxxx"; // Mysql password
$db_name="xxxxxxxx"; // 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");
if (isset($_POST['Envoyer'])){
$email_to=$_POST['email_to'];
function mdpAleatoire($longueur=5)
{
$mdp = '';
// liste des caractères pour créer le mot de passe
$caracteres = 'NBVCXWQSDFGHJKLMPOIUYTREZA1234567890';
// longueur de la chaine
$nombre_caractreres = strlen($caracteres);
// On initialise la fonction aléatoire
srand(microtime()*1000000);
// On boucle sur le nombre de caractères voulus
for($i = 0; $i < $longueur; $i++)
{
// tirage d'un nombre inférieur ou égal à la longueur de la chaine de caractères
$position = rand(0, $nombre_caractreres-1);
// on cumule le caractère dans le mot de passe
$mdp = $mdp.substr($caracteres, $position, 1);
}
// on renvoie le mot de passe (on peut le stocker quelque part...)
return $mdp;
}
$newpass = mdpAleatoire();
$newpasshash = md5($newpass);
$query = new MysqlQuery($conn);
$qresult = $query->GetSingleQuery('--SINGLE',"SELECT user_password FROM _users WHERE user_email = '{$email_to}';",array("user_password"));
if($qresult < 0)
{
// Error
header("Location: edit_information.php?e=2");
}
// Store information in database
$qresult = $query->SendSingleQuery("UPDATE _users SET user_password = '{$newpasshash}' WHERE user_email = '{$email_to}';");
if($qresult == -1)
{
// Error occurred
header("Location: edit_information.php?e=2");
}
else
{
$to=$email_to;
// Your subject
$subject="Your password here";
// From
$header="from: your name <admin@xxxxxxx.net>";
// Your message
$messages= "Your password for login to our website \r\n";
$messages.="Your password is $newpass \r\n";
$messages.="more message... \r\n";
// send email
$sentmail = mail($to,$subject,$messages,$header);
}
}
// if your email succesfully sent
if($sentmail){
echo "Your Password Has Been Sent To Your Email Address.";
}
?>
Après quelques modifs je suis arrivé à ça comme erreur
Parse error: syntax error, unexpected T_VARIABLE in /home/arbilus/public_html/newpass.php on line 73
Voici le code:
Parse error: syntax error, unexpected T_VARIABLE in /home/arbilus/public_html/newpass.php on line 73
Voici le code:
<form name="form1" method="post" action="">
<input onclick="this.value='';" value="Votre e-mail" name="email_to" id="mail_to" size="25" />
<input name="Submit" value="Envoyer" type="submit" />
</form>
<?php //début code php
$host="localhost"; // Host name
$username="xxxxx"; // Mysql username
$password="xxxx"; // Mysql password
$db_name="xxxxxxxx"; // Database name
if (isset($_POST['Submit'])){
function mdpAleatoire($longueur=5)
{
$mdp = '';
// liste des caractères pour créer le mot de passe
$caracteres = 'NBVCXWQSDFGHJKLMPOIUYTREZA1234567890';
// longueur de la chaine
$nombre_caractreres = strlen($caracteres);
// On initialise la fonction aléatoire
srand(microtime()*1000000);
// On boucle sur le nombre de caractères voulus
for($i = 0; $i < $longueur; $i++)
{
// tirage d'un nombre inférieur ou égal à la longueur de la chaine de caractères
$position = rand(0, $nombre_caractreres-1);
// on cumule le caractère dans le mot de passe
$mdp = $mdp.substr($caracteres, $position, 1);
}
// on renvoie le mot de passe (on peut le stocker quelque part...)
return $mdp;
}
$newpass = mdpAleatoire();
$newpasshash = md5($newpass);
mysql_connect("$host", "$username", "$password")or die("cannot connect to server");
mysql_select_db("$db_name")or die("cannot select DB");
$qresult = GetSingleQuery('--SINGLE',"SELECT user_password FROM _users WHERE user_email = '{$email_to}';",array("user_password"));
if($qresult < 0)
{
// Error
header("Location: edit_information.php?e=2");
exit;
}
// Store information in database
$qresult = SendSingleQuery("UPDATE _users SET user_password = '{$newpasshash}' WHERE user_email = '{$email_to}';");
if($qresult == -1)
{
// Error occurred
header("Location: edit_information.php?e=2");
exit;
}
else
{
// Success, added
header("Location: edit_information.php?e=P");
exit;
}
}
mysql_close ()
$email_to=$_POST['email_to'];
$to=$email_to;
// Your subject
$subject="Your password here";
// From
$header="from: your name <admin@xxxxxx.net>";
// Your message
$messages= "Your password for login to our website \r\n";
$messages.="Your password is $newpass \r\n";
$messages.="more message... \r\n";
// send email
$sentmail = mail($to,$subject,$messages,$header);
// if your email succesfully sent
if($sentmail){
echo "Your Password Has Been Sent To Your Email Address.";
}
?>
Lol ^^ vous allez rire: problème réglé ! Par moi même
.
La solution:
http://www.newthinktank.com/2010/04/how-to-code-php-log...
Bon, c'est vrai il y a un paquet d'erreur, mais j'ai tout corrigé .
(je vous donne pas le code tout corrigé, ce serait trop facile et si j'y suis arrivé, alors tout le monde doit y arriver. Surtout vous.)
. La solution:
http://www.newthinktank.com/2010/04/how-to-code-php-log...
Bon, c'est vrai il y a un paquet d'erreur, mais j'ai tout corrigé .
(je vous donne pas le code tout corrigé, ce serait trop facile et si j'y suis arrivé, alors tout le monde doit y arriver. Surtout vous.)
Merci arbilus.
Du coup, je change la meilleure réponse pour te l'attribuer encore une fois.
Sache que si ce forum est fréquenté par des cadors, des épées, des moustachus en tous genres
tous ne sont pas spécialistes de tous les domaines qu'englobe la programmation en informatique.
S'il ne fait pas de doute que Batchy se les frise, tu auras j'espère rendu service à d'autres. C'est le but recherché. Que les discutions des uns, avec problème+solution, puissent servir aux autres.
--------------------
PS.
Je suis une bille en péachpé, mais pas en sécurité. Note bien que le mot de passe n'est pas crypté, mais hashé, comme tu le précises bien dans le titre. Cette façon de faire est souvent suffisante pour un petit site personnel. A ne pas utiliser sur un site commercial, par exemple.
Du coup, je change la meilleure réponse pour te l'attribuer encore une fois.
Sache que si ce forum est fréquenté par des cadors, des épées, des moustachus en tous genres
tous ne sont pas spécialistes de tous les domaines qu'englobe la programmation en informatique.S'il ne fait pas de doute que Batchy se les frise, tu auras j'espère rendu service à d'autres. C'est le but recherché. Que les discutions des uns, avec problème+solution, puissent servir aux autres.
--------------------
PS.
Citation :
sous forme crypté (en md5)Je suis une bille en péachpé, mais pas en sécurité. Note bien que le mot de passe n'est pas crypté, mais hashé, comme tu le précises bien dans le titre. Cette façon de faire est souvent suffisante pour un petit site personnel. A ne pas utiliser sur un site commercial, par exemple.
Lassé par la pub ? Créez un compte
- Contenus similaires :