Résolu New MDP par mail: problème hash MD5

  • Auteur de la discussion arbilus
  • Date de début

arbilus

Expert
Bonjours, me revoila avec du lourd :D accrochez vous:

[cpp]<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.";
}

?>[/cpp]


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 :D (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 ?
 

Chris022

Habitué
Salut,

Je ne vois pas, comme ça....essayes de mettre un "flag" (afficher la variable $newpass) avant de l'envoyer pour voir si elle à changé.
 

arbilus

Expert
^^ incroyable, impossible de trouver la solution. Tout semble parfait et rien ne fonctionne. J'ai posé la même question sur d'autres forums pour gagner du temps et de l'efficacité : pour l'instant tout le monde ne sait pas .


 

batchy

Grand Maître
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.
 

arbilus

Expert
T'as raison ! Il s'envoi pas ... J'y ai cru car j'avais mis dans le formulaire: "action="sendpass.php" " . Et sendpass.php c'est un script d'envoi de password :D .

Donc normal que ça fonctionné. Mais une fois corrigé: t'avais raison: le mail ne s'envoi pas
 

arbilus

Expert
ça donne donc ça:

[cpp]<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.";
}

?>[/cpp]
 

arbilus

Expert
Mais ça fonctionne toujours pas.... Pourtant j'ai enlever ce que vous m'avez dit: pareil: pas de mail envoyé.
 

arbilus

Expert
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:

[cpp]<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.";
}

?>[/cpp]
 

arbilus

Expert
Lol ^^ vous allez rire: problème réglé ! Par moi même :bounce: .

La solution:

http://www.newthinktank.com/2010/04/how-to-code-php-login-and-forgotten-password-scripts/


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

arbilus

Expert
Meilleure réponse
Voila (bande de flemmards :wahoo: )


[cpp]<?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>[/cpp]
 

zeb

Modérateur
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 :sol: 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.

:merci:

--------------------
PS.
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.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 098
Membres
1 586 286
Dernier membre
petitangebleu1977
Partager cette page
Haut