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

JavaScript Discussion :

[AJAX] Données formulaire en POST non-trasmises


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut [AJAX] Données formulaire en POST non-trasmises
    Bonjour à tous

    J'ai cherché un peu sur le forum, dans les tutos, j'ai essayé tout un tas de truc, mais je n'arrive décidemment pas à résoudre mon problème, problème que vous trouverez peut-être simple, mais là moi je suis un newb total en ce qui concerne Javascript et encore plus Ajax

    J'ai un formulaire dans une page, je souhaite envoyer par la méthode POST les données à une page de traitement PHP qui m'affichera un résultat dans une DIV au dessus du formulaire, bien évidemment en utilisant Ajax.

    Alors j'arrive bien à appeller mon code Ajax, je récupère correctement les données (j'utilise un alert() pour controler), je les met en forme comme je l'ai vu dans le forum pour les passer avec xhr.send(), mais là dans le script PHP de traitement, les variables POST ne sont pas reconnus et bien évidemment le traitement foire. Est-ce que vous avez une idée de mon erreur svp?

    Sachant que le fichier de traitement est trouvé et que les données récupérées par Javascript sont les bonnes. Il semble donc que c'est dans la transmission ou alors dans ma façon de récupérer les données dans le traitement PHP que ça cafouille...

    Voilà le code du formulaire:
    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
    21
    22
    <div id="alerte"></div>
    Vous pouvez modifier votre mot de passe gr&acirc;ce au formulaire suivant :
    <br><br>
    <form name="modifpwd" onsubmit="javascript: return false;">
    <table>
    <tr>
    <td>Votre mot de passe actuel : </td>
    <td><input type="password" name="old_pwd"></td>
    </tr>
    <tr>
    <td>Votre nouveau mot de passe : </td>
    <td><input type="password" name="new_pwd"></td>
    </tr>
    <tr>
    <td>Confirmez votre nouveau mot de passe : </td>
    <td><input type="password" name="new_pwd1"></td>
    </tr>
    <tr>
    <td align="right" colspan="2"><input type="submit" value="Modifier" name="cmdok" onclick="javascript: ajax('op/op-changePWD.php', 'alerte', 'POST', 'modifpwd');" /></td>
    </tr>
    </table>
    </form>
    Code Ajax utilisé:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <script language="JavaScript">
    function getFormData(form)
    {
    var data = "";
    var form = document.getElementById(form);
    var elements = form.elements;
    for(var i=0; i<form.length; i++)
    {
    data += elements[i].name + "=" + elements[i].value;
    if((i+1)<form.length)
    {
    	data+="&";
    }
    //alert('Element: '+elements[i].name+" \nValeur: "+elements[i].value);
    }
    return data;
    }
     
    function ajax(fichier, div, method, form)
    { 
    var xhr=null;
     
    var data="null";
    if(form!="null")
    {
    data = getFormData(form);
    }
     
    if (window.XMLHttpRequest)
    { 
    xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) 
    {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //on appelle le fichier reponse.txt
    xhr.open( method, fichier, false);
    alert("Fichier: "+fichier+"\nDonnées: "+data);
    xhr.send(data);
     
    document.getElementById(div).innerHTML=xhr.responseText;
    } 
    </script>
    Le code PHP de traitement (j'ai retiré le script de connexion pour raisons de confidentialité):
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?
    $query = "SELECT id, password FROM user WHERE login='".$_SESSION['site-log']."' AND etat=1";
    $req = mysql_query($query) or die ("Erreur SQL de vérification de compte");
    $rez = mysql_fetch_assoc($req);
     
    $resultat="0";
     
    if($_POST['old_pwd']!="")
    {
    $old_pwd=$_POST['old_pwd'];
    }
    else
    {
    $resultat="c3";
    }
     
    if($resultat==0 && md5($old_pwd)!=$rez['password'])
    {
    $resultat="c3";
    }
     
    if($resultat==0 && $_POST['new_pwd']!="")
    {
    $new_pwd=$_POST['new_pwd'];
    }
    else
    {
    $resultat="c2";
    }
     
    if($resultat==0 && $_POST['new_pwd1']!="")
    {
    $new_pwd1=$_POST['new_pwd1'];
    }
    else
    {
    $resultat="c2";
    }
     
    if($resultat==0 && $new_pwd1!=$new_pwd)
    {
    $resultat="c2";
    }
     
    if($resultat==0)
    {
    $query = "UPDATE user SET password='".md5($new_pwd)."' WHERE id=".$rez['id'];
    $req = mysql_query($query) or die ("Erreur SQL de modification de compte");
    $_SESSION['studionet-pwd']=md5($_POST['new_pwd']);
    $resultat="c1";
    }
    echo($resultat);
    ?>
    Voici le retour de l'exécution et donc ce que s'affiche dans mon DIV:
    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
    Notice: Undefined index: old_pwd in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 33
     
    Notice: Undefined variable: old_pwd in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 42
     
    Notice: Undefined index: new_pwd in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 47
     
    Notice: Undefined index: new_pwd1 in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 56
     
    Notice: Undefined variable: new_pwd1 in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 65
     
    Notice: Undefined variable: new_pwd in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 65
     
    Notice: Undefined variable: new_pwd in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 72
     
    Notice: Undefined index: new_pwd in c:\program files\easyphp1-8\www\studionet\op\op-changepwd.php on line 74
    c1
    Comme vous pouvez le voir, aucune donnée n'a été récupérée par PHP. Comme qui dirait, c'est un peu génant. Donc si vous pensez pouvoir m'aider, n'hésitez pas. Merci d'avance.

    Gwinyam

  2. #2
    Membre émérite Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par défaut
    Avec this.req comme objet de type XMLHttpRequest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    this.req.open( this.method, this.url, true );
    if ( this.method == "POST" ) {
       this.req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
       this.req.send( params );		
    }
    else {
       this.req.send( null );		
    }

  3. #3
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    Euh je sais pas si ton truc marche, mais j'ai trouvé la réponse...enfin on m'a un peu aidé quand même...

    Dans le code Ajax, j'avais oublié ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    J'ai honte parfois...

    Merci quand même

  4. #4
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Just au cas où moi j'ajouterai une couche escape avant d'envoyer les données en post.

    Y.Chaouche

  5. #5
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Par défaut
    C'est à dire?

    Désolé, je débute totalement...

  6. #6
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    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
    function getFormData(form)
    {
    var data = "";
    var form = document.getElementById(form);
    var elements = form.elements;
    for(var i=0; i<form.length; i++)
    {
    data += escape(elements[i].name + "=" + elements[i].value);
    if((i+1)<form.length)
    {
    	data+="&";
    }
    //alert('Element: '+elements[i].name+" \nValeur: "+elements[i].value);
    }
    return data;
    }
    Ceci permet d'envoyer correctement les accents, les caractères spéciaux etc.

    Y.Chaouche

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/10/2013, 16h15
  2. [AJAX] Envoie donnée formulaire en POST
    Par Metalyn dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/06/2008, 17h40
  3. Récupération de donnée formulaire AJAX vers PHP
    Par Starbug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/10/2007, 18h38
  4. Réponses: 3
    Dernier message: 09/04/2007, 15h29
  5. encodage des données lors du post en AJAX
    Par jibouze dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 19/04/2006, 21h26

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