8796 sujets

Développement web côté serveur, CMS

Bonjour !

J'ai créé un espace membre. J'ai donc fait une page pour modifier des informations, notamment le mot de passe. Mais pour éviter que n'importe qui ayant pu accéder au compte (la personne n'aurait pas déco et quelqu'un serait passé derrière par exemple) puisse changer le mot de passe comme il veut, je voudrais que l'utilisateur rentre son mot de passe actuel et qu'à l'envoie du formulaire, ce mot de passe soit comparé avec celui stocké dans la base de données.

Problème : le mot de passe du formulaire n'est pas crypté, celui de la base de données, si, en md5.

J'ai alors fait cette tentative :
if(isset($_POST['mdp_old']))
	{
		$mdp_old = md5($_POST['mdp_old']);
		$mdp_v = $_SESSION['membre_mdp']; 
                //suite du code...
        }


Quand je teste, voilà ce que j'obtiens :
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"3' at line 1"

Je dois dire que je ne comprends absolument pas ce que ça raconte (pas que je comprenne pas l'anglais, mais la fin est très confuse pour moi). Et en faisant des recherches, ça dit pourtant que c'est comme cela qu'il faut faire. Je ne comprends donc pas pourquoi ça ne marche et qu'il me sort cette phrase incompréhensible pour moi ^^"

Une explication pour éclairer ma lanterne ? Smiley id
Modifié par tatsu (09 Mar 2009 - 10:53)
Bonjour,

Cela signifie qu'il y a une erreur dans ta requête MySQL. Un guillemet ou quelque chose dans ce genre peut manquer par exemple. Il nous faut plus de code pour t'aider car dans ce que tu nous donnes, il n'y a aucune requête MySQL et aucune erreur. Smiley smile
Je ne comprends. C'est pourtant la seule ligne de code que j'ai changé ! O_o

Je ne peux accéder au code avant lundi. Je regarderai donc cela lundi matin, vérifierai à nouveau mon code, et vous tiendrai au courant. Merci pour la réponse =)
Bonjour,

Je viens de regarder mon code plus attentivement, et effectivement, il manquait le guillemet fermant de la requête.

J'ai donc retenté le changement de mot de passe, et me suis rendu compte que j'avais oublié de crypter le mot de passe que je rentrais dans la base de données x) Donc maintenant, tout est bon, je n'ai plus d'erreur.

Mais je voudrais néanmoins savoir une chose :
mysql_query('UPDATE membres SET membre_mdp="'.md5($mdp).'" WHERE membre_id = "'.$id.'"') or die(mysql_error());

Voici comment j'ai écrit ma requête SQL. J'ai lu pas mal d'articles sur les " ou les ' dans les requêtes, mais beaucoup se contredisent plus ou moins sur lequel utiliser. Et là, je me demande si tous mes guillemets sont vraiment nécessaires et si cette syntaxe n'alourdit pas la requête ?
mysql_query('UPDATE membres SET membre_mdp="'.md5($mdp).'" WHERE membre_id = "'.$id.'"') or die(mysql_error());
A ma connaissance, ça n'allourdi pas le code, mais ça le rend plus dur à relire peut-être. Comme tu l'as dit, on voit tout et son contraire, le mieux est souvent de faire ce qui nous convient le mieux, à condition de faire attention aux risques d'injections.
Par contre, il me semble que les guillemets (doubles) ne sont pas standardisés en SQL... A vérifier.

Je dévie un peu du sujet mais pas trop, PDO permet de garder un code très propre et lisible, et protégé contre les injections, très facilement (en plus de nombreux autres avantages). Faut aimer l'orienté objet par contre.
http://fr2.php.net/manual/en/book.pdo.php

Et aussi, tu peux faire ton cryptage MD5 directement avec MySQL : http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_md5 . Encore une fois, c'est une question de gout, mais quand on peut soulager PHP de quelques traitements, déjà qu'il en gère souvent la majeure partie... Smiley cligne
Modifié par Planplan (09 Mar 2009 - 10:51)
Il faut surtout aimer l'anglais =p

Merci pour ces liens ! Je me pencherai dessus quand j'aurais le temps. ^^

Je vais de ce pas marquer le sujet comme résolu.