Bonjour !
Je suis en train de réaliser la partie admin d'un site, et j'utilise TinyMCE afin de pouvoir publier mes articles.
Je me suis mis en tête de soumettre mon formulaire en Ajax pour l'enregistrer en base de données (MySQL). Ca fait maintenant trois jours que je lis des tonnes de tutos sur le sujet et que je test plein de solutions.
Evidemment, les tutos sont toujours basés sur des exemples simples qui marchent toujours et je les comprends bien.
Maintenant, quand il s'agit d'envoyer le contenu d'un textarea en gardant les caractères ISO-8859-1 et aussi les simples / double quotes , les balises ...etc.. c'est une autre histoire.
J'ai essayé avec JQuery et là je tente sans framework.
Grâce à Firebug, j'ai compris que l'ajax m'envoyais des caractères étranges qui me faisaient tout planter.
Ensuite j'avais de gros problèmes avec les quotes. Car je dois les récupérer en POST pour les balancer dans une requête "INSERT" avec PDO.
Evidemment, tous les guillemets et apostrophes coupent ma requête.
J'ai réussi à tomber sur une solution, mais j'aurais besoin de votre aide pour savoir si elle est vraiment adaptée. Et comme j'imagine que non, si je pouvais avoir des pistes pour bien comprendre et réussir mon truc ça serait top.
Voici comment je procède ...
index.php (la page formulaire)
Code HTML :
...
<div id="cont"></div>
<fieldset>
<form>
<textarea id="txtArea" name="txtArea" cols="100" rows="10"></textarea>
</form>
</fieldset>
<a href="#" id="btnSendAjax" class="btn1">Envoyer</a>
...
(évidemment il y a un doctype et un charset "8859-1".Si ma page porte l'extension php, c'est que je fais d'autres tests en même temps)
le javascript inclu dans ma page index.php :
Code Javascript :
$(document).ready(function(){
$('#btnSendAjax').click(function(){
sendJajax();
});
//trouvé sur le net pour pour simuler addslashes et avoir mes guillemets.
function addslashes(str) {
return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\u0000/g, "\\0");
}
function sendJajax(){
//##### Création de l'objet XMLHttpRequest
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Essayer Internet Explorer
}
catch(e){
xhr = new XMLHttpRequest(); // Autres navigateurs
}
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4)
{
if(xhr.status == 200){
//var doc = xhr.responseXML; // Assigner le fichier XML à une variable
//var element = doc.getElementsByTagName('root').item(0); // Lire le premier élément avec DOM
//document.ajax.dyn.value= element.firstChild.data; // Copier le contenu dans le formulaire
var doc = xhr.responseText;
$('#cont').html(doc);
}else
document.ajax.dyn="Error code " + xhr.status;
}
};
varTitre = "Mon titre accentué pour voir.";
varMess = $('#txtArea').val() //pour un textarea normal sinon avec tinyMCE j'utilise "getContent()"
myData = "postTitre="+varTitre+"&postMessage="+addslashes(varMess);
xhr.open("POST","scr-traitmnt.php",true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(myData);
return false;
});
puis finalement, mon script PHP de traitement qui doit me renvoyer du HTML pour le lire en Javascript, et enregistrer le HTML mis en forme dans ma bdd.
Code PHP :
<?php
header("content-type: application/xml; charset=iso-8859-1");
$resSuccess = '';
$message = '???';
$titre = '???';
if(isset($_POST['postTitre']) && $_POST['postTitre'] !=''){
if(isset($_POST['postMessage']) && $_POST['postMessage'] !=''){
//On a tout reçu faut l'traiter
$resSuccess = 'Tout s\'est bien passé';
$message = utf8_decode($_POST['postMessage']);
$titre = utf8_decode($_POST['postTitre']);
}else{
$resSuccess .= 'y\'a pas de message ?!?!';
}
}else{
$resSuccess .= 'y\'a pas de titre ?!?!';
}
$xml = '<?xml version="1.0" encoding="iso-8859-1"?>';
$xml .= '<root>';
$xml .= '<ressuccess>'.$resSuccess.'</ressuccess>';
$xml .= '<restitre>'.$titre.'</restitre>';
$xml .= '<resmessage>'.stripslashes($message).'</resmessage>';
$xml .= '</root>';
echo $xml;
?>
Voilà où j'en suis actuellement. (Désolé pour la longueur)
Déjà, est-ce que j'ai choisi le bon "Content-Type" dans mon setRequestHeader ?
Ensuite, mon script php renvoi t-il le bon type ? ne devrais-je pas utiliser UTF8 ?
Mon script PHP renvoi actuellement du XML et pourtant, au résultat je ne vois que les balises html
Est-ce que je devrais plutôt lui faire renvoyer le contenu "pur" de mes variables ? (avec que du html et pas de xml) ?
Enfin bon ... vous l'aurez compris, je suis un débutant en Ajax qui a un peu de mal là.