Mettre des couleurs dans mon message

kaking Messages postés 52 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 20 avril 2020 - 9 avril 2008 à 11:18
kaking Messages postés 52 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 20 avril 2020 - 9 avril 2008 à 18:00
bonjour

alors voila :
je voudrais que quand on clique sur le bouton couleur, il y ais la balise permettant d'ecrire en couleur qui s'affiche dans mon form.

moi j'ai fais ca:

<script language="Javascript">
var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
var regexp = new RegExp("[\r]","gi");

function storeCaret(selec)
{
if (isMozilla)
{
// Si on est sur Mozilla

oField = document.forms['news'].elements['message'];

objectValue = oField.value;

deb = oField.selectionStart;
fin = oField.selectionEnd;

objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );

// alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");

oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "+ selec + "" + objectValueFin;
oField.selectionStart = strlen(objectValueDeb);
oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "+ selec + "");
oField.focus();
oField.setSelectionRange(
objectValueDeb.length + selec.length + 2,
objectValueDeb.length + selec.length + 2);
}
else
{
// Si on est sur IE

oField = document.forms['news'].elements['message'];
var str = document.selection.createRange().text;

if (str.length>0)
{
// Si on a selectionné du texte
var sel = document.selection.createRange();
sel.text = "[" + selec + "]" + str + "+ selec + "";
sel.collapse();
sel.select();
}
else
{
oField.focus(oField.caretPos);
// alert(oField.caretPos+"\n"+oField.value.length+"\n")
oField.focus(oField.value.length);
oField.caretPos = document.selection.createRange().duplicate();

var bidon = "%~%";
var orig = oField.value;
oField.caretPos.text = bidon;
var i = oField.value.search(bidon);
oField.value = orig.substr(0,i) + "[" + selec + "]+ selec + "" + orig.substr(i, oField.value.length);
var r = 0;
for(n = 0; n < i; n++)
{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
pos = i + 2 + selec.length - r;
//placer(document.forms['news'].elements['message'], pos);
var r = oField.createTextRange();
r.moveStart('character', pos);
r.collapse();
r.select();

}
}
}

</script>


Choisi ta couleurs


mais quand je clique sur le bouton "couleur"

[color=(red|green|blue|yellow|purple|olive)]/color=(red|green|blue|yellow|purple|olive)

apparait dans mon form mais ce n'est pas traduit: aucune couleur ne s'affiche quand je l'envoie

ma fonction est pourtant correcte car j'ai fais un bouton pour ecrire gras



et quand je clique dessus les balises apparaisent dans le form et fonctionnent...


d'ou vient mon erreur s'il vous plais?

merci

5 réponses

MasterCent Messages postés 83 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 14 décembre 2011 1
9 avril 2008 à 11:59
Salut,

Pourrais tu stp commenter ton code:
Une explication du resultat attendu, du contexte, ...
Une explication de ta stratégie,
De même que mettre en commentaire ce que tes lignes font, pas à pas.

Cela sera plus facile à traiter, et c'est du temps gagné pour tout le monde !

Merci.
0
kaking Messages postés 52 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 20 avril 2020
9 avril 2008 à 14:09
ok MasterCent

bon alors c'est parti (c'est long mais pas compliqué, la synthaxe est extremement facile)

j'ai un formulaire qui envoie un message. or je veux mettre des boutons qui permettent de mettre en gras (donc quand on clique sur le bouton, un code apparait dans mon form qui permet de mettre en gras)

pour ce faire, j'ai copié collé la fonction (n'y connaissant rien en js, je peux seulement vous afficher la fonction)

la fonction se trouve sur la page du formulaire:


Envoyer un mail

</h1>
<form name= "news" method="post" action="newsletter.php">
<script language="Javascript">
var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
var regexp = new RegExp("[\r]","gi");

