problème lors d'une recherche en SQL et caractères spéciaux

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 15:23

Bonjour à tous !

Pour enregistrer mes champs dans ma BDD je les traite avec un htmlentities() de php.
Jusque là tout va bien.

Par contre lorsque je fais une recherche cela me pose problème :

par exemple je cherche les prénoms qui contiennent "ea", ma requête va me retourner tous les prénoms avec un "é" car il est écrit dans la bdd "é" donc contenant "ea"... Auriez vous une idée sur comment je pourrais traiter cela (une fonction sql ?) ??

Merci d'avance !

Frédéric

Amauri
WRInaute discret
WRInaute discret
 
Messages: 221
Inscription: 7 Avr 2011

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 15:28

Salut,

Non, il n'y a pas de fonction pour faire ça puise que mysql n'a pas de rapport direct avec html.

Pourquoi insérer les champs encodés ?
Une solution serait de décoder l'ensemble des champs dans la bdd. C'est une grosse base ?


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 15:29

fraid26 a écrit:Pour enregistrer mes champs dans ma BDD je les traite avec un htmlentities() de php.
Jusque là tout va bien.

Non, tu as tord.
Il ne faut pas enregistrer les entités HTML en BDD, il faut juste utiliser htmlentities à l'affichage.
Et ton problème ne serait pas là.

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 15:36

OK je vois mieux... je pensais que le htmlentities aider aussi à lutter contre les injections !
du coup je suppose qu'il faut plutôt que j'utilise mysql_real_escape_string ?

Je peux décoder l'ensemble de la base, elle est petite pour le moment. Par contre il me faut recoder l'ensemble de mes pages avec des htmlentities au moment de l'affichage pour le client... et ça, ça fait du boulot !

Merci de votre aide !

Amauri
WRInaute discret
WRInaute discret
 
Messages: 221
Inscription: 7 Avr 2011

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 15:42

Si tu utilises le même charset sur la bdd et sur le site (ce qui devrait être le cas), tu n'as pas besoin d'ajouter des htmlentities à tout va..

mysql_real_escape_string va ajouter des \ devant les ' et ", ça limite les injections mais ça ne fait pas tout ;)


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 16:15

J'utilise htmlentities à l'affichage pour que par exemple le & commercial se transforme bien en &, pas du tout pour éviter un problème de charset.
Pour éviter de devoir mettre toutes les vues à jour, rien n’empêche d'appliquer un htmlentities à tous les champs après la lecture SQL.

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 16:18

oui c'est ce que je vais faire, une boucle sur les colonnes, mais j'ai un grand nombre de pages et de requettes... c'est pour ça que c'est embêtant !

Amauri
WRInaute discret
WRInaute discret
 
Messages: 221
Inscription: 7 Avr 2011

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Mar Aoû 09, 2011 16:20

Pour les caractères spéciaux, oui bien sûr, mais l'exemple de fraid26 porte sur les accents et à mon sens il n'y a pas d’intérêt a les encoder.

poulpe
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 29 Juin 2004

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Jeu Aoû 11, 2011 18:02

tu dois toujours echapper ce que tu affiches et provient d une base, puisque tu ne sais pas a l avance ce qu il s y touve. On peut bien y glisser du js par exemple, et la c est la catastrophe pour toi.

Amauri
WRInaute discret
WRInaute discret
 
Messages: 221
Inscription: 7 Avr 2011

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Jeu Aoû 11, 2011 18:48

Pour "y glisser" du js il faut que ce soit possible, plutôt que d'échapper tout ce qui sort de la bdd il ne serait pas plus judicieux de contrôler ce qui y rentre ?

poulpe
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 29 Juin 2004

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Jeu Aoû 11, 2011 19:03

Je ne dis pas qu il faut pas valider ce qui rentre, mais il faut echapper ce qui sort egalement.
ou alors si je veux poster un commentaire disant '3 < 5' par exemple je peux pas car tu vas interdire le caractere '<'

c est un peu plus developpe ce que j explique:
http://www.lazycat.org/php-output-escaping.html

Amauri
WRInaute discret
WRInaute discret
 
Messages: 221
Inscription: 7 Avr 2011

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Jeu Aoû 11, 2011 19:19

Pour afficher 3 < 5 il suffit lors de l'insertion dans la bdd d'inserer 3 &lt; 5 (avec htmlentities). Tous les navigateurs afficheront correctement le symbole.

Je ne comprend pas pourquoi tu dis "par exemple je peux pas car tu vas interdire le caractere '<' " ?

poulpe
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 29 Juin 2004

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Jeu Aoû 11, 2011 19:37

donc si tu utilises htmlentites a l insertion du champ du formulaire, tu te retrouves avec le probleme evoque dans le premier post: des accents transformes et une recherche qui marche plus.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Ven Aoû 12, 2011 15:07

poulpe a écrit:donc si tu utilises htmlentites a l insertion du champ du formulaire, tu te retrouves avec le probleme evoque dans le premier post: des accents transformes et une recherche qui marche plus.
pas obligé : il suffit de faire un str_replace(array(">","<"),array("&gt;","&lt;"),$content) et le tour est joué :wink:

poulpe
WRInaute discret
WRInaute discret
 
Messages: 90
Inscription: 29 Juin 2004

Re: problème lors d'une recherche en SQL et caractères spéciaux

Message le Ven Aoû 12, 2011 15:31

Salut.
c est sur ca marche, mais si un jour par exemple tu veux exporter ta base dans un excel ou autre format qui ne comprend pas les entites html, ben tu vas devoir modifier encore une fois tout ton fichier. A mon sens il est plus simple de garder le contenu original, et le modifier a la volee.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité