insertion d'une phrase avec apostrophe dans Mysql

WRInaute discret
Bonjour,

J'utilise une base Mysql 4.1 en local sur mon PC.
Lorsque j'insère des phrases avec des mots contenant des apostrophes, tout se passe bien
Si j'insère la même phrase en utilisant le même code dans la base de mon compte Free, j'ai systématiquement un antislash devant mes apostrophes.

J'utilise un formulaire pour saisir mes données puis je traite les données comme ça :

Code:
$contenu = nl2br(htmlspecialchars ($contenu,ENT_QUOTES));
$sql = "INSERT INTO table  VALUES('$famille',$contenu')";
mysql_query($sql)

La seule différence que je vois est que en local ma base utilise un codage fr-ISO-8859-1 alors que sur Free c'est fr-UTF-8

Comment éviter cet antislash systématique ?

Merci d'avance.
 
WRInaute passionné
Hello,

c'est à cause du magic_quotes_gpc (une vraie saloperie).
Donc comme indiqué dans la doc, quand il est activé il te faut faire un stripslashes avant d'appeler mysql_real_escape_string(), qui est la seule fonction "necessaire et suffisante" pour l'insertion en base.
 
Nouveau WRInaute
$contenu = nl2br(htmlspecialchars ($contenu,ENT_QUOTES));

avec la fonction addslahes pour mettre en base :

$contenu = addslashes(nl2br(htmlspecialchars ($contenu,ENT_QUOTES)));

Puis pour afficher sur une page le contenu de la base en retirant les apostrophes

$contenu = stripslashes($contenu);
echo $contenu;
 
WRInaute passionné
"beurk".


Pour mettre en base : mysql_real_escape_string( $contenu, $mysql_handle );

Pour afficher : echo htmlspecialchars( $contenu );

Rien de plus, rien de moins.
 
WRInaute accro
Merci Bool, la fonction mysql_real_escape_string est pour se prémunir contre le sql injection !
Je ne connaissais pas :oops:
C'est super pratique :wink:
 
WRInaute passionné
dd32 a dit:
Merci Bool, la fonction mysql_real_escape_string est pour se prémunir contre le sql injection !

Cette fonction sert juste à créer une chaîne sql valide.
Il me semble que cela est un peu léger de n'appliquer que ce seul traitement pour se prémunir des injections SQL.
J'ai pas vraiment fait le tour de cette fonction. A priori, Elle n'empêche pas d'introduire le caractére # ( ou d'autres ) qui sert à commenter les instructions SQL.
D'un point de vue sécurité cela me semble un peu léger de n'appliquer que cette seule fonction sans appliquer des filtres aux données.
LinkId se pose les mêmes questions en ce momment.
 
WRInaute passionné
spidetra : cette fonction est amplement suffisante.... que veux tu qu'elle fasse de plus ?

Le caractère "#", on s'en fout complètement franchement... c'est un caractère comme un autre. Où est le problème ici :
Code:
insert into matable values( 'hello # world' );
?

Se prémunir des injections SQL, ça consiste uniquement à empècher un "pirate" d'exécuter du code SQL arbritaire ; donc s'il saisit du texte, ce doit être interprèté comme du texte par MySQL, idem avec des nombres, des dates, ou toute autre sorte de contenu.
Il n'y a absolument aucun autre risque derrière.
 
WRInaute accro
[Hors Sujet]
Hum, maintenant que je me relis, je vois que j'ai oublié un mot :
dd32 a dit:
Merci Bool, la fonction mysql_real_escape_string est utile pour se prémunir contre le sql injection !

C'est pas pareil :lol:
[/Hors Sujet]
 
Discussions similaires
Haut