JeuWeb - Crée ton jeu par navigateur
[AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) (/showthread.php?tid=2096)

Pages : 1 2


[AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - php_addict - 28-09-2010

Bonjour

je viens de me rendre compte que j'ai fait un truc en AJAX qui n'est pas terrible pour le nombre d'acces à ma base de donnée.

Lors de l'inscription d'un joueur, quand il est en train de remplir le champs "pseudo" du formulaire d'inscription, j'ai fais un simple script en AJAX (avec Jquery Wink) qui verifie si le pseudo qu'il est en train de saisir n'existe pas dejà.

si le pseudo existe, une div se remplit avec un avertissement, aucun rafraichissement de page (c'estun peu le but me direz vous)

mais voila, a chaque fois que le joueur non inscrit tape une lettre de son clavier cela declenche une requete vers le base de donnée pour verifier le pseudo

1 touche tapée = une requete SQL

c'est un peu lourd je trouve.

comment feriez vous à ma place pour reduire le nombre de requetes ?
un syteme de cache? oui mais où (côté serveur ou client), et comment ?

bon apetit !


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - djidi - 28-09-2010

Changer le type d'évènement : blur, qui déclenchera l'évènement lorsque le champs permet le focus (http://jquery.developpeur-web2.com/documentation/evenements/blur.php)

Ajouter une icone "Tester mon pseudo" à coté du champs.


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - Anthor - 28-09-2010

Au lieu de regarder à chaque touche, tu regardes, soit lorsque l'input perd le focus, ou bien tu met une temporisation pour voir quand il s'arrête de taper.

Par contre, vu que c'est une inscription, j'irais pas jusqu'à dire que c'est quelque chose de terrible pour ta base de données.


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - Sephi-Chan - 28-09-2010

Moi j'attendrais qu'il ai tapé la première lettre pour lancer une requête Ajax qui irait chercher tous les utilisateurs dont le nom commence par cette lettre. Cette requête me retournerait (en JSON) un simple tableau de noms tel que :


[ 'Corwin', 'Caine' ]

Puis dans le callback de cette méthode, je stockerai le tableau retourné grâce à la méthode data de jQuery.


$('body:first').data('used_usernames', array_of_names);

Après, je suis sûr que tu t'en sortira. En t'aidant de la méthode inArray.


Sephi-Chan


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - niahoo - 28-09-2010

mais ça permet à n'importe qui de pécho la liste des users .. bon dans pas mal de jeu ça n'est pas un problème.

sinon c'est assez malin je trouve.

mais tu peux aussi simplement lancer ta requete ajax toutes les x secondes du moment que le champ a le focus et que sa value remplit les conditions de validation de pseudo (x caractères, caracteres spéciaux autorisés, etc.)


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - php_addict - 28-09-2010

merci pour vos avis, effectivement je vais changement mon evenement et tenter un pseudo systeme de cache...


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - Roworll - 28-09-2010

Lors de la validation du formulaire, est-ce que tu fais d'autres contrôles qui peuvent s'avérer bloquants ?
Si c'est le cas, je pense qu'il vaut mieux mettre la vérification de l'unicité du pseudo au même niveau. en effet, on se moque un peu du fait que le joueur ait un pseudo unique si le reste des champs de l'inscription sont remplis de valeurs qui ne passeront pas la validation.
La plupart des MMOs pros que j'ai fréquenté fonctionnent d'ailleurs sur ce principe.

Si seul le pseudo est soumis à vérification, comme l'idée est de ne pas réactualiser la page en cas de doublon, pourquoi ne pas lancer ta procédure AjaX lorsque le joueur clique sur le bouton submit (ce qui permet de faire plusieurs checks au même moment) ou au pire à la perte de focus comme suggéré plus haut ??


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - php_addict - 28-09-2010

(28-09-2010, 01:01 PM)Roworll a écrit : Lors de la validation du formulaire, est-ce que tu fais d'autres contrôles qui peuvent s'avérer bloquants ?

oui côté serveur: taille du pseudo, taille du mot de passe, caracteres interdits genre bbcodes, etc...

(28-09-2010, 01:01 PM)Roworll a écrit : Si seul le pseudo est soumis à vérification, comme l'idée est de ne pas réactualiser la page en cas de doublon, pourquoi ne pas lancer ta procédure AjaX lorsque le joueur clique sur le bouton submit (ce qui permet de faire plusieurs checks au même moment) ou au pire à la perte de focus comme suggéré plus haut ??

et quand tu clique sur le submit, comment ne pas envoyer la requete http en cas de doublon ?


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - Roworll - 28-09-2010

(28-09-2010, 01:12 PM)php_addict a écrit : et quand tu clique sur le submit, comment ne pas envoyer la requete http en cas de doublon ?

Simple. grâce à JS tu interceptes le submit, tu fais ton appel Ajax et en fonction des informations en retour, tu annules ou valide l'évènement submit() en mettant en prime si besoin est un joli message d'information. Les bons frameworks JS permettent ça sans problème.

(28-09-2010, 01:12 PM)php_addict a écrit : oui côté serveur: taille du pseudo, taille du mot de passe, caracteres interdits genre bbcodes, etc...

Dans ce cas, pourquoi te casser la tête à faire un pre-check Ajax sur l'unicité du pseudo ?
De toute manière, tu devras refaire un check d'unicité au moment ou le formulaire sera validé pour de bon. Il peut en effet arriver qu'entre le moment ou le joueur teste son pseudo et le moment ou il valide la page, une autre personne lui ait grillé la politesse.
Donc, dans tous les cas de figure, tu devras gérer cette situation. Et c'est sans parler des autres contrôles que tu souhaites effectuer.

Au final, mettre un bout de code Ajax sur cette partie, fonctionnellement ça n'a aucune utilité. Si on veut rationaliser jusqu'au bout, c'est une perte de temps en développement et des ressources consommées inutilement sur le serveur (je sais, c'est minime mais dans l'absolu, c'est tout de même une perte).

Le seul intérêt que je peux y voir c'est que cela rajoute un poil d'interaction (très à la mode) et te permets de te faire la main avec les Frameworks et Ajax.


RE: [AJAX] verification que le pseudo n'existe pas (remplissage formulaire d'inscription) - Sephi-Chan - 28-09-2010

(28-09-2010, 01:12 PM)php_addict a écrit : et quand tu clique sur le submit, comment ne pas envoyer la requete http en cas de doublon ?

Avec jQuery, tu peux faire :


$('#register-form').submit(function(event)){
var $form = $(this);

$.ajax({
type: 'POST',
dataType: 'json',
sucess: function(){
$form.submit();
},
error: function(){
// Si ta page retourne une erreur au sens HTTP du terme (pas le code 200).
// Avec PHP tu peux renvoyer ça avec la fonction header, exemple : header("HTTP/1.0 404 Not Found");
// Mais si tu préfères, tu peux aussi renvoyer une réponse normale genre un objet JSON de la forme :
// { errors: [ 'username_is_already_used', 'password_is_to_short' ] }
}
});

event.preventDefault();
}


Sephi-Chan