Page 1 sur 1

update illogique après md5

Posté : 27 déc. 2007, 21:12
par Snipy
Rebonjour,

Voila 2h que je m'arrache els cheveux sur un bout de code minable


Tellement faible que j'ai du y glisser uen erreur que je n'arrive toujours pas à trouver.

pour résumé ce code récupère une clé et un nouveau mot de passe qui sont dans un lien que le membre à reçu par mail (après oublie de mot de passe) et l'objectif est de lui créer un nouveau pass.
Voici le code

if($_GET['activ_pass'])
{
	$activ_pass = mysql_real_escape_string($_GET['activ_pass']);
	$id = (int) $_GET['m'];
	
	$sql= mysql_query("SELECT id, new_pass FROM membres WHERE id='".$id."' AND activ_pass='".$activ_pass."'");
	
	if(!empty($sql))
	{
	$mdp = mysql_result($sql, 0, 1);
	$mdp = md5($mdp);

			//Mise à jour du nouveau password
		$query = mysql_query("UPDATE membres SET  mot_de_passe='".$mdp."'  WHERE id='".$id."'")or die (mysql_error()) ;

			//Effacement des clées d'activations.
			$sql= mysql_query("UPDATE membres SET activ_pass = '', new_pass = '' WHERE id = '" . $id . "'");
	echo '<p class="confirmation">Vous avez bien modifier votre mot de passe, vous pouvez maintenant vous connecter avec votre nouveau mot de passe (fournie dans le mail d\'activation).</p>';
	}
Le soucis vient de la mise à jour du password, aucune erreur, mais quand je regarde dans la BDD le nouveau pass inséré, c'est toujours le même j'ai beau m'envoyer 15-50 pass différent, c'est le même passe crypté que je retrouve dans ma BDD :evil:

pSurement une erreur de ma part, mais j'avoue que je ne la trouve pas.

merci d'avance :)

Posté : 27 déc. 2007, 23:56
par Truc
Est-ce que le script se déroule jusqu'aux mises à jour (UPDATE) ?
Affiche les requêtes générées avant exécution pour vérifier leur construction et éventuellement suivre les conseils de débogage.

Posté : 28 déc. 2007, 00:14
par Snipy
Tout ce passe parfaitement bien, j'ai vraiment l'impression que c'est l'UPDATE qui foire
UPDATE membres SET mot_de_passe='e6414255ba9ac9dd8d568a9ba732764a' WHERE id='1'
Bonne soirée

Posté : 28 déc. 2007, 02:30
par Truc
Tu effectues une requetes pour récupérer "new_pass" appartenant au membre $id.
Tu le passes en md5
Tu l'affectes au champ "mot_de_passe"
Tu mets à jour "activ_pass" et "new_pass" avec des chaines de caractères vides

La question est... que vaut "new_pass" au début de script ?

Posté : 28 déc. 2007, 12:52
par Snipy
new_pass contient un mot de passe générer aléatoirement avant l'envoie du lien par mail à l'utilisateur.

par un echo j'ai bien vérifié que
$mdp = mysql_result($sql, 0, 1);
	echo $mdp;
	$joseph = md5($mdp);
çà retournait bien mon mot de passe.

Posté : 28 déc. 2007, 13:47
par Truc
Et ce passe est également modifié ?
Si tu récupères toujours le même forcément tu mets à jour "mot_de_passe" avec la même valeur à chaque fois.

Après la requête de màj regarde le retour de mysql_affected_rows()

Posté : 28 déc. 2007, 16:32
par Snipy
La logique voudrait que mon champ new_pass servent en fait comme lieu de stockage de transition avant que mon champ mot de passe soit lui même changé.

new_pass change à chaque fois j'en suis sur. quand ej fais un echo à chaque fois ce n'est pas le même après le md5 la clé que je vois (avec un echo) n'est jamasi la même non plus. par contre après l'INSERT quand je regarde dans ma BDD dans le champ mot de passe c'est toujours la même clé

Par contre j'ai fait le test suivant :
		$query = mysql_query("UPDATE membres SET  mot_de_passe=1  WHERE id='".$id."'")or die (mysql_error()) ;
Donc mettre 1 comme mot de passe,

et l'update dans ce cas marche OoO c'ets à dire dans mon champ mot de passe j'ai bien 1

Posté : 28 déc. 2007, 18:04
par Truc
ça ne doit pas être sorcier...
"mot_de_passe" est bien de type varchar (ou char) 32 (au moins) ?
tu as bien un membre ayant id = 1

Si le script se déroule correctement jusqu'aux màj et qu'avec une valeur en dur pour "mot_de_passe" il n'y à pas de raison que ça ne fonctionne pas avec la variable.

Et pour mysql_affected_rows() ?

Si tu exécutes cette requête directement dans phpmyadmin ça fonctionne ?

Code : Tout sélectionner

UPDATE membres SET mot_de_passe='e6414255ba9ac9dd8d568a9ba732764a' WHERE id=1
sans apostrophes pour les valeur numériques (id)

Posté : 28 déc. 2007, 18:31
par Snipy
mot d epasse est effectivement varchar(255) donc pas de problème de ce coté la.
et on a bien un membre d'id 1 :)


Si je met la requête dans phpmyadmin ça marche impect aussi :)

Concernant mysql_affected_rows() il me renvoit 0
Le problème vient donc de la. Lorsque la variable contient des données "brutes" la requete ne passe pas.

Ne serais ce pas un problème de guillemets apostrophes que j'aurais mal placé ?


Merci encore :D

Posté : 28 déc. 2007, 21:49
par Truc
Ne serais ce pas un problème de guillemets apostrophes que j'aurais mal placé ?
Tu aurais eu un message d'erreur si ça avait été le cas.
Ceci dit les apostrophes autour de l'id sont à retirer mais ça devrait malgré tout fonctionner (pour ce cas précis) :-k

Mystère et boule de gomme... je vois pas :?

Posté : 28 déc. 2007, 21:51
par Snipy
Mince je vais faire comment moi ? :roll: :cry:

Posté : 29 déc. 2007, 00:24
par momox
J'avais eu des problèmes d'updates qui ne fonctionnaient pas correctement a une époque, en réinstallant mysql c'était reparti comme avant, nickel ;)
@++

Posté : 29 déc. 2007, 00:29
par Snipy
Je ne pense aps que ça changer a grand chose puisque la requete dans la BDD marche, de plus j'ai pas acces à l'install ou autre (hébergement chez 1&1)