function storeCaret(selec)
{
if (isMozilla)
{
// Si on est sur Mozilla

oField = document.forms['news'].elements['message'];

objectValue = oField.value;

deb = oField.selectionStart;
fin = oField.selectionEnd;

objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );

// alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");

oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "+ selec + "" + objectValueFin;
oField.selectionStart = strlen(objectValueDeb);
oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "+ selec + "");
oField.focus();
oField.setSelectionRange(
objectValueDeb.length + selec.length + 2,
objectValueDeb.length + selec.length + 2);
}
else
{
// Si on est sur IE

oField = document.forms['news'].elements['message'];
var str = document.selection.createRange().text;

if (str.length>0)
{
// Si on a selectionné du texte
var sel = document.selection.createRange();
sel.text = "[" + selec + "]" + str + "+ selec + "";
sel.collapse();
sel.select();
}
else
{
oField.focus(oField.caretPos);
// alert(oField.caretPos+"\n"+oField.value.length+"\n")
oField.focus(oField.value.length);
oField.caretPos = document.selection.createRange().duplicate();

var bidon = "%~%";
var orig = oField.value;
oField.caretPos.text = bidon;
var i = oField.value.search(bidon);
oField.value = orig.substr(0,i) + "[" + selec + "]+ selec + "" + orig.substr(i, oField.value.length);
var r = 0;
for(n = 0; n < i; n++)
{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
pos = i + 2 + selec.length - r;
//placer(document.forms['news'].elements['message'], pos);
var r = oField.createTextRange();
r.moveStart('character', pos);
r.collapse();
r.select();

}
}
}

</script>

ensuite j'ai créé un bouton pour mettre en gras, en souligné, en couleur,et en italique:




Choisi ta couleurs



puis j'ai fais le formulaire:

Message :

<textarea name="message" id="message" wrap="virtual" cols="100" rows="15"> </textarea>
</center>




dans la page ou on recoit le $_POST['message'] j'ai les regex suivantes:

if(!empty($titre) && !empty($message))
{

$titre = preg_replace('#\[b\](.+)\/b\#isU', ' $1 ', $titre);
$titre = preg_replace('#\[i\](.+)\/i\#isU', '$1', $titre);
$titre = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\/color=(red|green|blue|yellow|purple|olive)\#isU', '$2', $titre);
$titre = preg_replace('#http://[a-z0-9._/-]+#i', '[$0 $0]', $titre);


$message = preg_replace('#\[b\](.+)\/b\#isU', ' $1 ', $message);
$message = preg_replace('#\[i\](.+)\/i\#isU', '$1', $message);
$message = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\/color=(red|green|blue|yellow|purple|olive)\#isU', '$2', $message);
$message = preg_replace('#http://[a-z0-9._/-]+#i', '[$0 $0]', $message);



ce qui ne va pas:

quand je clique sur le bouton "gras" les balises apparaissent et fonctionnent
(je dois inserer du texte entre les deux balises apparaissant )

mais quand je clique sur u(pour souligner) les balises apparaissent mais ne fonctionnent pas (en mettant du texte entre les balises, rien n'est souligné,les balises ne sont pas traduites)

de meme pour les couleurs:les balises apparaissent mais ne fonctionnent pas...

alors que pour mettre en italique,ca fonctionne...les balises apparaissent et fonctionnent....


vous savez pourquoi? merci
0
MasterCent Messages postés 83 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 14 décembre 2011 1
9 avril 2008 à 15:20
Naïvement, ne te manque t-il pas
$message = preg_replace...
pour la balise U
Par ailleurs, la balise n'a t elle pas été abandonnée au profit des styles
Enfin, N'as tu qu'un bouton pour choisir la couleur ou une liste des couleurs ?

As tu édité ton texte  $_POST  avant et après traitement ?
Il faut que tu arrives à cibler ton problème, ta transformation serveur fonctionne-t-elle ? Si tu donnes un texte à la fonction, sera t-il correctement transformé ? En clair : où cela coince-t-il ? Javascript ou PHP ?

Fas des tests du style :

$message= "aaa ici incliné bbb" ;
... // traitement
echo ($message) ; 

Bon boulot !
0
kaking Messages postés 52 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 20 avril 2020
9 avril 2008 à 15:58
mais justement!

le gras fonctionne! pourquoi pas les couleurs!!!


(et pour les u t'as raison-mais je sais pas comment faire le bbcode pour souligner)


mon code cloche t'il a propos des couleurs?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kaking Messages postés 52 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 20 avril 2020
9 avril 2008 à 18:00
noooooooooon

c est bon je suis trop bete j'ai une erreur de script...



encore merci pour tes conseils, j'ai trouvé!

par contre j'ai copié collé la fonction et les boutons sur un autre formulaire (de news)

et la, il y a bien les boutons mais quand j'appuie dessus, rien ne se passe....pas de [b][/] ou de qui apparaissent...
0
Rejoignez-nous