Bonjour à tous, mon problème est tout bête mais je me prend la tête dessus depuis deux après midi
Je suis entrain de créer un bbcode personnel ( histoire de comprendre comment tout ça marche et en suivant quelques tutos ) et je me retrouve avec un bug incompréhensible de mon point de vue.
Tout fonctionne ( insertion de balises "personnelles" dans le textarea, prévisualisation dans une div séparée ) sauf que lorsque je soumet le formulaire, il me manque les variables provenant des deux textarea que je soumet à mon bbcode.
Voici mon script en js:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
function insertTag(startTag, endTag, textareaId, tagType) {
	var field  = document.getElementById(textareaId); 
	var scroll = field.scrollTop;
	field.focus();
	/* === Partie 1 : on récupère la sélection  ( 1er if = ie, 2eme ) autres browsers === */
	if (window.ActiveXObject) {
			var textRange = document.selection.createRange();            
			var currentSelection = textRange.text;
	} 
	else {
			var startSelection   = field.value.substring(0, field.selectionStart);
			var currentSelection = field.value.substring(field.selectionStart, field.selectionEnd);
			var endSelection     = field.value.substring(field.selectionEnd);               
	}
	
	/* === Partie 2 : on analyse le tagType === */
	if (tagType) {
		switch (tagType) {
			case "url":
			var url = prompt("Lien :");
			var attr = 'title="'+prompt('Texte au survol du lien :');+'"';
			startTag = '[url="'+url+'" '+attr+'"]';
			break;
			case "img":
			var url = prompt("Nom de l'image :");
			var attr = ''+prompt('Texte alternatif :');					
			startTag = '[img="'+url+'" alt="'+attr+'"]';
			endTag ='';
			break;
			case "+++":
			var val = '+++';
			startTag = "["+val+']';
			endTag = "[/"+val+']';
			break;
			case "+":
			var val = '+';
			startTag = "["+val+']';
			endTag = "[/"+val+']';
			break;
			case "clean":
			currentSelection = currentSelection.replace("","");
			currentSelection = currentSelection.replace("","");
			currentSelection = currentSelection.replace("[g]","");
			currentSelection = currentSelection.replace("[/g]","");
			currentSelection = currentSelection.replace("","");
			currentSelection = currentSelection.replace("","");
			currentSelection = currentSelection.replace("[+++]","");
			currentSelection = currentSelection.replace("[/+++]","");
			currentSelection = currentSelection.replace("[+]","");
			currentSelection = currentSelection.replace("[/+]","");
			currentSelection = currentSelection.replace(/\/g,"");
			currentSelection = currentSelection.replace("","");
			currentSelection = currentSelection.replace(/\[img="(.*)" alt="(.*)"\]/g,"");
			break;
		}
	}
	/* === Partie 3 : on insère le tout === */
	if (window.ActiveXObject) {
		textRange.text = startTag + currentSelection + endTag;
		textRange.moveStart("character", -endTag.length - currentSelection.length);
		textRange.moveEnd("character", -endTag.length);
		textRange.select();     
	} 
	else {
		field.value = startSelection + startTag + currentSelection + endTag + endSelection;
		field.focus();
		field.setSelectionRange(startSelection.length + startTag.length, startSelection.length + startTag.length + currentSelection.length);
	}
	field.scrollTop = scroll;
	if (tagType)
		return false;
}
function preview(textareaId, previewDiv) {
	var field = document.getElementById(textareaId).value; // Le contenu du textarea est dans la variable field
	//traitement via replace
	field = field.replace(/\[/g, '<').replace(/\]/g, '>');//remplace les crochets en <> pour ne pas avoir à tout échapper ensuite
	$('#'+previewDiv).load("../scripts/bbcode.php", { texte:field},  
		function success(data){  
			console.log("success");
		},
		function error(data){alert('Une erreur s\'est produite, contacter votre webmaster');});
	
}
et le petit script php qui remplace les balises :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
extract($_POST);
//isU sont des options -> formate le <g> en <strong>
$texte = preg_replace("#&lt;sup&gt;(.*)&lt;/sup&gt;#isU",'<sup>$1</sup>',$texte);
$texte = preg_replace("#&lt;g&gt;(.*)&lt;/g&gt;#isU",'<span class="b">$1</span>',$texte);
$texte = preg_replace("#&lt;i&gt;(.*)&lt;/i&gt;#isU",'<span class="i">$1</span>',$texte);
$texte = preg_replace("#&lt;u&gt;(.*)&lt;/u&gt;#isU",'<span class="u">$1</span>',$texte);
$texte = preg_replace('#&lt;url="(.*)" title="(.+)"&gt;(.+)&lt;/url&gt;#isU','<a href="$1" title="$2"target="_blank">$3</a>',$texte);//encode pour les liens
$texte = preg_replace('#&lt;img="(.*)" alt="(.+)"&gt;#isU','<img src="../images/upload/$1.jpg" alt="$2" />',$texte);//encode pour les images
$texte = preg_replace('#&lt;\+\+\+&gt;(.*)&lt;/\+\+\+&gt;#isU','<strong>$1</strong>',$texte);//encode pour les strong
$texte = preg_replace('#&lt;\+&gt;(.*)&lt;/\+&gt;#isU','<em>$1</em>',$texte);//encode pour les em
echo nl2br("<p>$texte</p>");//transforme espaces en saut de ligne
return nl2br("<p>$texte</p>");//transforme espaces en saut de ligne
?>
Le formulaire et son traitement fonctionnent très bien en php ( dès que je retire le script de bbcode, tout refonctionne à merveille ) donc j'imagine que celà vient du js.
J'ai eu beau modifier la valeur et/ou le contenu html de la textarea, rien ni fait .

Si quelqu'un a une idée, je suis preneur