Bonjour,
Cela commence à faire un bon moment que je suis dessus.
J'ai créé un code javascript me permettant d'utiliser ajax grace à la classe XMLHttpRequest.
Mon seul problème est que mon code php ne recois pas les variable POST que je lui envoie.
J'ai pensé à une erreur de ma part dans mon code javascript, cependant, Firebug détecte bien l'envoie de mes variables par la méthode POST vers mon script php. De plus, le code php marchais avant que je veuille passer par ajax.
Après avoir chercher toute la journée d'hier, je ne vois vraiment pas d'où pourrait venir mon erreur...
La mini librairy que je me suis créé (lib/javascript.js):
function getXmlHttpRequest () {
var xhr;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
if (xhr.overrideMineType) {
xhr.overrideMineType('text/html');
}
} else {
if (window.ActiveXObject) {
try {
xhr = new ActiveXObjetct('Msxml2.XMLHTTP');
} catch(e) {
try {
xhr = new ActiveXObjetct('Microsoft.XMLHTTP');
} catch(e) {
xhr = null;
}
}
}
}
return xhr;
}
function sendRequest(url, data, id) {
var xhr = getXmlHttpRequest();
if (xhr != null) {
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-unlencoded');
xhr.send(data);
xhr.onreadystatechange = function() {
try {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
document.getElementById(id).innerHTML = xhr.responseText;
alert(url + ' --- ' + data + ' --- ' + id);
} else {
alert('Ajax error ' + xhr.status);
}
}
} catch(e) {
alert('Une execption s\'est produite ' + e.description);
}
};
} else {
alert('La version de votre navigateur ne supporte pas les outils de la technologie Ajax. Veuillez le mettre à jour.');
}
}
Ma page de login (login.php) :
<?php session_start(); if (isset($_SESSION['utilisateur'])) { header('location:index.php'); } ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title> Guyader Intranet - Connexion </title>
<noscript> <meta http-equiv="refresh" content="0;url=nojavascript.php"> </noscript>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<link rel="stylesheet" type="text/css" href="design/login.css"/>
<link rel="icon" type="image/png" href="image/logo/icon.png"/>
<script type="text/javascript" src="lib/javascript.js"> </script>
<script type="text/javascript">
function sendLoginRequest() {
sendRequest(
'exe/login.php',
'id=' + document.getElementById('id-input').value + '&password=' + document.getElementById('password-input').value,
'login-result'
);
if (document.getElementById('login-result').value == '') {
window.location.replace('index.php');
}
}
function sendLoginRequestOnKeyUp(event) {
if (event.keyCode == 13) {
sendLoginRequest();
}
}
</script>
</head>
<body>
<div id="container">
<div id="guyader-intranet-logo"> </div>
<form id="identification">
<div align="center"> Utilisateur </div>
<div align="center" > <input class="text-align-center" id="id-input" type="text" onkeyup="javascript:sendLoginRequestOnKeyUp(event);"/> </div>
<div align="center"> Mot de passe </div>
<div align="center"> <input class="text-align-center" id="password-input" type="password" onkeyup="javascript:sendLoginRequestOnKeyUp(event);"/> </div>
<div align="center" class="espace"> </div>
<div align="center"> <input type="button" value="Connexion" onclick="javascript:sendLoginRequest();"/> </div>
<div align="center" class="espace"> </div>
<div align="center" id="login-result"> </div>
</form>
</div>
</body>
</html>
Et finalement ma page de code php qui s'occupe de la connexion de l'utilisateur si son login et password sont valide (exe/login.php), j'y ai rajouté un test pour voir s'il la variable $_POST['id'] existe :
<?php
//header('Cache-Control: no-cache, must-revalidate');
//header('content-type:text/plain;charset=utf-8');
$id = $_POST['id'];
if (!isset($_POST['id'])) { // Toujours vrai, d'où mon problème...
echo 'Variable POST non recu';
} else {
$id = $_POST['id'];
$password = $_POST['password'];
if ($id == '' || $password == '') {
$html = 'Veuillez remplir les deux champs pour vous authentifier';
} else {
require_once('connexion_db.php');
$sql_result = mysql_query ('
SELECT nom, prenom, libelle
FROM utilisateur, groupe
WHERE utilisateur.id_groupe = groupe.id
AND utilisateur.id = "'.$id.'"
AND mdp = "'.$password.'";
') or die ('Erreur SQL : ' . mysql_error());
mysql_close();
if (mysql_num_rows($sql_result) == 1) {
require_once('../class/utilisateur.php');
$fetch_result = mysql_fetch_row($sql_result);
session_start();
$_SESSION['sessionId'] = session_id();
$_SESSION['utilisateur'] = new Utilisateur($id,$fetch_result[1],$fetch_result[2],$fetch_result[3]);
} else {
$html = 'Erreur d\'authentification';
}
}
echo $html;
}
?>
En gros ca me retourne toujours le message "Variable POST non recu".
Je n'utilise pas de librairy javascript style jQuery, Prototype ou autre car j'aimerai savoir faire ca moi même en comprenant mon code à 100%.
Merci d'avance.