Fonction pour gérer les entre guillemets dans un texte

Nouveau WRInaute
Bojour à tout le monde,
J'ai un petit problème. Le champ caché de mon formulaire contient un texte qui à son tour contient des guillemets doubles comme ceci: "exemple".

Voici l'exemple de la variable contenant le texte.
Code:
<input name="monmessage" type="hidden" id="monmessage" value="<?php echo $monmessage; ?>">

Le texte envoyée dans une base de donnée est coupé avant le mot contenant les guillemets double. C'est normal parce qu'il le considère comme une expression. Quelqu'un connait la fonction pour gérer ce problème?
D'avance je vous remercie tous et toutes.
 
WRInaute impliqué
Je ne vois que deux solutions:
-mettre autre chose que ce caractère, si cela convient.
-remplacer ce caractère par un neutre, puis avec l´insertion dans la bdd, changer ce caractère neutre en ". ( fonction str_replace() )
 
Nouveau WRInaute
Merci mais ça ne résoud pas mon problème

Vous êtes sûr qu'il n'y a aucun moyen?
Etant donné que ce texte vient des internautes, je ne peux pas les obliger à ne pas écrire des guillemets doubles. Il doit y avoir une fonction pour protéger ces guillemets non?

Merci d'avance
 
WRInaute occasionnel
Essaie :

<input name="\"monmessage\"" type="hidden" id="monmessage" value="<?php echo $monmessage; ?>">

de la sorte que dans la chaine name, le \" n'est pas interprété comme guillemet.
 
Nouveau WRInaute
Bonsoir loobot

Bonsoir Loobot
Merci pour votre aide mais mais malheureusement, ça ne marche pas du tout. Il y a rien qui s'affiche. Je m'en doutais d'ailleurs mais j'ai voulu qu'en même essayer. On ne pas faire des modifications sur des valeurs HTML de cette manière. En tout cas, merci d'avoir essayé de m'aider.

Etant donné que mon problème n'est pas résolu, je continue toujours à solliciter votre aide à toutes et à tous.

Merci beaucoup.
 
WRInaute passionné
Tu remplace les caractères indélicat AVANT de les inséré dans la base de données.

Tu appliques la fonctions inverses lors de la lecture.
 
WRInaute discret
Lorsque tu enregistre ton champ de texte tu lui applique la fonction:
addslashes();
Et lorsque tu l'affiche:
stripslashes();
 
Nouveau WRInaute
J'avais déjà fait stripslashes() à l'affichage pour qu'il m'affiche normalement le texte sans les antislashs.

Maintenant comme vous me l'avez demandez, j'ai fait addslashes() avant d'enrégistrer le champ comme ceci:

Code:
<input name="monmessage" type="hidden" id="monmessage" value="<?php echo addslashes($monmessage); ?>">

Le résultat est pire. Non seulement il me coupe le texte avant le mot contenant les guillemets-doubles mais en plus il m'affiche maintenant les antislashs.
J'espère que quelqu'un m'aidera.
D'avance.
 
WRInaute passionné
Je me trompe peut-être, mais ce que tu dois faire, c'est traiter le message après le submit de ton formuaire.

:arrow: Ton message est écrit par un visiteur avec des "apostrophes"
:arrow: Il envoi son message
:arrow: Tu applique la fonction addslashes() sur le message
:arrow: tu l'enregistre dans ta BDD
:arrow: pour le lire fonction inverse
 
Nouveau WRInaute
J'ai pensé que ce que vous me demandez, revenais à ce que j'avais déjà fait précédemment et que la réponse reviendrait à la même chose. Mais j'ai qu'en même essayé pour vous montrer que je copère malgré tout.

Voici la variable telle qu'elle est depuis le formulaire
Code:
<input name="monmessage" type="hidden" id="monmessage" value="<?php echo $monmessage; ?>">
Voici la variable traitée avant l'enrégistrement dans la base de données.
Code:
<?php
$message = addslashes($monmessage);
?>

Comme je l'ai déjà souligné, le résultat revient au même: il me coupe le texte avant le mot contenant les guillemets-doubles mais en plus il m'affiche les antislashs.
Personne n'a jamais eu ce problème au paravant? Les programmeurs PHP sont ils tous partis en vac? ;)
D'avance merci pour toute aide. Et merci pour tous ceux qui ont tenté de m'aider.
 
WRInaute occasionnel
Bon, si j'ai bien compris, tu as une page avec un formulaire ou les visiteurs tapent un message (avec apostrophes, guillemets, tout ce qu'ils veulent).

Puis tu as un formulaire intermédiaire dans laquelle ce message devient un champs caché.

Puis sur la page finale tu enregistre le message dans une db.

C'est bien ça ?

Alors solution simple :

