Problème de textarea avec XMLHTTPRequest !

Signaler
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006
-
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006
-
Bonjour à tous !

J'urilise la techno XMLHTTPRequest pour l'affichage de mes formulaires.
Jusqu'à maintenant je n'avais pas de problème mais depuis que j'ai inséré des éléments TEXTAREA dans mon formulaire cela ne fonctionne plus.

Voilà le problème :
Dès que je met un retour chariot dans mon textarea cela ne marche plus.

Mon fonctionnement :
1. J'ai une page avec un formulaire d'enregistrement avec divers éléments (dont textarea). Ces éléments sont déjà renseignés par XMLHTTPRequest via des requêtes dans ma base de données.
2. Je modifie mes éléments...en faisant un retour chariot dans mon textarea par exemple.
3. J'enregistre mes valeurs dans une base de données en appellant un script php.
4. Je rappelle ma page avec mon formulaire renseigné -> j'ai une erreur javascript lié au retour chariot du textarea.

Est-ce que je dois appeler des fonctions php de traitement de caractères ?? J'en ai essayé pleins mais ça ne fonctionne pas !

Merci de votre aide.

. Liv

12 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

tu as essayé avec nl2br() ?
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

Je viens de l'essayer mais rien n'y fait.

En fait mon champ "commentaire" doit s'afficher dans mon textarea.
Si il contiend des \n, pour qu'il s'affiche dans mon textarea je fais la manip suivante:

$commentaire = str_replace("\n"," \\n", $commentaire);

Si je ne fais pas ça j'ai une erreur javascript...et ensuite je l'affiche dans mon formulaire via XMLHTTPRequest.

echo "window.document.forms['monform'].elements['dCommentaire'].value ='".$commentaire."';";

Ensuite, j'enregistre les valeurs dans ma base...sans traitement particulier et c'est après que ça déconne.
Je regarde dans ma base la valeurs enregistrée et pas de problème, il y a bien mon texte en bonne et due forme...mais lorsque j'essaie de le réafficher j'ai une erreur javascript.

Je suis obligé de reformater le texte dans ma base pour que cela re-fonctionne.

. Liv
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
quelle est l'erreur js...?
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

L'erreur renvoyée n'est pas clair...il me met "unterminated string literal".
La chaîne de caractère n'est pas prise en compte dans sa totalité. La valeur renvoyée par la console javascript s'arrête là où j'ai inséré le retour chariot.

. Liv
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
si tu remplaces ton str_replace par un nl2br, tu as la même erreur...??
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

Oui ! C'est ça le plus curieux !
Il me met la même erreur javascript avec la valeur de la variable coupée à hauteur du retour chariot.
Si je ne mets pas nl2br j'ai la même erreur mais sans le

. Liv
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Fais voir le html de ton textarea...?
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

Pour te préciser je fais les tests avec 2 bases de données...l'une en LATIN1 et l'autre en UNICODE...même résultat pour les 2. C'est bizarre tu ne trouves pas ?

. Liv
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

echo '<tr>
<td class="entete_tableau">Commentaires :</td>
<td class="ligne_tableau_p" colspan="">
&nbsp;<textarea id="dCommentaire" name="dCommentaire" class="textebord" cols="60" rows="10" maxlength="100" onKeyPress="CaracMax(\'dCommentaire\', \'500\')"></textarea>
</td>
</tr>';

. Liv
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Pourquoi je ne l'ai pas vu avant..

echo "window.document.forms['monform'].elements['dCommentaire'].value ='".$commentaire."';";

ici, je ne comprends pas ce que tu fais. La méthode xmlhttp object qui va remplir ton élément est en js, pas en phpo, alors pourquoi as-tu un echo?
Ensuite, un textarea n'a pas d'attribut "value". C'est un innerHTML.
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

Oui mais c'est un fichier php.

Voilà la truc...
J'ai un tableau de liens correspondant à différentes données dans ma base. Lorsque je clique sur un lien de ce tableau, je dois pouvoir renseigner dynamiquement les données du formulaire affiché en dessous. Ce lien appelle la fonction ModifImage stockée dans un fichier .js

function ModifImage(id,type)
{
window.document.getElementById("image_detail").style.display = "block";


var xhr_object = null;


if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();


else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");


else
{ // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}


xhr_object.open("GET", "image_request.php?mode=modif&id="+id, true);
xhr_object.onreadystatechange =
function()
{
if(xhr_object.readyState == 4)
eval(xhr_object.responseText);
}


xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//var data = "family="+escape(l1.options[index].value)+"&form="+f.name+"&select=fournisseur";
var data = "bla";
xhr_object.send(data);
}

Cette fonction appelle le fichier php image_request.php, en lui transmettant des variables, qui est censée remplir dynamiquement mon formulaire sans recharger la page.
C'est dans ce fichier php qu'il y a echo "window.document.forms['monform'].elements['dCommentaire'].value ='".$commentaire."';";

J'ai essayé de remplasser .value par .innerHTML...ça ne change rien.

Tout cela marche très bien en fait. J'arrive à remplir tous mes champs, liste select, case à cocher, textarea etc...sauf cette histoire de retour chariot.

. Liv
Messages postés
49
Date d'inscription
lundi 17 mai 2004
Statut
Membre
Dernière intervention
26 avril 2006

Bah voilà !
str_replace("\r\n","", $commentaire); C'était ça le problème ! Le \r devant.

. Liv