11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour !

Après des heures de recherches je n'ai toujours pas trouvé la raison pour laquelle je n'arrive pas à récupérer le contenu de mon textarea lorsque je veux poster un article en utilisant l'éditeur WYSIWYG TinyMCE...

Coté base de données, la nouvelle ligne est bien ajoutée (id, titre, date etc...) mais contenu reste désespérément vide !
Dans le cas où je poste une image seulement la balise img est bien sauvegardée dans le champ contenu... Fou, non ? Smiley sweatdrop

Peut-être pourrez-vous m'aider. Voici mon code :

redaction.php

<head>
<script language="javascript" type="text/javascript" src="js/mootools.js"></script>
<script language="javascript" type="text/javascript" src="js/forms.js"></script>
<script language="javascript" type="text/javascript" src="js/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
 
tinyMCE.init({
	mode : "textareas",
	theme : "advanced",
	language : "fr",
	plugins : "fullscreen,ibrowser",
	theme_advanced_buttons1 : "bold,italic,underline,|,justifyleft,justifycenter,justifyright,|,fontselect,fontsizeselect,|,bullist,numlist,|,outdent,indent,blockquote,|,link,unlink,|,forecolor,|,fullscreen,|,ibrowser",
	theme_advanced_buttons2 : "",
	theme_advanced_buttons3 : "",
	theme_advanced_toolbar_location : "top",
	theme_advanced_toolbar_align : "center",
	theme_advanced_resizing : true,
	relative_urls : false
});
 
window.addEvent('load', initRequest);
 
function initRequest() {
var envoi = $('envoi_redaction');
envoi.addEvent('click', sendform_redaction);
}
 
function sendform_redaction(e) {
	
	if (checkform('form_redaction') == true) {
	// capture de lévénement
	var myEvent = new Event(e);
	// on le eutralise
	myEvent.stop();
	var log = $('res_redaction').empty().addClass('ajax-loading');
	var url = "validation/valid_redaction.php";
	new Ajax (url, {
		method:'post',
		update: log,
		data:document.forms[0],
		encoding:'utf-8',
		onComplete: function() {
			log.removeClass('ajax-loading');
		}
	}).request();
	}
}
 
function checkform(formname) {
  var errors = 0; 
  errors += checkText(formname, 'titre');	
 
  if (errors == 0) {
	return true;
	
  } 
  else {
  	return false;
	}
}
</script>
</head>
 
<body>
  <div class="contenu">
 
	<?php  
          include_once('inc/menu_admin.php');
	  include_once('js/tiny_mce/plugins/ibrowser/config/config.inc.php');
	?>
							
        <form method="post" name="form_redaction" action="validation/valid_redaction.php" id="form_redaction">
						
		<label for="document" class="label_form">
			Type de document : 
			<select name="document" id="document" class="select_form">
				<option value="article">Article</option>
				<option value="dossier">Dossier</option>
                        </select>
                </label>
 
                <label for="categorie" class="label_form">
			Catégorie : 
			<select name="categorie" id="categorie" class="select_form">
			        <option value="1">Les sorties</option>
				<option value="2">L'Association</option>
				<option value="3">La Fédération</option>
			</select>
		</label>
								
                 <label for="titre" class="label_form">
		         Titre : <input type="text" name="titre" id="titre" size="35" class="input_form" maxlength="50" />
			<div id="erreur_titre" class="erreur_form">Veuillez indiquer un titre</div>
		</label>
								
                 <label class="label_form" style="height:385px;">
			Contenu :<br /><br /> 
                        <textarea name="contenu_redaction" id="contenu_redaction" cols="93" rows="20"></textarea>
		<div id="erreur_contenu" class="erreur_form">Veuillez ajouter du contenu</div>
		</label>
								
	        <div class="centre">
			<a href="#"><img src="img/boutons/envoyer.jpg" alt="Envoyer" id="envoi_redaction" /></a> 
			<a href="#" onclick="document.forms.form_redaction.reset();"><img src="img/boutons/effacer.jpg" alt="Effacer" /></a>
		</div>
	</form>


valid_redaction.php

<?php
session_start();
header('Content-Type: text/html; charset=ISO-8859-1');
 
if ($_POST) {
 
	sleep(1);
	include_once('../classes/Bdd.class.php');
	include_once('../classes/Redaction.class.php');
 
 
	if (isset($_POST["document"]) && $_POST["document"] == "article") {
	
		$redaction = new Redaction("article");
	
	}
	
	if (isset($_POST["document"]) && $_POST["document"] == "dossier") {
	
		$redaction = new Redaction("dossier");
		
	}
	
	if ($redaction->ajout_redaction($_POST)) {
	
		echo "<span style=\"color:#009900; font-size:11px;\">Votre ".$_POST["document"]." a été ajouté avec succès.</div>";
	
	}
	else {
		echo "<span style=\"color:#ff0000; font-size:11px;\">Un problème est survenu. Veuillez recommencer.</span>";
	}
 
}
?>


Redaction.class.php

function ajout_redaction($infos) {
 
        foreach($infos as $value) {
	    $value = mysql_real_escape_string($value);	
	}
 
	$sql1 =  "INSERT INTO redaction VALUES('', ".time().", '".$this->type."', ".$infos["categorie"].", '".$infos["titre"]."', '".$infos["contenu_redaction"]."', ".$_SESSION["id_membre"].")";
		
       $query1 = mysql_query($sql1);
		
	return $query1;
	
}


Petite précision : lorsque j'utilise tinyMCE pour poster un article, le contenu du textarea n'est même pas transmis à valid_redaction.php...

Avez-vous une idée du problème ? Smiley confus

Merci !
Modifié par Api1000 (28 Aug 2008 - 11:16)
J'ai trouvé une solution.

Le problème viendrait de la cohabitation du framework js Mootools et de l'éditeur WYSIWYG TinyMCE...

Voici ce que j'ai pu trouver sur le net :

a écrit :

Now, the method I use for saving the data of a TinyMCE instance via AJAX is quite simple:

* Call a tinyMCE.triggerSave(false,true), so that the content of the editor get placed inside the textarea the editor is replacing
* Get the value of that textarea
* Send that value over XHR to the server

Now read that previous paragraph again. Yes indeed, the triggerSave() apparantly fixes this nasty bug.


Ce qui me donne :


function sendform_redaction(e) {
	
	if (checkform('form_redaction') == true) {
	// capture de lévénement
	var myEvent = new Event(e);
	// on le eutralise
	myEvent.stop();
	[b]tinyMCE.triggerSave();[/b]
	ib.oEditor = document.getElementById('contenu_redaction');
	var log = $('res_redaction').empty().addClass('ajax-loading');
	var url = "validation/valid_redaction.php";
	new Ajax (url, {
		method:'post',
		update: log,
		data:document.forms[0],
		encoding:'utf-8',
		onComplete: function() {
			log.removeClass('ajax-loading');
		}
	}).request();
	}
}