[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 :mrgreen:
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:
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â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:
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:
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:
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