Problème avec $_POST

Petit nouveau ! | 4 Messages

13 juil. 2007, 08:20

Bonjour,

Je suis débutant en PHP et je fais face à un problème. Je cherche à ce que le visiteur de mon site rentre un texte dans une zone de texte qui est ensuite envoyé par l'intermédiaire de $_POST (et AJAX) à un fichier PHP qui va transformer ce texte et renvoyer son résultat que je vais mettre dans un DIV. Hors quand j'utilise ce code on dirait que rien ne se passe, ma chaine est totalement vide. J'ai beau avoir cherché sur le net, mon code semble pourtant bon, je comprends pas. Pouvez vous me filer un coup de main?

le fichier principal

Code : Tout sélectionner

<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head> <title>agent virtuel</title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <script type="text/javascript"> function ajaxEnvoiQues(f) { var nom=f.saisie.value; 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("POST", "agent.php", true); xhr.setRequestHeader('Content-type: text/html; charset=iso-8859-1'); xhr_object.send("var=" + nom); xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) { alert(xhr_object.responseText); document.getElementById("paroleDiv").innerHTML = xhr_object.responseText; } } return; } </script> <form name="monFormulaire" method="post" <div id="paroleDiv"> <?php ?> </div> <textarea name="saisie"></textarea> <br> <input type="button" value="Envoyer" onclick="ajaxEnvoiQues(this.form)"> </form> </body> </html>
et le fichier PHP qui pour le moment est très simple:
<?php
echo $_POST['var']  ;

?>
Merci beaucoup!

Mu

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 juil. 2007, 10:32

Ta balise form n'est pas terminée, je ne sais pas si cela joue ou pas :
<form name="monFormulaire" method="post" >
Fait également un alert(nom) juste avant le xhr_object.send("var=" + nom) pour vérifier qu'elle contient bien la bonne valeur au moment de l'envoi :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

13 juil. 2007, 10:47

Putain le truc con:

Code : Tout sélectionner

xhr.setRequestHeader('Content-type: text/html; charset=iso-8859-1');
au lieu de

Code : Tout sélectionner

xhr_object.setRequestHeader('Content-type: text/html; charset=iso-8859-1');
(comme quoi IE c'est pas mal, il envoie des messages d'erreur que Firefox ne fait pas)

Bon y'a du coup j'ai un undefined index dans mon fichier php à cette ligne:
echo $_POST['var']  ;
PAr contre

Code : Tout sélectionner

alert(nom);
renvoie bien la variable nom

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 juil. 2007, 11:00

Fais un print_r($_POST), tu verras ce que tu récupères côté php :)

sinon pour firefox, soit par le menu, soit en tapant " javascript: " dans la barre d'url, cela va t'ouvrir la console de débugage js, et tu devrais voir les mêmes messages que ceux donnés par IE :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

13 juil. 2007, 11:13

Ca répond
Array()
Etrange que ça renvoie un tableau vide alors que ça devrait être une chaîne de caractères (à moins que Send n'envoie que des tableaux?)

Pour le coup de Firefox, merci bien mais je pensais que ça le faisait automatiquement.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 juil. 2007, 11:33

En fait la variable super globale $_POST est un tableau indexé qui doit contenir toutes les valeurs envoyées à la page via la méthode post. Si celui-ci est vide c'est qu'aucune donnée n'a été envoyée (ou du moins reçu) en post.

Je crois de mémoire que pour envoyer des données en post via ajax il faut obligatoirement utiliser le header suivant :

Code : Tout sélectionner

setRequestHeader("Content-type", "application/x-www-form-urlencoded;");
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

13 juil. 2007, 11:47

Ca marche!!!!!!!!

Merci beaucoup!! Voilà ce que ça donne de copier-coller des bouts de code partout!!! (d'autant plus que je me rappelle que j'avais déjà vu ce code là quelque part mais autre chose devait déconner)

Mu