addslashes

Eléphant du PHP | 155 Messages

10 juin 2005, 11:37

Bonjour,

j'ai des problèmes d'enregistrement et d'affichage de donnés contenant des '

Je rempli un formulaire que je transmet a une autre page:
en ce debut de page, je récupère mes données:
$servic =$_POST['nom_service'];
$service=addslashes($servic);
Ensuite j'effectue une requete sur cette valeur:
$s = "SELECT DISTINCT  id_service FROM phpgw_workf_services WHERE nom_service = '".$service."'";
$results = mysql_query($s);
$ser=mysql_fetch_array($results, MYSQL_ASSOC);
$idservice=$ser['id_service'];
Puis j'enregistre l'id_service:
$sql = "INSERT INTO phpgw_workf_versions (id_version,id_note, id_instance, id_service, titre, article, etat, destinataire, auteur) VALUES ('$id_version','$id_note','$idinstance','$idservice','$titre','$article','', '$destinataire', '')";
Mais dans ma base de donnée, ben le champ id_service est égal a 0.

Je me demandait si ca ne venait pas de addslashes car c'est la 1ère fois que j'l'utilise.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2005, 11:39

La première requete que tu fait, tu es sûr qu'elle te renvoi un résultat ?

Je ne pense pas que ça vienne de addslashes()
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 155 Messages

10 juin 2005, 11:42

Ma requete me renvoye bien l'id service , mais pas pour les phrase qui contiennts des '

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2005, 11:43

Et si tu fait afficher ta requete ($s) et que tu l'exécute depuis phpMyAdmin ?

Donne nous cette requete genérée, avec une phrase contenant un '
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 155 Messages

10 juin 2005, 11:45

SELECT DISTINCT id_service FROM phpgw_workf_services WHERE nom_service = 'CONCESSION de DISTRIBUTION PUBLIQUE d'

Voilà ma requete générée.

Mammouth du PHP | 19672 Messages

10 juin 2005, 11:46

ben voilà, là le addslashes n'a pas fait le boulot et la requête s'arrête à la première aportrophe "d' "
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1776 Messages

10 juin 2005, 11:46

magic_quotes_gpc a ON? :roll:

EDIT: essaie en mettant stripslashes à la place...
car je pense que tu envoies par exemple ==> test'eur
avec ton magic quotes_gpc ca risque de faire test\'eur
par dessus tu fais un addslashes qui te donne test\\'eur ce qui equivaut à test'eur ...
donc ensuite tu effectue ta requête et la ba boum, ca peut pas fonctionner vu que ta requête est entourée de ' (principe de l'injection code SQL)

:roll:
Modifié en dernier par DocType le 10 juin 2005, 11:50, modifié 1 fois.

Eléphant du PHP | 155 Messages

10 juin 2005, 11:49

Comment je le fait travailer le addslashes?
Pourquoi ca n'a pas marché?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2005, 11:52

magic_quotes_gpc a ON? :roll:

EDIT: essaie en mettant stripslashes à la place...
car je pense que tu envoies par exemple ==> test'eur
avec ton magic quotes_gpc ca risque de faire test\'eur
par dessus tu fais un addslashes qui te donne test\\'eur ce qui equivaut à test'eur ...
donc ensuite tu effectue ta requête et la ba boum, ca peut pas fonctionner vu que ta requête est entourée de ' (principe de l'injection code SQL)

:roll:
Je pense que tu as mis le doigt dessus
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 155 Messages

10 juin 2005, 11:55

c'est qui qui peut pas fonctionner? Là j'ai mis stripslashes (sans savoir ce que c'est ) et ca marche pas.
Je vais regarder un peu comment ca marche ainsi que magic_quotes_gpc.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2005, 11:58

La directive PHP magic_quotes_gpc est à on par défaut, et elle appelle addslashes() sur toutes les données GET, POST et COOKIE. N'utilisez pas addslashes() sur des données déjà protégées avec magic_quotes_gpc sinon vous le doublerez les protections. La fonction get_magic_quotes_gpc() est utile pour vérifier ce paramètre.
En fait, cette directive echapait déjà les ' et toi tu redemandais l'échapement des '.

Or, comme -*- font +, si tu echape 2 fois un caractère, c'est comme si tu ne faisait rien

Donc, 2 solutions :
- magic_quotes_gpc = OFF
- ne pas utiliser addslashes()
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

10 juin 2005, 12:00

Là j'ai mis stripslashes (sans savoir ce que c'est )
addslashe protège les caractères spéciaux en ajoutant un "" d'échappement;
stripslashes le retire;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 155 Messages

10 juin 2005, 12:00

Je comprend pas!!!!
Avant j'utilisait pas addslashes, et ca marchait pas! donc j'ai utilisé, et ca marche toujours pas.

Mammouth du PHP | 1776 Messages

10 juin 2005, 12:03

ba n'utilise plus et ca fonctionnera !
teste l'affichage de ta requête avec un ' dedans sans le addslashes et donnes nous le résultat, au pire c'est quelques minutes de perdues mais pour un problème étant déjà résolu... :roll:

EDIT: mon post au-dessus disait de mettre stripslashes mais en effet si magic_quotes gpc est à on ca va faire la même chose que addslashes car
test'eur
arrivé test\'eur avec magic quote gpc a on
on passe un stripslashes qui le supprime ==> PROBLEME IDENTIQUE
donc ne rien utiliser en stripslashes... :wink:
Modifié en dernier par DocType le 10 juin 2005, 12:05, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2005, 12:04

Le problème ne vient pas de là

Ca ne marche pas mieux avant que après
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer