[AJAX] Authentification et pb d'encodage
Bonjour,
Voilà, j'ai un script d'authentification par AJAX et tout marchait bien, mais je me suis rendus compte en faisant des test, que si un utilisateur mettait un caractère interdit (genre +), le sigle était interprété (donc si on reprends +, transformation en espace).
J'ai eut beau essayer les "escape", "encodeURI" ou les deux combiné, rien à faire !!!
Cela fait 2h que je cherche sur le net, pour trouver exactement ce que j'ai fais...
Voici le code en espérant que quelqu'un puisse m'aider...
JS :
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
function rq(t, o, i){ // type, objet, instruction
var req = 't='+escape(encodeURI(t))+'&o='+escape(encodeURI(o))+'&i='+escape(encodeURI(i));
//Création de la requette ajax
try{
requette_ajax = new ActiveXObject('Microsoft.XMLHTTP');
}
catch(err){
try{
requette_ajax = new ActiveXObject('Msxml2.XMLHTTP');
}
catch(err){
try{
requette_ajax = new XMLHttpRequest();
}
catch(err){
requette_ajax = null;
alert("Votre naviguateur ne supporte pas l'Ajax !\nLe site nécésite le support de la technologie Ajax. Merci de visitez ce site avec un navigateur tel que Chromium, Google Chrome, Firefox, Safari, Opéra, Netscape, ou IE7 et +.");
}
}
}
if(requette_ajax != null){
//Ouverture et éxécution de la requette ajax
requette_ajax.onreadystatechange = function() { recup(requette_ajax); };
requette_ajax.open('POST', 'rq.php', true);
requette_ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
requette_ajax.setRequestHeader("Content-length", req.length);
requette_ajax.setRequestHeader("Connection", "close");
requette_ajax.send(req);
alert(req);
//requette_ajax.open('GET', 'rq.php?'+req, true);
//requette_ajax.send(null);
}
}
function recup(xhr){
if(xhr.readyState == 4){
if(xhr.status == 200){
var data = xhr.responseText;
var infos = data.split('|');
var type = infos[0];
var rep = infos[1];
var id = infos[2];
var traitement = infos[3];
if(traitement == "mep"){
rep = "<span class=\""+type+"\">"+rep+"</span>";
}
if(id == "cnx"){
rep = '<li class="droite">'+rep+'</li>';
}
$(jId(id)).fadeOut(800, function(){
document.getElementById(id).innerHTML = rep;
$(jId(id)).fadeIn(3000);
});
}
}
}
function cnx(action){
if(action == 'co'){
var o = el('login').value+'|'+el('pass').value;
rq('cnx', o, 'cnx');
}
else{
rq('cnx', '', 'deco');
}
return false;
} |
HTML :
Code:
1 2 3 4 5 6
|
<form method="post" action="" onsubmit="return cnx('co');">
PseudO : <input type="text" name="login" id="login" size="10" />
MdP : <input type="password" name="pass" id="pass" size="10" />
<input type="submit" value="LogiN" />
</form> |
PHP :
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
|
<?php
session_start();
require_once "inc/cnx.inc.php";
require_once "inc/fnct.inc.php";
if(!isset($_POST['t'], $_POST['o'], $_POST['i'])){
exit();
}
$opp = explode("|", urldecode($_POST['o']));
switch(urldecode($_POST['t'])){
case 'cnx':
if(urldecode($_POST['i']) == "cnx"){
$rq = @mysql_query("SELECT * FROM adherents WHERE pseudo='".mysql_real_escape_string($opp[0])."' AND pass='".$opp[1]."'");
if($rq){
if(@mysql_num_rows($rq) > 0){
$tab = @mysql_fetch_array($rq);
$_SESSION['infos'] = stripslashes($opp[0])."|".stripslashes($opp[1])."|".stripslashes($tab['mail'])."|".stripslashes($tab['nbcom'])."|".stripslashes($tab['site']);
echo "ok|<b>Bienvenur ".stripslashes($opp[0])." !</b> <a href=\"?p=\">ProfiL</a> - <a onclick=\"cnx('deco');\">DéconnexioN</a>|cnx|brut";
}
else{
echo "imp|Pseudo ou mot de passe incorrect ! ".$opp[1]." <a onclick=\"aff_cnx();\">ré-essayer</a>|cnx|mep";
}
}
else{
echo "imp|Erreur lors de l'exécution de la requette ! <a onclick=\"aff_cnx();\">ré-essayer</a>|cnx|mep";
}
}
elseif(urldecode($_POST['i']) == "deco"){
session_destroy();
if(isset($_SESSION['infos'])){
echo "imp|Erreur lors de votre déconnexion. <a onclick=\"cnx('deco');\">Déconnexion</a>|cnx|mep";
}
else{
echo "ok|<li class=\"droite\"><a onclick=\"aff_cnx();\" title=\"ConnexioN\">ConnexioN</a></li>\n<li class=\"droite\"><a href=\"/?p=5\" title=\"InscriptioN\">InscriptioN</a></li>\n|cnx|brut";
}
}
break;
default:
exit();
break;
}
?> |
Comme vous l'aurait constaté, j'ai volontairement afficher le mot de passe pour voir le traitement...
Avec firebug, voilà ce que j'ai :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
Post
Paramètres application/x-www-form-urlencoded
i cnx
o test%7C 22 33
t cnx
Source
t=cnx&o=test%257C++22++33&i=cnx
Réponse
imp|Pseudo ou mot de passe incorrect ! 22 33 <a onclick="aff_cnx();">ré-essayer</a>|cnx|mep |
Aidez-moi SVP !!!!!!
Merci d'avance...