Envoi de données formulaire en POST

:hello:

J’essais de m’essayer (pas facile :stuck_out_tongue: ) à l’AJAX.
Avant d’entamer le XML, je tente de faire juste des petits trucs entre Javascript et PHP. Notamment l’envoi d’un champs de formulaire via la méthode POST
Je dois faire une (toute) petite bêtise quelque part, mais rien à faire, ça ne fonctionne pas. Pouvez-vous éclairer mes lanternes?

Mon petit test fonctionne très bien via la méthode GET :slight_smile:

Pour le code qui va suivre, il n’est pas aux normes ni quoi que ce soit. Ce sont justes des petits tests que je fais, merci de votre indulgence :jap:

Pour commencer, le formulaire contenu dans la page HTML (je vous épargne bien sur tout ce qui va autour) :
Ceci appelle la fonction verif_mail() du script chargé


<input type="text" size="30" id="myEmail" />
<input type="button" value="Valider" onclick="verif_mail()" />
<br />
<div class="text_r" id="errorMessage"></div>

Voici le code JavaScript:


function verif_mail()
{
  if (xmlHttp)
  {
  	toto = "myEmail=" + document.getElementById("myEmail").value;
    try
    {
      if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
      {
        xmlHttp.open("POST", "monscriptphp.php", true);
        xmlHttp.onreadystatechange = handleRequestStateChange;
        xmlHttp.send(toto);
      }
    }
    catch (e)
    {
      alert(e.toString());
    }
  }
}

Pas besoin de vous montrer le script PHP, il fonctionne correctement, mais ne reçoit pas la variable “myEmail” via POST ($_POST[‘myEmail’] )

Faut-il que je passe un paramètre à verif_mail() dans l’appel à la fonction ?
(du genre verif_mail(“myEmail”) ) ?

Merci de votre aide :slight_smile:
Edité le 14/02/2008 à 14:51

xmlHttp.send(toto);
toto vaut ?

Les arguments de send() correspondent aux variables $_POST à envoyer.

xmlHttp.send(email=oximini@clubic.com);
et dans ton script php tu récupère la valeur par $_POST[‘email’]

Toto est normalement déjà initialisé par ceci (cf début de la fonction) :



toto = "myEmail=" + document.getElementById("myEmail").value;


Un peu plus d’information:
l’affichage de ma variable toto donne bien ceci:
“myEmail=xxx@xxx.xxx”

En fait, ce qui se passe c’est que malgré l’appel xmlHttp.send(toto), rien n’est envoyé (via POST en tout cas) au script PHP.

Voici le début de mon script PHP:


<?php

if (isset($_POST['myEmail']) && $_POST['myEmail'] != ''){$mail = $_POST['myEmail'];}else{$mail = NULL; $error = 'Aucune adresse'; }

if (!isset($error))
{
        //toutes mes instructions qui vont bien
}
else
{
	echo $error.$_POST['myEmail'];
}
?>

Et j’obtiens donc un notice lorsque j’afiche ma variable $_POST[‘myEmail’] avec l’erreur :
Notice: Undefined index: myEmail in verifmail.php on line xx

Merci de votre aide :slight_smile:

Saluton,

Peux-tu faire commencer monscriptphp.php par

var_dump($_POST)

, et nous donner le résultat.

Hello,

le var_dump sur ma variable $_POST[‘myEmail’] ressort (prévisible) tout simplement un “NULL”

Le problème se situe bien au niveau du code JavaScript :confused:

Pour info, dans mon code js, si j’affiche ma variable toto j’ai bien
“myEmail=xxx@xxx.xxx”

donc cette ligne ne fonctionne pas (ou mal ?):


xmlHttp.send(toto);

Saluton,
Qu’est censée faire la fonction d’attente handleRequestStateChange ?

Tout simplement attendre le statut de la requête pour savoir si on peut récupérer la réponse du script PHP:


function handleRequestStateChange()
{
  if (xmlHttp.readyState == 4)
  {
    if (xmlHttp.status == 200)
    {
      try
      {
        readResponse();
      }
      catch(e)

      {
        alert(e.toString());
      }
    }
    else
    {
      alert(xmlHttp.statusText);
    }
  }
}

Et bien sur, la petite fonction de lecture des réponses qui va bien:


function readResponse()
{
  var response = xmlHttp.responseText;
  var myErrorMessage = document.getElementById("errorMessage");
  myErrorMessage.innerHTML = response;
}


Je suis inquiet, je fouille le net, mais je ne trouve aucun cas pareil :lol:

Il semble que la méthode POST requiert le mode asynchrone et

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

avant xmlHttp.send(toto)
Tu devrais parcourir ça

Pffff… saleté de header !

Comme un c** j’ai inversé et pensé qu’il était réservé pour la méthode GET :sweet:
Du coup je n’ai même pas pensé à essayer de le remettre. Misère… tant d’arrachage de cheveux pour rien :slight_smile:

Je te remercie pour m’avoir ouvert les yeux Kris :jap:
Edité le 14/02/2008 à 14:51

Ne dankinde.