Syntaxe requete sql mysql_escape_string

Fermé
feyesh - 7 nov. 2012 à 16:15
 feyesh - 8 nov. 2012 à 17:21
Bonjour à tous,
Je souhaite faire une requete sql avec mysql_escape_string
Pas de soucis pour les faire avec POST, mais impossible de la faire fonctionner avec une variable :
$requete = 'UPDATE utilisateur SET
pass = "'.mysql_escape_string(hash("sha256", "' .$monmdp. '")).'"
WHERE login="'.$loginemail.'"'
mysql_query($requete) or die ('erreur sql !'.$requete.'<br />'.mysql_error());


monmdp vient de :
     $monmdp = Genere_Password(8);


> Pouvez vous m'indiquer la bonne formulation svp pour que je comprenne mon erreur ?

> J'ai beaucoup de mal avec la syntaxe php / mysql, ou puis je trouver des tutos dessus ?
S'agit il de concaténation ? chaine de caractere ?
J'ai 2 livres sur PHP mais je ne trouve pas les réponses à mes questions dedans, faute d'exemple utile.

Merci d'avance

Ps : autre question : le SHA256 est il nécessaire ? SHA1 n'est il pas suffisant ?

5 réponses

Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
7 nov. 2012 à 16:41
bonjour,

il manque un ; a la fin de la requetes
0
Utilisateur anonyme
7 nov. 2012 à 17:00
Bonjour

Il te manque effectivement un ; à la fin de la requête, mais ce n'est pas tout.

Il vaut mieux utiliser mysql_real_escape_string que mysql_escape_string

Le second paramètre de hash devrait être simplement $monmdp, pas "' .$monmdp. '".
La fonction mysql_escape_string est absolument inutile sur le résultat de hash : comme hash (sans 3ème paramètre) ne rend que des caractères alphanumériques hexadécimaux, il n'y a absolument aucun risque d'injection de quoi que ce soit. Par contre, cette fonction serait utile sur $loginemail, qui vient sans doute d'un formulaire et qui peut donc contenir n'importe quoi.

$requete = 'UPDATE utilisateur SET
pass = "'.hash("sha256",$monmdp).'"
WHERE login="'.mysql_real_escape_string($loginemail).'"';
mysql_query($requete) or die ('erreur sql !'.$requete.'<br />'.mysql_error());
0
Un grand merci pour tes explications et cette correction.
J'applique de suite.
0
Encore un probleme de syntaxe.

Si j'ajoute des mysql_real_escape_string dans l'une de mes requetes, ma syntaxe est incorrecte et j'obtiens évidement un message d'erreur.
Ma difficulté vient de STR_TO_DATE qui est mal formulé.


$requete = 'INSERT INTO trajets (idclient, datetrajet, heuretrajet, adressedepart,nomdestinataire,idtype,adressearrive,distancetrajet) 
VALUES  
( 
idutilisateur="'.mysql_escape_string($donnees['idutilisateur']).'", 
datetrajet="'.STR_TO_DATE('$datetrajet', '%d/%m/%Y').'", 
heuretrajet="'.mysql_real_escape_string($_POST['heuretrajet']).'", 
)';


Par ailleurs, faut il protéger aussi STR_TO_DATE avec un mysql_real_escape_string?
0
Utilisateur anonyme
8 nov. 2012 à 15:08
Avec ou sans mysql_real_escape_string, cette requête n'a pas de sens.
Normalement, une requête INSERT c'est
INSERT INTO table (liste de champs) VALUES(liste de valeurs)
avec autant de valeurs que de champs.
Mais toi, dans ta liste de valeurs, tu mets en fait une liste de champ=valeur.
Autre point : si tu mets $datetrajet entre apostrophes '$datetrajet', ce n'est plus une variable mais un simple texte (alors qu'entre doubles quotes"$datetrajet" ou sans quotes du tout, cela représente bien le contenu de la variable)
Enfin, STR_TO_DATE est une fonction MYSQL, pas une fonction PHP. Elle doit donc être à l'intérieur de la requête, or toi tu l'as écrite comme une fonction PHP. Il ne faut pas protéger STR_TO_DATE, ce qui n'a pas de sens puisqu'elle n'est pas évaluée par PHP, par contre il faut bien échapper le $datetrajet que tu lui passes
Plus divers petits problèmes de mélange de ' et de ", plus une virgule en trop à la fin...
Si tu ne veux remplir que 3 champs, ce qui suppose que les autres ont des valeurs par défaut :

$requete = 'INSERT INTO trajets (idutilisateur,datetrajet,heuretrajet) 
VALUES  ( "'.mysql_real_escape_string($donnees['idutilisateur']).'", 
STR_TO_DATE("'.mysql_real_escape_string($datetrajet).'", "%d/%m/%Y") , 
"'.mysql_real_escape_string($_POST['heuretrajet']).'" )';
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Je ne sais pas comment te remercier, sincèrement.
Je vais relire mes bouquins sur php, à partir du début.
Je confond en effet les ",' , [], (), bref la syntaxe me pose des soucis.
0