Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/10/2006, 15h34   #1
Membre régulier
 
Avatar de carelha
 
Inscription : mars 2006
Messages : 168
Détails du profil
Informations personnelles :
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 168
Points : 74
Points : 74
Par défaut apostrophe et requête

Bonjour,

j'ai un formulaire de recherche par mots clef et j'ai ajouté addslashes pour gérer les caractères spéciaux

Code :
	$_SESSION['motsclef'] = addslashes($_POST['motsclef']) ;
j'ai fait un écho de ma requête, pour vérifier que \ est bien ajouté, ce qui est le cas, puisque la requête, avec une recherche comme "d'alzheimer"' me donne

Code :
SELECT count(*) FROM guide were public LIKE '%personne âgée%' AND  (s_nom LIKE '%d\'alzheimer%' OR specifique LIKE '%d\'alzheimer%')
or, quand je cherche avec le mot alzheimer, j'ai bien des résultats, mais quand je cherche avec d'alzheimer, je n'ai aucun résultat, alors que j'ai en bdd des lignes avec "maladie d\'alzheimer" (l'antislashes est intégré dans le texte de la bdd)

Je ne comprends pas du tout pourquoi j'ai 0 résultat, merci à ceux qui pourront m'aider.
__________________
En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";
carelha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 16h22   #2
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Au lieu d'utiliser les simples quotes pour les chaînes de ta requête tu peux utiliser \" ce qui te donnera :

Code :
1
2
3
4
5
$sql = "SELECT count(*)
        FROM guide
        WHERE public LIKE \"%personne âgée%\"
        AND (s_nom LIKE \"%d'alzheimer%\"
             OR specifique LIKE \"%d'alzheimer%\")";
Et donc pas besoin d'addslashes et pas de problème de requête.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 16h28   #3
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Il y a un problème : il ne devrait pas y avoir de slash superflu dans ta base !
Une base de donnée devrait contenir exactement ce qu'à saisit l'utilisateur.
Il s'aisit alors dans phpMyAdmin (ou autre) je devrais voir pas l\'arbre ni autre bizzarrerie.

Que vaut le parametre magic_quotes_gpc dans ton phpinfo ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 16h40   #4
Membre régulier
 
Avatar de carelha
 
Inscription : mars 2006
Messages : 168
Détails du profil
Informations personnelles :
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 168
Points : 74
Points : 74
magic quote est sur on.

pour les \ intégrés, je ne sais plus pourquoi j'en suis arrivée là, mais c'était réfléchi . j'ai utilisé mysql_real_escape_string avant toutes les données entrées via un formulaire par les utilisateurs, donc il y a des \.

> bisounours je vais voir, merci
__________________
En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";
carelha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 16h52   #5
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Soit tu passes ce flag à off, soit tu fais en sortes de travailler avec des chaines naturelles dans tes scripts. Du genre :
Code :
get_magic_quotes_gpc() ? stripslashes($variable_de_requete) : $variable_de_requete
Ensuite comme d'hab, mysql_real_escape_string à l'enregistrement en bd...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 16h59   #6
Membre régulier
 
Avatar de carelha
 
Inscription : mars 2006
Messages : 168
Détails du profil
Informations personnelles :
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 168
Points : 74
Points : 74
Merci de ta réponse, mais elle n'est pas claire pour moi
soit je mets les magic quote à off

soit je fais stripslashes($variable_de_requete) pour enlever le \ mis par le magic quote quand il est à on, c'est ca ?

et ensuite je rajoute mysql_real_escape_string avant l'intégration en base de données ?

Mais dans ce cas, j'aurais quand même des \ dans ma base de données non ?

Merci de ton aide, ce point est vraiment très confus pour moi (comment ca, ca se voit !?)

et je pensais que les \ en bdd était une sécurité nécessaire, on le voit dans un nombre de tutorial très important
__________________
En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";
carelha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 17h09   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Citation:
Envoyé par carelha
Soit je mets les magic quote à off
C'est la meilleure solution si tu peux le faire sur ton serveur de prod. Pour info, dans PHP6 il semblerait n'y aura plus de magic_quote...

Citation:
Envoyé par carelha
soit je fais stripslashes($variable_de_requete) pour enlever le \ mis par le magic quote quand il est à on, c'est ca ?
Oui

Citation:
Envoyé par carelha
et ensuite je rajoute mysql_real_escape_string avant l'intégration en base de données ?
Oui

Citation:
Envoyé par carelha
Mais dans ce cas, j'aurais quand même des \ dans ma base de données non ?
Non
mysql_real_escape_string permet d'échapper les caractères spéciaux qui pourrait faire foirer une requete sur MySQL.
Par exemple si tu fait :
Ce qui sera transmis à ton client sera L'avion et pas L\'avion
C'est pareil pour les bases de données... Il est important de garder les données le plus naturelles possibles afin de faciliter :
- l'édition de ces données
- la recherche
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 17h15   #8
Membre régulier
 
Avatar de carelha
 
Inscription : mars 2006
Messages : 168
Détails du profil
Informations personnelles :
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 168
Points : 74
Points : 74
merci, je comprends mieux ce que je n'avais pas compris.

Tu connais un bon tuto pour mettre les magic quote à off ? je peux le faire une seule fois ou c'est sur chaque page ?
__________________
En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";
carelha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2006, 17h56   #9
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
C'est là que le bât blesse. C'est une config php à modifier dans le php.ini
Or suivant où se trouve ton serveur de production, tu ne pourras pas le modifier.

Il ne te reste alors plus que les directives apache via un fichier .htaccess si ton hébergeur l'accepte. Sinon c'est cuit.
Il n'est pas possible de modifier ce flag dans un script.

Donc à toi de nous en dire plus sur ton environnement.
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2006, 10h22   #10
Membre régulier
 
Avatar de carelha
 
Inscription : mars 2006
Messages : 168
Détails du profil
Informations personnelles :
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 168
Points : 74
Points : 74
je vois avec mon hébergeur pour modifier éventuellement le php.ini.


Merci beaucoup.
__________________
En essayant continuellement on finit par réussir. Donc : plus ca rate, plus on a des chances que ca marche. Shadocks.

un seul header par page, et pour les autres redirections : echo "<script language='javascript'>window.location.href='XXX.php'</script>";
carelha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h31.


 
 
 
 
Partenaires

Hébergement Web