fonction Mysql_real_escape_string sous PHP
Bonjour,
Voici une erreur que je ne trouve pas et que je n'explique pas.
Y voyez vous une explication ?
Merci
Dans un formulaire un champs de saisie utilisateur se nomme 'entite_nom'.
Je récupère ce nom puis je le traite avec la fonction mysql_real_escape_string
Puis je l'affiche (ma fonction message()).
Lorsque entite_nom saisi par l'utilisateur est 'Région d'Alsace' le message affiché est "Région d\'Alsace" ce qui correspond à ce que j'attend.
Code:
1 2 3
|
$nom_long=mysql_real_escape_string($_POST['entite_nom']);
message($nom_long); |
Immédiatement après, je souhaite enregistrer le champs saisi dans ma table sql debug.
La requête 1 ne fonctionne pas alors que la requête 2 fonctionne ce qui me prouve la bonne connexion à la table.
Code:
1 2 3 4 5 6 7
|
base_connect();
$sql1="INSERT into debug (`c2`,`c3`) VALUES ('nom1','mysql_real_escape_string({$_POST['entite_nom']})')";
mysql_query($sql1);
$sql2="INSERT into debug (`c2`,`c3`) VALUES ( 'nom1','')";
mysql_query($sql2); |
Je ne comprends pas pourquoi la requête 1 ne fonctionne pas puisque :
- la fonction mysql_real_escape_string fonctionne
- la connexion à la table debug fonctionne.
Mysql_error() est correct
Mysql_error() est correct puisqu'il me restitue d\'allemagne c'est à dire ma saisie échappée.
Je sais qu'il s'agit de l'écriture dans la table qui ne fonctionne pas et je ne sais pourquoi.
J'ai simplement remarqué que l'écriture dans la table fonctionne lorsque j'applique 2 fois consécutivement la fonction mysql_real_escape_string()
Code:
1 2 3 4 5
|
$var=$_POST['valeur_saisie'];
$var= mysql_real_escape_string(var);
$var= mysql_real_escape_string(var); |
Dans ce cas ma table enregistre bien la valeur saisie échappée.
J'interroge l'hébergeur (infomaniak) par ailleurs.
Avez vous déjà rencontré ce problème?
eureka tout est dans php_flag magic_quotes_gpc On
Enfin, j'ai trouvé le pourquoi du problème et la solution.
J'espère que cela pourra servir à quelqu'un d'autre.
Mon hébergeur a positionné le paramètre magic_quotes_gpc sur OFF.
Il me confirme que mon code est correct. Pour visualiser le \ dans ma table je dois rajouter un addslashes avant mysql_real_escape_string.
Code:
1 2
|
$nom=mysql_real_escape_string(addslahes($_POST['nom'])); |
Comme je ne souhaite pas modifier tous mes scripts, j'ai préféré modifier la valeur de magic_quotes_gpc à ON.
Cela se fait en rajoutant au fichier .htaccess la ligne
Code:
1 2
|
php_flag magic_quotes_gpc On |
Maintenant la commande fait bien apparaitre le \ dans la table.
Code:
1 2
|
$nom=mysql_real_escape_string($_POST['nom']); |
Que pensez vous du positionnement de magic_quotes_gpc à ON ?
J'ai lu que PHP6 ne permettra plus l'utilisation de cette directive.
Dois je donc remodifier tous mes scripts avec addslahes ?
Merci par avance pour votre avis.
:ccool: