update illogique après md5

Eléphant du PHP | 206 Messages

27 déc. 2007, 21:12

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

27 déc. 2007, 23:56

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 206 Messages

28 déc. 2007, 00:14

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 déc. 2007, 02:30

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 ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 206 Messages

28 déc. 2007, 12:52

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 déc. 2007, 13:47

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 206 Messages

28 déc. 2007, 16:32

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 déc. 2007, 18:04

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 206 Messages

28 déc. 2007, 18:31

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 déc. 2007, 21:49

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 206 Messages

28 déc. 2007, 21:51

Mince je vais faire comment moi ? :roll: :cry:

Mammouth du PHP | 1511 Messages

29 déc. 2007, 00:24

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 ;)
@++

Eléphant du PHP | 206 Messages

29 déc. 2007, 00:29

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)