Erreur UPDATE, 'mysql_real_escape_string' non pris en compte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Erreur UPDATE, 'mysql_real_escape_string' non pris en compte

par eru » 03 nov. 2007, 13:16

ok meci beaucoup,
il semblerait que cela marche avec les htmlspecialchar, et en changeant les simple quotes par des doubles

et merci également pour les infos sur l'échappement, effectivement j'étais à la rue. Tuotes mes excuses pour le dérangement,

Je ne peux pas mettre le topic en résolu, le premier message était en invité , mais pour moi il l'est.

Encore merci à tous

par Tracker » 03 nov. 2007, 13:15

Tu n'as pas dû saisir le principe de l'échappement:

Tu as une info à transmettre à un tiers (MySQL, Navigateur, Url ...). Pour que le tiers reçoive l'information "non déformer", le système te fournit des fonctions d'échappement.

Resultat:
Pour envoyer des infos
- à MySQL utilise mysql_real_escape_string(...)
- à un parser html utilise htmlspecialchars(...)
- comme un attribut d'url (ex ?toto=xxx) utilise urlencode(...)
- etc...


Tracker.

par Tracker » 03 nov. 2007, 13:04

Pour terminer

vire stripslashes(...) de tes input et remplace par:
htmlspecialchars($var, ENT_COMPAT, [encodage])


Tracker.

par eru » 03 nov. 2007, 13:04

bin non j'ai essayer avec des doubles et le problèmes c'est que lorsque j'utilise un double dans un champ le problème est transposé... (je suis désolé ca doit être relou pour vous.....)

C'est pour cela que tu vois un double quote au milieu du champ annee de parution sur le screenshot d'avant, il servait de test. Et s'il n'y a pas d'antislash il est normal que le texte soit tronqué...

par momox » 03 nov. 2007, 13:01

J'ai compris d'ou vient le problème ;)
Pour le value, tu utilies des simples quotes (').
Utilises des double quotes et ton problème sera résolu :p ^^

par Tracker » 03 nov. 2007, 13:01

ok, mais alors dans ce cas là, à quoi sert la fonction mysql_real_escape_string(), n'est elle pas faites pour échapper les caractères potentiellement dangereux?
Evidemment que si, mais simplement dans le but de ne pas faire bugguer ta requête (injections), mais surement pas pour déformer l'information que tu introduis. Question de logique...


Tracker.

par eru » 03 nov. 2007, 13:00

ok, mais alors dans ce cas là, à quoi sert la fonction mysql_real_escape_string(), n'est elle pas faites pour échapper les caractères potentiellement dangereux?

par Tracker » 03 nov. 2007, 12:58

Lorsque j'affiche ma requete SQL avant de l'executer, tous les caractères "génant" sont échappé, mais une fois stocké dans la bdd, il n'ya plus aucun antislash et donc je me retrouve avec des bugs d'affichage avec du texte tronqué....
C'est fait pour !! c'est normal que les \ soit absent de la base.
C'est à toi d'utiliser htmlspecialchars(...) lorsque tu convertis des infos en HTML.


Tracker.

par eru » 03 nov. 2007, 12:55

pas de soucis je te met ce petit screenshot, j'espère que cela convient, le problème est simple, le problème classique je dirais, les phrases sont coupées dans les input text


Image

par momox » 03 nov. 2007, 12:50

Peux tu montrer ce que ca donne ensuite a l'affichage ?

par eru » 03 nov. 2007, 12:15

okdak voici la fonction qui appelle les valeurs :

Code : Tout sélectionner

$sql="SELECT * FROM table WHERE id=$action;"; $resultsql = mysql_run_query($sql); $result = mysql_fetch_object($resultsql)) ... <input type="text" name="prixachat" style="width:99%" value=\''.stripslashes($result->prixachat).'\'> <input type="text" name="titre" style="width:99%" value=\''.stripslashes($result->titre).'\'> <input type="text" name="annee" style="width:99%" value=\''.stripslashes($result->annee).'\'> ...

et voici la fonction mysql_run_query()

$results = mysql_query($sql,$db) or db_mysql_die();
	return $results;

et enfin l'objet que me renvoie le code

Code : Tout sélectionner

stdClass Object ( [id] => 298 [titre] => Index général de l'oeuvre [in] => [annee] => 19"92 [edition] => B. Allieu [prixachat] => 300 [estimation] => [dateachat] => ...)

par momox » 03 nov. 2007, 12:02

Voir les valeurs que tu récupéres.
Et aussi éventuellement la fonction qui les traiterait avant affichage dans ton appli ;)
@+

par eru » 03 nov. 2007, 11:45

salut momox

merci de prendre le temps de répondre,

J'utilise en effet phpMyAdmin, cependant lorsque je rajoute les \ manuellement, ceux ci apparaissent dans les champs de la bdd et donc dans l'appli.
Dans ton appli, quelles sont les valeures que tu récuperes de ta bdd avant traitement éventuel ?
Je ne comprends pas ta question.... tu veux savoir quelles valeurs je récupère ou comment je les récupère? (désolé :oops: )[/quote]

par momox » 03 nov. 2007, 11:18

Avec quel outil regardes-tu dans ta bdd ? PhpMyAdmin ?
Si c'est le cas, il t'enleve automatiquement les antislash a l'affichage si je me souviens bien.
Dans ton appli, quelles sont les valeures que tu récuperes de ta bdd avant traitement éventuel ?

Erreur UPDATE, 'mysql_real_escape_string' non pris en compte

par Invité » 03 nov. 2007, 10:48

Bonjour, je m'excuse de vous déranger mais la je bloque....

Une erreur que je n'ai jamais vue....
Je construis une requete Update avec pluqierus variables dedans, pour ne pas avoir de problèeme avec ' et " et d'autres problèmes de sécurité j'utilise la fonction mysql_real_escape_string()...

Lorsque j'affiche ma requete SQL avant de l'executer, tous les caractères "génant" sont échappé, mais une fois stocké dans la bdd, il n'ya plus aucun antislash et donc je me retrouve avec des bugs d'affichage avec du texte tronqué....

J'ai vérifié si les magic quotes étaient activé et ne faisaient pas doublon, mais echo get_magic_quotes_gpc() me renvoie la valeur 0;

J'ai utilisé la fonction addslashes, mais le problème est le même.

J'ai vérifié l'encodage de mes champs dans la bbd, ils sont tous en utf8, et même si je change le problème persiste.

Je me tourne donc vers vous, je ne comprends plus rien..... |*()


oici un extrait de la construction de ma requete :
	$titre = mysql_real_escape_string($titre);
	$auteur = mysql_real_escape_string($auteur);
	$annee = mysql_real_escape_string($annee);
	$in = mysql_real_escape_string($in);
	$edition = mysql_real_escape_string($edition);
	$commentaires = mysql_real_escape_string($commentaires);
	...
	
	
	$sql="UPDATE `table1` SET `titre` = '".$titre."',
							`auteur` = '".$auteur."',
							`annee` = '".$annee."',
							`in` = '".$in."',
							`edition` = '".$edition."',
							`commentaires` = '".$commentaires."',
							`motscle` = '".$motscle."',
			...";

	mysql_run_query($sql);