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 :
HTML :
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
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; }
PHP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Comme vous l'aurait constaté, j'ai volontairement afficher le mot de passe pour voir le traitement...
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 <?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; } ?>
Avec firebug, voilà ce que j'ai :
Aidez-moi SVP !!!!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci d'avance...
Partager