Problème avec addslashes

Problème avec addslashes - PHP - Programmation

Marsh Posté le 16-08-2004 à 10:35:00    

Salut à tous,
 
je rencontre pour la première fois un problème assez bizarre lors de l'utilisation de addslashes.
 
J'ai un script chargé d'insérer des infos dans une table. Il est de la forme :

Code :
  1. $query = "INSERT INTO ma_table (titre) VALUES '".addslashes(mon_titre)."'";


 
Mon titre est : A l'ombre des jeunes filles en fleurs.
 
Si j'affiche la query avant exécution, j'obtiens :
 

Code :
  1. INSERT INTO ma_table (titre) VALUES 'A l\'ombre des jeunes filles en fleurs';


 
Parfait me direz vous sauf que une fois l'enregistrement inséré dans la base, il devient : A l'ombre des jeunes filles en fleurs (le slash a disparu).
 
C'est la première fois que ça me fait ça. Une idée sur l'origine de ce problème ?

Reply

Marsh Posté le 16-08-2004 à 10:35:00   

Reply

Marsh Posté le 16-08-2004 à 14:36:25    

Si tu regardes ce qui est stoqué dans ta base à l'aide de phpmyadmin, c'est normal que le slash n'apparaisse pas. PhpMyAdmin fait automatiquement les stripslashes qui vont bien à l'affichage.

Reply

Marsh Posté le 16-08-2004 à 14:52:07    

BenJ9002 a écrit :

Si tu regardes ce qui est stoqué dans ta base à l'aide de phpmyadmin, c'est normal que le slash n'apparaisse pas. PhpMyAdmin fait automatiquement les stripslashes qui vont bien à l'affichage.


 
Tu es sûr de ça ? j'ai l'impression que dans certains cas, je vois mes anti-slashes (mais peut-être est-ce parce que j'ai doublé les addslashes) [:totoz]
 
Merci en tout cas.

Reply

Marsh Posté le 16-08-2004 à 15:26:48    

Je suis certain, j'ai aucun problème de slashes dans mes requetes et dans phpmyadmin, ils n'apparaissent pas.  
 
Pour confirmer, t'as qu'a faire une requete  
SELECT titre FROM ma_table; et afficher le résultat ;) Tu verras les slashes si tu ne les supprimes pas avec stripslashes :p  
 
Pour ceux que tu vois, c'est bien parce que tu as du les doubler ;)

Reply

Marsh Posté le 03-07-2005 à 23:24:31    

Désolé de déterrer ce topic mais j'ai un soucis similaire.
 
Donc j'ai un formulaire que je remplis (mettons avec ca: "l'ordinateur" ), je valide, je recupe mes champs et je fais un coup de addslashes dessus (donc j'obtiens "l\'ordinateur" ) et je fais un INSERT dans la base de données.
 
Le problème est que dans la table les "'" ne sont pas echappés (j'ai donc exactement la même chose que j'ai mis dans le formulaire) alors que j'ai bien vérifié qu'a l'INSERT ils y sont, puis de toute manière si cela n'était pas le cas j'aurais une erreur de MYSQL.
 
Comment je sais qu'ils n'y sont pas:
- je fais un SELECT sur ma ligne et j'affiche sans striplashes ou autre et j'obtiens "l'ordinateur". Ensuite si j'essai de nouveau de faire un INSERT avec cette valeur j'ai une erreur, preuve que les "\" ne sont pas présents.
- j'ai consulté la table par le client en ligne de commande et les "\" n'apparaissent pas. Je suppose que le client en ligne de commande ne fait pas de striplashes.
 
La je comprends pas trop :heink:  
Merci d'avance pour votre aide :hello:

Reply

Marsh Posté le 04-07-2005 à 00:31:57    

C'est tout à fait normal...
 
Le addslash est là pour que les requêtes ne plantent pas quand on met des quotes dans le nom d'un champ. Le backslash est un caractère d'échappement.
 
Le caractère d'échappement devant la single quote "\'" est là pour signaler à mysql qu'il ne doit pas interpréter le caractère qui le suit, et fait donc en sorte que la single quote fasse partie de la chaînes de caractères.
 
Ca sert également à éviter que des petits malins ne fasse des injections comme ils disent dans la doc : placer des quotes dans un champ de formulaire de façon à placer des conditions supplémentaires dans une requête (pour s'authentifier notamment).
 
http://php.belnet.be/manual/fr/function.addslashes.php
 
Et donc, une fois que les données sont en db, il n'y a aucun intérêt à laisser les backslashes dedans. Et de toute façon, le caractère d'échappement n'est pas un caractère en soit (ai un peu de mal à expliquer là ;-)).
Comme le "\n" pour new line, ni le "\" ni le "n" ne sont imprimés. Le "\n" est remplacé par le caractère qui correspond à une nouvelle ligne.
 
Mais si tu veux, une fois que tu récupères ta donnée de la DB, rien ne t'empêche de refaire un addslash dessus.
 
Et il ne faut pour moi jamais mettre de "\" en DB car en DB, la longueur de tes champs est déterminée à l'avance (varchar 50 par expl). Donc dans tes formulaires, tu devrais utiliser l'attribut maxlength="50" sur tes champs. Mais si ta donnée fait 50 caractères et que tu as 3 quotes dedans, ça fait 53 caractères à mettre en DB!. Et là, ça devient trop compliqué à gérer. Donc pas de backslashes en DB compris?? ;-)
 
Si tu ne comprends toujours pas, n'hésite pas.
 
A+


Message édité par autofill le 04-07-2005 à 00:35:19
Reply

Marsh Posté le 04-07-2005 à 00:53:34    

Okay donc en fait c'est tout à fait normal! Ca me rassure, je sais à quoi m'en tenir maintenant :D  
 
Merci pour ta bonne explication autofill :hello:

Reply

Marsh Posté le 04-07-2005 à 08:14:04    

arretez de faire des addslashes partout :D un mysql_real_escape_string va tres bien (ça existe aussi sur mysqli)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed