IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] AJAX PHP POST Impossible de récupérer la valeur de mon POST


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut [AJAX] AJAX PHP POST Impossible de récupérer la valeur de mon POST
    Bonjour à tous,

    Après de longues heures à parcourir le forum pour de multiples raisons, j'ai décidé de franchir le pas de l'inscription... Et ce n'est pas pour la raison que j'aurais préféré... J'ai un problème que je n'arrive pas à résoudre...

    Celui-ci est semblable au problème rencontré ici:
    http://www.developpez.net/forums/d46...-denvous-post/

    J'essaye de récupérer ma variable postée, qui apparait bien dans Firebug mais un isset($_POST['maVariable']) n'est jamais vrai.

    Voici mon code:

    Le but du script est de remplir un select "ville" en fonction du contenu d'un input "cp". J'utilise donc pour faire des tests un appel de ma fonction javascript sur l'évenement onblur de l'input "cp":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" id="cp" name="cp" value="<?php if (isset($cp)) echo $cp; ?>" style="width:60px;" onblur="this.className='normal'; get_ville();" onfocus="this.className='focus';" />

    Ma fonction get_ville (la vérification est pour l'instant très simplifiée pour la phase de test):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function get_ville() {   
        if (document.getElementById('cp').value.length == 5) {   
            var cp = document.getElementById('cp').value;
            return !sendCp(
            'POST',
            'nav.php?p=informations',
            'cp='+cp);
        } else
            alert('Code postal non valide');
    }
    La fonction "sendCp" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function sendCp(method, url, data) {
     var xmlhttp = getHTTPObject();
     if (!xmlhttp) {
      return false;
     }
     if(method == "GET") {
      if(data == 'null') {
       xmlhttp.open("GET", url, true);
      } else {
       xmlhttp.open("GET", url+"&"+data, true);
      }
      xmlhttp.send(null);
     } else if(method == "POST") {
      xmlhttp.open("POST", url, true);
      xmlhttp.onreadystatechange = statutChangeCp;
      xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
      xmlhttp.send(data);
     }
     return true;
    }
    Et enfin la fonction "statutChangeCp":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function statutChangeCp() {
     if (xmlhttp.readyState == 1) {
      document.getElementById("vcp").innerHTML = "<img src='images/loader_circ.gif' width='15' height='15' alt='Veuillez patienter...' />";
     } else if (xmlhttp.readyState == 4 && xmlhttp.status == 200 ) {
      try {
        xmlDoc = xmlhttp.responseXML;
        document.getElementById("vcp").innerHTML = "";
      }
      catch (e) {
       alert("Erreur lors de la lecture de la réponse: " + e.toString());
      }
     }
    }

    Le post est d'apres firebug bien passé mais ma variable php $_POST['cp'] reste toujours vide et n'est d'ailleurs pas définie. Mon readyState passe bien à 4 aussi. Le traitement est donc complet et sans erreur. Pourtant je dois bien en faire une...

    Malheureusement, mon 'Content-type','application/x-www-form-urlencoded' est je pense correct donc mon erreur n'est, je pense, pas la même que dans le message indiqué plus haut.

    Note: Si je soumet le formulaire par le bouton submit tout fonctionne mais le but est évidemment de ne pas resoumettre la page.

    Je suis désespérément à la recherche d'une piste ou même, d'une solution :p

    Merci de m'avoir lu.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour et bienvenue sur Developpez.com, donc
    tu passes aussi un paramètre (p) dans l'url
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'nav.php?p=informations',
    'cp='+cp);
    Est-ce que ça ne pose pas problème côté PHP ? Est-ce que le traitement PHP effectué est celui attendu ? (comment se passe ce traitement si "p" n'est pas récupéré ?).
    Ma question derrière tout ça est : as-tu essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'nav.php',
    'p=informations&cp='+cp);
    ?

    A+

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Bonjour,

    D'abord merci de m'avoir lu et répondu.

    Le paramètre p est le nom de la page; par exemple la page sur laquelle je travail est accessible par /nav.php?p=informations. Mon but est donc de poster mon code postal cp sur cette page. C'est pourquoi j'ai procédé ainsi.

    Voilà l'affichage Firebug qui me parait cohérent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    POST http://localhost/.../nav.php?p=informations 200 OK 62ms
     
    Post: 
    Paramètres               application/x-www-form-urlencoded
    cp 77170
    Source
    cp=77170
    En utilisant le code ci-dessous cela reviendrait à poster les 2 variables dans nav.php non ? Dans ce cas, ça n'irait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'nav.php',
    'p=informations&cp='+cp);
    Merci

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Si tu fais un juste avant le send, le paramètre est-il généré correctement ?
    Peut-on voir le code où tu récupères "cp" côté PHP ?
    Sinon, même si ça n'a sûrement pas d'impact ici, ta variable "cp" risque de poser problème avec IE, car elle correspond à l'id d'un élément de la page.
    Pour améliorer la compatibilité, il vaudrait mieux la renommer ...

    A+

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Un alert avant le send m'affiche cp=77170

    Coté php, je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (isset($_POST['cp']))
      $cp = $_POST['cp'];
    C'est vrai que mon nommage n'est pas terrible, je vais le corriger.

    Merci

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Juli3ns Voir le message
    ma variable php $_POST['cp'] reste toujours vide et n'est d'ailleurs pas définie.
    Quelle réponse génère ton PHP dans ce cas ?
    Citation Envoyé par Juli3ns Voir le message
    Mon readyState passe bien à 4 aussi. Le traitement est donc complet et sans erreur. Pourtant je dois bien en faire une...
    Quel est le comportement ? La liste cible est inchangée ? Elle se vide ?
    Je ne vois pas comment le traitement peut se dérouler correctement si la paramètre n'est pas récupéré
    Y a peut être une fausse piste la dessous ...

    A+

  7. #7
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Je ne suis pas certain d'avoir bien compris les questions, je vais essayer de répondre quand même.

    Citation Envoyé par E.Bzz Voir le message
    Quelle réponse génère ton PHP dans ce cas ?
    Lorsque $_POST['cp'] est vide, mon select contenant les villes n'est pas renseigné.

    Citation Envoyé par E.Bzz Voir le message
    Quel est le comportement ? La liste cible est inchangée ? Elle se vide ? A+
    Si je place un alert lorsque readyState vaut 4, celui-ci sera bien affiché.

    Merci

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Juli3ns Voir le message
    Lorsque $_POST['cp'] est vide, mon select contenant les villes n'est pas renseigné.
    Ça c'est plutôt une réponse à la 2° question (comportement)
    Ce que je voulais savoir c'est ce que contient ton xmlhttp.responseXML dans ce cas (avec un alert() par exemple).
    Citation Envoyé par Juli3ns Voir le message
    Si je place un alert lorsque readyState vaut 4, celui-ci sera bien affiché.
    Ca signifie simplement qu'il n'y a pas de plantage JS.

    Par contre, je ne vois pas où tu récupères le XML pour l'insérer dans le <select>

    A+

  9. #9
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 20
    Par défaut
    Un alert sur xmlhttp.responseXML m'affiche objectXMLDocument.

    Citation Envoyé par E.Bzz Voir le message
    Par contre, je ne vois pas où tu récupères le XML pour l'insérer dans le <select>
    Bingo, je n'ai rien fait pour... Je dois me tromper ici.

    Je pensais qu'il était correct de faire simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (isset($_POST['cp'])) {
      $cp = $_POST['cp'];
      //Requete de récupération des villes
     }
    ...
    ...
    if (isset($cp)) {
      for ($i=0; $i<count($villes); $i++)
      echo '<option value="'.$villes[$i][0].'">'.$villes[$i][1].'</option>';
    }
    Je ne sais donc pas comment faire... Si j'ai bien compris, il me manque le X d'Ajax ?!

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Juli3ns Voir le message
    Si j'ai bien compris, il me manque le X d'Ajax ?!
    En quelques sortes, oui ... sauf que ton X n'en est pas un : la réponse générée n'est visiblement pas du XML
    C'est simplement la liste des options.

    Il va falloir que tu revois cette partie-là

    Tu peux t'inspirer de ce tuto de siddh sur les listes liées.
    Attention, toujours pour IE, comme dans le tuto, il faut que ta réponse Ajax contienne aussi les balises <select> et </select> (en plus des options)

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/03/2012, 11h26
  2. Réponses: 4
    Dernier message: 22/04/2010, 16h06
  3. [AJAX] Ajax et PHP - Récupérer plusieurs champs ?
    Par stephnane dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/09/2007, 22h09
  4. [AJAX] Impossible de récupérer les valeurs en Post
    Par Tommyl dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2007, 20h30
  5. [HTML][PHP] Formulaire impossible de récupérer les variables
    Par Pfeffer dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 11/11/2005, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo