insertion d'une phrase avec apostrophe dans Mysql

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics

totof78
WRInaute discret
WRInaute discret
 
Messages: 62
Inscription: 6 Nov 2005

insertion d'une phrase avec apostrophe dans Mysql

Message le Ven Mai 26, 2006 18:04

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: Tout sélectionner
$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.

paysite-cash
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 14
Inscription: 1 Mar 2006

Message le Ven Mai 26, 2006 18:08

tu fait un stripslasches quand tu récupères tes données plutot...

totof78
WRInaute discret
WRInaute discret
 
Messages: 62
Inscription: 6 Nov 2005

Message le Ven Mai 26, 2006 18:22

Merci bien je ne connaissais par cette fonction.


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Ven Mai 26, 2006 18:34

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.

lexarin
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 9
Inscription: 13 Déc 2005

Message le Dim Mai 28, 2006 15:19

$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;


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Dim Mai 28, 2006 18:44

"beurk".


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

Pour afficher : echo htmlspecialchars( $contenu );

Rien de plus, rien de moins.


dd32
Modérateur
Modérateur
 
Messages: 3387
Inscription: 9 Sep 2005

Message le Dim Mai 28, 2006 20:00

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:

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Dim Mai 28, 2006 20:17

dd32 a écrit: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.


Bool
WRInaute passionné
WRInaute passionné
 
Messages: 1290
Inscription: 26 Fév 2004

Message le Dim Mai 28, 2006 20:27

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: Tout sélectionner
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.


dd32
Modérateur
Modérateur
 
Messages: 3387
Inscription: 9 Sep 2005

Message le Lun Mai 29, 2006 0:15

[Hors Sujet]
Hum, maintenant que je me relis, je vois que j'ai oublié un mot :
dd32 a écrit: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]


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

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités