Astuces-Webmaster

Accueil > tutos > ajax > check-if-user-exist-ajax

Vérifier si un pseudo est disponible en AJAX

Difficulté Tags / Mots-clés Prérequis
niveau moyen Vérifier si un utilisateur existe déjà dans la base de données, Check if user already exists, check asynchrone, vérification pseudo Ajax, check Ajax BDD, check username MySQL Bonne base XHTML / CSS, Notions AJAX et Javascript
Durée Voir aussi Publié le
30 min Formulaire de contact AJAX, Système de vote AJAX 22 janvier 2011

Avantages

Pas de rechargement de la page pendant la navigation


Inconvénients

URL déformées



Référencement

 


Arborescence du module complet :

 

Etape 2 : HTML

Vous releverez que le Doctype est standardisé depuis l'arrivée du HTML5.

index.html

  	<!DOCTYPE html>
		<html>
			<head>
				<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
				<title>Demo AJAX Pseudo Check</title>
				<link rel="stylesheet" type="text/css" href="css/style.css" />
				<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
			</head>
			<body>
				<h2>Demo AJAX Pseudo Check</h2>
				<div >
					<label>Nom d'utilisateur :</label>
					<input name="pseudo" type="text" id="pseudo" value="" maxlength="15" />
					<span id="msgbox" style="display:none"></span>
				</div>
			</body>
</html>

Etape 3 : AJAX

index.html

Concernant le code Ajax, vous êtes libre de l'insérer au bas de votre page juste après la balise de fermeture </body> ou alors de placer tout ce code dans un fichier externe que vous inclurez dans la page html.

  	<!-- AJAX CHECK -->
  	<script type="text/javascript">
		$("#pseudo").blur(function()
  		{
  			$("#msgbox").removeClass().addClass('messagebox').text('Check en cours...').fadeIn("slow");
  			$.post("commun/check-pseudo.php" ,{ pseudo:$(this).val() } ,function(data)
  			{
  				if(data=='no')
  				{
  					$("#msgbox").fadeTo(200,0.1,function()
  					{
  						$(this).html('Ce pseudo est d&eacute;j&agrave; pris').addClass('busy').fadeTo(900,1);
  					});
  				}
  				else
  				{
  					$("#msgbox").fadeTo(200,0.1,function()
  					{
  						$(this).html('Ce pseudo est disponible').addClass('dispo').fadeTo(900,1);
  					});
  				}
  			});
  		});
	</script>

Connexion à la base de données

connect.inc.php

Dans ce fichier, rien de bien compliquer, on indique juste les coordonnées afin que notre script PHP ait toutes les infos pour aller checker dans la BDD. Vous remarquerez que j'ai utilisé les nouvelles méthodes PDO qui assure une plus grande sécurité des requêtes.

<?php	
	// Connexion	
	define("HOST","localhost", true);	
define("USER","root", true);
define("PASS","", true);

// Bases de données define("YOUR_BDD", "TABLE_NAME", true);
// PDO MEMBRES
$connect_users = new PDO('mysql:host='.HOST.';dbname='.DB_USERS, USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$connect_users->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); ?>

Le check en PHP

check-pseudo.php

Voici le check à proprement parler, c'est ce bout de code qui va envoyer la requête à la base de données afin de savoir si le nom d'utilisateur est dispo ou non.

<?php
	require_once 'connect.inc.php';
	global $connect_users;

	$pseudo = $_POST['pseudo'];
	if(strlen($pseudo) == 0) 
   {
   	echo ('empty');
   }
   else 
   {
   	// On récupère la liste des membres et on check si le pseudo existe déjà
   	$req = $connect_users->query("SELECT pseudo FROM pseudo WHERE pseudo='$pseudo'");
 	
   	// On déroule la liste
   	$chk_pseudo = $req->fetch(PDO::FETCH_ASSOC);
 	
   	// Si le pseuo existe déjà on retourne non
   	if($chk_pseudo == '1' || $chk_pseudo > '1')
   	{
   		echo ('no');
   		$ok = false;
   	}
   	else
   	{
   		echo ('yes');
   	}
   } 
?>

Une touche de CSS

style.css

Pour finir donnons un peu de style à notre input ainsi qu'au span qui contiendra la réponse de la requête.

.messagebox{
  	position:absolute;
  	width:auto;
  	margin-left:30px;
  	border:1px solid #c93;
  	background:#ffc;
  	padding:5px 10px;
}
.dispo{ position:absolute; width:auto; margin-left:30px; border:1px solid #349534; background:#C9FFCA; padding:5px 10px; color:#008000; }
.busy{ position:absolute; width:auto; margin-left:30px; border:1px solid #CC0000; background:#F7CBCA; padding:5px 10px; color:#CC0000; }
input { padding: 5px 10px; }

2.6/5 (62 votes)


Paul
22 May 2011

Très intéressant, cependant je rencontre un problème sur connect.inc.php, l'ajax indique toujours que le pseudo est disponible.
Pour define("YOUR_BDD", "TABLE_NAME", true); Je place le nom de la BD, et le nom de la table concerné.
Quelqu'un aurait un conseil pour ce problème?

id-development
11 Jun 2011

Pour moi le probleme est qu'il me marque "Check en cours..." puis rien.

Brice
24 Jan 2012

Ne fonctionne pas, tous les pseudo sont valide.

Sirius
24 Jan 2012

As-tu essayé avec "cyril" ou "john" parce que je viens de tester et ça fonctionne très bien. Quel navigateur utilise tu ?

Ajouter un commentaire


Voir une démo
Télécharger l'archive
Voir une démo
Menu AJAX / jQuery
Fichier : menu-ajax.zip

Voir une démo
Télécharger l'archive
Source
Accéder au site officiel
Débutant
Intermédiaire
Avancé