=> sur la page intermediaire (avec le champs caché), tu fais un truc du genre : str_replace('"','#!#',$monmessage).
=> ca aura pour effet de remplacer les guillemets par la chaine #!# mais tu t'en fous puisque c'est un champs caché.
=> sur la page finale (avec l'enregistrement dans la base) tu fais l'inverse : str_replace('#!#','"',$monmessage)
=> comme ça tu enregistre le bon message avec les guillemets.

Bien entendu, tu peux mettre ce que tu veux à la place de #!#, l'essentiel étant que tu fasses le traitement inverse à la fin.
 
Nouveau WRInaute
Bonjour Jerome
Avant tout, je vous remercie beaucoup pour votre aide.
Si j'ai bien compris, dans le champ caché ce code str_replace('"','#!#',$monmessage), c'est un guillemet-double dans deux guillemts simples. ensuite l'inverse un guillemet double entre deux gillemets-simples devant la variable $monmessage.

Je demande ça parce que je trouve un peu spécail l'utilisation d'un guillemet-double. Si ce n'est pas une erreur de frappe, pourriez-vous m'expliquer un peu?
D'avance merci
 
WRInaute occasionnel
La fonction str_replace prend 3 paramètres :

le premier = la chaine à remplace (ici : " donc on écrit '"')
le deuxième = la chaine par laquelle remplacer (ici #!# donc on écrit '#!"'
le troisième = la variable dans laquelle tu veux remplacer

Donc oui, ce sont bien : ' " ' (ne pas mettre d'espace, c'est juste pour montrer) pour dire à la fonction de remplacer les ".

Si tu voulais remplacer les 0 par des 8, tu ferais :
str_replace('0','8',$monmessage);
 
Nouveau WRInaute
MERCI JEROME
Vraiment bravo pour votre aide. Je ne saurai jamais vous remercier assez. çA MARCHE COMME SUR DES ROULETTES. C'EST VRAIMENT GENIAL.

Un dernier problème du même genre et je vous promets que je ne vous embèterai plus. J'essaie de reformater ce qui vient d'un formulaire le genre forum avant de l'envoyer à la base de données. Exemple:

$message = "Nous ne devons pas avoir peur ni du noir ni du blanc";
Le mot "peur" en gras
Le mot "noir" en noir
Le mot "blanc" en blanc
Tout en imaginant que ces mots font partie de la phrase de la variable $message. J'ai souvent vu faire ça pour des forums. J'aimerais le faire pour la mise à jour de mon site. C'est à dire avec du javascript, je me suis arrangé à aire ceci.

$message = "Nous ne devons pas avoir [gras]peur[/gras] ni du [noir]noir[/noir] ni du [blanc]blanc[/blanc]";

Mais avant d'enrégistrer la variable $message, dans la base de donnée, j'aimerais le formater correctement en html. C'est à dire:
$message = "Nous ne devons pas avoir <B>peur</B> ni du <FONT COLOR = #000000>noir</FONT> ni du <FONT COLOR = #FFFFFF>blanc</FONT>";

Merci d'avance
 
WRInaute impliqué
Hack, si tu lisais bien les réponses, tu aurais remarqué que je t´ai donné la réponse au tout début: str_replace()...
Alors prends soin de lire les réponses...
 
WRInaute occasionnel
Ma solution était effectivement ce que correiaj avait dit
remplacer ce caractère par un neutre, puis avec l´insertion dans la bdd, changer ce caractère neutre en ". ( fonction str_replace() )

Pour le formatage HTML, tu fais :
str_replace('[gras]','<b>',$monmessage);
str_replace('[/gras]','</b>',$monmessage);
avant de l'insérer dans la base

Ou pour éviter d'avoir plusieurs str_replace, tu fais :

$avant = Array('[gras]','[/gras]','[noir]','[/noir]');
$apres = Array('<b>','</b>','<font color=#000000>','</font>');
str_replace($avant,$apres,$monmessage);

Ca remplacera [gras] par <br> puis [/gras] par </b> et ainsi de suite.
 
WRInaute discret
Salut,

utilise la fonction htmlentities() :

<input name="monmessage" type="hidden" id="monmessage" value="<?php echo htmlentities($monmessage); ?>" />

a +
 
Nouveau WRInaute
Bonjour tout le monde,
j'ai un problème de Mysql. J'essaie de modifier une donnée avec update et voilà le message d'erreur qu'il m'affiche. "Duplicate entry '11' for key 1" Quelqu'un peut me dire ce que ça signifie?

Merci d'avance
 
Nouveau WRInaute
Je ne comprends pas.
Voici le code. Pourriez-vous m'éclairer?

Code:
$modifDonnee = "UPDATE boite SET titre='$titre', description='$description', type='$type' WHERE IDA='$IDA' ";
mysql_query($modifDonnee, $ID_Connex) or die (mysql_error());

Merci d'avance
 
Nouveau WRInaute
Voici la structure de ma table.

Code:
DROP TABLE IF EXISTS boite;
CREATE TABLE boite (
  IDA int(11) NOT NULL auto_increment,
  titre varchar(200) NOT NULL default '',
  description text NOT NULL,
  type varchar(50) NOT NULL default '',
  PRIMARY KEY  (IDA)
) TYPE=MyISAM;

D'avance merci de me dire ce qui ne va pas.
 
WRInaute impliqué
remplace ton premier champs par ça:
IDA INT not null AUTO_INCREMENT,

Un entier na pas de longueur, logiquement
 
Discussions similaires
Haut