[RESOLU] échappement de caractères spéciaux multiples

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 : [RESOLU] échappement de caractères spéciaux multiples

Re: échappement de caractères spéciaux multiples

par viracocha » 23 janv. 2014, 18:22

je savais bien qu'il y avait un truc. ;)
Comme ça marche parfaitement, merci !
bonne fin de journée
Christophe

Re: échappement de caractères spéciaux multiples

par moogli » 23 janv. 2014, 18:00

la parenthèse n'a pas à être échappée dans une chaîne de caractère.

le problème c'est que tu n'utilise pas correctement les fonction à ta disposition ;)

la fonction mysq_real_escape_string est à utiliser sur les valeur à utiliser dans les requête et non pas sur la requête complète.
<?php
if ($dist1<$dis) {
    $zcommunet .= " OR commune like '" . mysql_real_escape_string($commt) . "'";
}
pour info il serait temps de passer à mysqli plutôt que mysql (l'utilisation est similaire) l'extension myslq étant vouée à disparaitre.

@+

Re: échappement de caractères spéciaux multiples

par viracocha » 23 janv. 2014, 11:58

malheureusement non, le problème reste entier :(

par rapport à mon code précédent j'ai rajouté ceci

if ($dist1<$dis)
{
$zcommunet= $zcommunet." OR commune like '".$commt."'";
$zcommpar2 = mysql_real_escape_string($zcommunet;);
echo "$zcommunet <br> escaped $zcommpar2";

}


Ce qui affiche

commune like 'Paris' OR commune like 'Andouille (Principauté d')'
escaped \'Paris\' OR commune like \'Andouille (Principauté d\')\'

donc comme je le craignais par rapport à la doc, la parenthèse n'est bien pas prise en compte pour l'échappement par cette commande :( (ou alors je m'y prends mal pour l'utiliser ?), en tous cas la requete mysql suivante ne passe pas.

d'autres suggestions ?
merci d'avance
Chris
ps : et oui je validerai la résolution du problème en temps utile ;)

Re: échappement de caractères spéciaux multiples

par moogli » 22 janv. 2014, 19:19

Modération :
Si ta question est résolue, pense à l'indiquer pour que les futures personnes qui voudront consulter ce sujet sachent qu'il contient une solution.
Tu peux réaliser cette opération toi-même en cliquant sur le bouton vert "Mettre le sujet en tant que Résolu" situé en haut de la page à côté du titre du sujet.

Re: échappement de caractères spéciaux multiples

par viracocha » 22 janv. 2014, 13:51

ah d'accord. Dans le manuel php pour cette commande http://www.php.net/manual/fr/mysqli.rea ... string.php (et des pages équivalentes en anglais), ils parlent bien de l'apostrophe, mais pas de la parenthèse, c'est pour ça que je ne l'avais pas considérée.
je vais tester ça de suite.
merci
Chris

Re: échappement de caractères spéciaux multiples

par xTG » 21 janv. 2014, 22:04

mysql_real_escape_string() ;)

Et accessoirement (ou pas remarque...) utiliser un driver qui reçoit des mises à jour de sécurité (mysqli ou PDO), ce qui n'est plus le cas du driver mysql.

échappement de caractères spéciaux multiples

par viracocha » 21 janv. 2014, 19:38

bonjour

je suis nouveau en php, et nouveau sur ce forum et bien sûr c'est pour vous soumettre une question qui a sans doute une réponse idiote:
(j'ai viré plein de lignes à dessein, c'est juste pour l'idée globale, si c'est pas clair je préciserai)
j'ai une base de données qui contient une colonne commune et deux colonnes x y de coordonnées GPS.

je récupère par une requete mysql les données pour une commune
$ref=mysql_query("select x,y from communes where commune ='$commune'");
$coord_init=mysql_fetch_array($ref);

à partir des coordonnées GPS je calcule les coordonnées correspondant à un rayon de x km

et je réinterroge ma base pour trouver les communes ayant des coordonnées correspondantes,

$target=mysql_query("select * from communes where commune !='$commune'");
while ($coord_targ=mysql_fetch_array($target))

Si la commune a des coordonnées adéquate, je mets son nom ($commt) dans une chaine que je veux utiliser avec "where" pour mon interrogation finale
if ($dist1<$dis)
{$zcommunet= $zcommunet." OR commune like '".$commt."'";}

puis je fais un
$final=mysql_query("select * from communes where commune ='$zcommunet');

Ca fonctionne très bien, merci... sauf pour une commune, qui contient à la fois des parenthèses et des guillemets:
Andouille (Principauté d')

j'ai essayé de transformer ma variable zcommunet avec addslashes mais ça oublie les parenthèses, quotemeta ça oublie l'apostrophe, et les deux ensemble ça me fait de beaux doubles antislashes...

Comment puis je m'en sortir à votre avis ? (à part modifier la base pour enlever les parenthèses mais avec 250.000 entrées j'hésite...)

Merci d'avance
Christ