8792 sujets

Développement web côté serveur, CMS

Bonjour
Voilà mon problème. J'ai créé cette table:

-- Structure de la table `t_cr_scol`
--

CREATE TABLE `t_cr_scol` (
  `cle_id_observ` bigint(20) NOT NULL auto_increment,
  `cle_ext_elev` bigint(20) NOT NULL default '0',
  `type_cr_scolaire` bigint(20) NOT NULL default '0',
  `date` varchar(20) NOT NULL default '',
  `francais` longtext NOT NULL,
  `maths` longtext NOT NULL,
  `autres` longtext NOT NULL,
  `present_en` text NOT NULL,
  `present_sessad` text NOT NULL,
  `present_famille` text NOT NULL,
  PRIMARY KEY  (`cle_id_observ`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=318 ;


Dans le formulaire idoine, je peux saisir du texte dans les texteaera des champs suivants:

`francais` longtext NOT NULL,
  `maths` longtext NOT NULL,
  `autres` longtext NOT NULL,

Jusque là pas de problème. Je teste et ...
pas de sauvegarde dans la base mysql?!?
Finalement je me rends compte que ce sont les apostrophes saisis dans le texte qui pose problème.
Cette phrase n'est pas enregistrée:

j'ai soif.

mais celle-là, oui:

j ai soif.

et celle-là:

j\'ai soif.

Problème, c'est que les personnes qui vont se servir, saisissent du texte normalement et en français. Je ne peux pas leur dire d'échapper les apostrophes avec un anti-slash.
Quelle solution adoptée?
Merci pour vos réponses
Sellig60
Modifié par sellig60 (23 May 2007 - 16:10)
Bonjour Smiley smile

En tant que modérateur, je me dois de te faire remarquer que tu n'as malheureusement pas respecté l'une des Règles de base du forum qui est d'afficher les codes et exemples proprement à l'aide des boutons [ code]... ici ton code HTML, CSS, PHP, etc.[ /code] (sans espace).

Je te remercie par avance de bien vouloir éditer ton message afin de le rendre conforme à cette règle. Smiley cligne

D'ailleurs, je rappelle que le lien qui apparaît en bandeau tout en haut du forum ("Nouveau sur le forum ?...") est important. Il contient des pistes de recherche, des indications sur les règles de vie de la communauté, etc.
Il serait courtois de ta part de bien vouloir en prendre connaissance.

Bonne continuation Smiley smile

upload/1-code.gif
la reponse à ton pb se trouve du cote des fonction php de traitement de chaine s de caracters..
Exact kemar.
Je donne la solution que j'ai cherchée et qui marche:

$fran=$_POST['saisie_fra'];
$francais=ereg_replace("'","\'",$fran);

Bon je suis sûr qu'il y a moyen de faire ça sur une seule ligne mais je suis fâché avec les simples et doubles cotes que je ne maîtrise pas assez bien.
On est débutant ou on ne l'est pas et moi je le suis! Smiley langue .
A+
Sellig60
Salut Smiley cligne

C'est justement pour ce problème qu'a été créé htmlentities.

Par exemple :
$francais= htmlentities($_POST['saisie_fra'], ENT_QUOTES);

A+

*Edit : et si besoin la fonction inverse est html_entity_decode()
Modifié par Heyoan (23 May 2007 - 19:54)
Oups Smiley confused

Tout à fait exact virtualgadjo ! Je me sers du htmlentities (depuis déjà quelques années Smiley rolleyes ) pour pallier une différence d'encodage en local et sur les serveurs OVH. Comme je n'avais jamais réussi à paramétrer ma base comme la leur j'avais trouvé cette astuce (un peu "big finger" Smiley langue !) pour pouvoir synchroniser mes bases sans perdre les accents... et c'est resté en l'état !

Pour l'insertion "normale" en base il me semble que le mysql_real_escape_string est préconisé mais peut-être que là encore je ne suis pas à la page Smiley vieux !
Modifié par Heyoan (25 May 2007 - 17:06)
Je confirme, il vaut mieux utiliser mysql_real_escape_string() et tant qu'à faire avoir le moins possible de code "polluant" dans ta base de données.

L'idéal est d'avoir le texte stocké tel quel dans ta base de donnée, par exemple :
"L'exemple idiot"

plutôt que
"L\'exemple idiot"

ou je ne sais quel encodage à la c.. .

Ainsi, ta base sera plus facilement exportable : exemple si tu veux faire un export CSV, autant que le texte soit le plus naturel possible : ça sera quand tu veux l'afficher sur un site qu'il faudra utiliser une fonction comme htmlentities(), et pas à l'insertion dans une base.

Les quotes simples ' ne sont gênantes que pour l'insertion (risques d'injection SQL)... donc ça se règle sans trop de souci.
Modifié par Nico3333fr (25 May 2007 - 19:01)
Bonsoir
Vu mes connaissances en php et mon expérience d'un ou deux mois, je suis mal placé pour faire le fier mais je vous assure que mon système marche impeccable et que les données stockées le sont proprement.
J'ai transformé les deux lignes en une seule comme ceci où je remplace la simple cote par un anti-slash+simple cote :

$new_nom=ereg_replace("'","\'",$_POST['new_nom']);

Comme je suis curieux de nature et que j'aime bien comprendre, je serais content de savoir pourquoi ça fonctionne bien et pourquoi l'anti-slash disparaît dans la base de données mysql.
La base est à la norme utf8_general_ci et je travaille avec easyphp 1.8. Je ne sais pas si cela a un rapport.
Sellig60
Salut,

la réponse ici.

Et oui ton code fonctionne puisque c'est une partie de ce que fait addslashes. Par contre avec la phrase
a écrit :
O'reilly est "bizarre", tout comme cette \*#% phrase !
il ne serait pas suffisant.

A+