Verification dynamique de dispo de login

Derbie88 Messages postés 120 Statut Membre -  
djflexlive Messages postés 577 Statut Membre -
Bonjour,
Je souhaiterais vérifier, au fur et à mesure qu'un utilisateur le tape, la disponibilité de son login. (en gros, comme dans certain sites, si votre login est disponible, il y a une petite croix verte à coté) Mon idée : créer une liaison dynamique avec ma base de données mysql pour vois si le nombre de tuple trouvé au fur et à mersur de la saisie est nul ou non. Mais ça, je ne sais pas le faire (la liaison dynamique).

Qui peut m'aider ? Est-ce la bonne méthode ?

Par avance merci !

12 réponses

djflexlive Messages postés 577 Statut Membre 95
 
Il te faut utiliser Ajax pour cela.

Un mélange de Javascript et de Php. Je ne suis pas un pro ajax donc je pourrai t'aiguiller peut-être un peu mais pas plus.

As tu de bonnes connaissances en Php si c'est bien le langage utilisé ? Dis en un peu plus pour cibler tes besoins...
0
Derbie88 Messages postés 120 Statut Membre 2
 
Alors non, je n'ai pas de très bonne connaissances en php, je suis autodidacte depuis peu, ajax, je connais certainement plus le guerrier que le langage (comprenez : je ne connais rien à ajax).

Merci !
0
djflexlive Messages postés 577 Statut Membre 95
 
Ok c'est plus facile de savoir ce que tu sais ou pas pour t'aider.

Déjà arrives tu à faire ta vérification après la soumission du formulaire ? A voir si le pseudo est disponible ou pas après la validation du form ?
0
Derbie88 Messages postés 120 Statut Membre 2
 
Oui, ça c'est bon.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djflexlive Messages postés 577 Statut Membre 95
 
Ok le code source de la page en php, ca donne quoi ? Celle du formulaire et celle de la vérification ?
0
Derbie88 Messages postés 120 Statut Membre 2
 
Voila, je met ça tout de suite :
Pour le formulaire :
<html>
 <head>
  <title>Connexion au site</title>
 </head>
 <body bgcolor="#FFFF99">
  <form method="post" action="insc.php">
   <table border="0" width="400" align="center">
    <tr>
     <td width="200"><b>Votre nom</b></td>
     <td width="200">
      <input type="text" name="user_name">
     </td>
    </tr>
   <tr>
     <td width="200"><b>Votre prenom</b></td>
     <td width="200">
      <input type="text" name="user_firstname">
     </td>
    </tr>
   <tr>
     <td width="200"><b>Votre mail</b></td>
     <td width="200">
      <input type="text" name="user_mail">
     </td>
    </tr>
    <tr>
     <td width="200"><b>Votre login</b></td>
     <td width="200">
      <input type="text" name="user_log">
     </td>
    </tr>
    <tr>
     <td width="200"><b>Votre mot de passe<b></td>
     <td width="200">
      <input type="password" name="user_pass">
     </td>
    </tr>
    <tr>
     <td colspan="2">
      <input type="submit" name="submit" value="s'inscrire">
     </td>
    </tr>
   </table>
  </form>
 </body>
</html>


et pour le traitement :

<?php
include ('config.inc.php');
	function redir($url){
	echo "<script language=\"javascript\">";
	echo "window.location='$url';";
	echo "</script>";
}

// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['user_name'])) && (!empty($_POST['user_firstname'])) && (!empty($_POST['user_mail'])) && (!empty($_POST['user_log'])) && (!empty($_POST['user_pass'])) ) {

  extract($_POST);  // je vous renvoie à la doc de cette fonction

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT * FROM touscelebres.users WHERE login = '".addslashes($user_log)."'";
  $req = mysql_query($sql)or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     echo"le nom de login $user_log existe déjà";
	 }
  else {
	$add = "INSERT INTO touscelebres.users VALUES( '$user_name', '$user_firstname', '$user_mail', '$user_log', '$user_pass')";
	$req2 = mysql_query($add) or die('Erreur SQL : <br />'.$sql);
	
     $headers ='From: "Webmaster touscelebres"<adresse@fai.fr>'."\n";
	 mail('$user_mail',  'Inscription sur le site touscelebres',  'Vous êtes maitenant inscrit sur lesite touscelebres.'); 
	 echo $user_mail;
		?>
		<html>
		<body bgcolor="#FFFF99">
			<?php sleep(1);?>
		<br>
		<br>
		<p><div align="center"><font color="FF0000" size="6">Compte créé avec succès !</font></p>
		<br>
		<br><i>Redirection automatique, veuillez patienter...</i></div>
		   <?php sleep(4); ?>
		</body>
		</html>
		<?php

		redir("http://touscelebres.olympe-network.com/index.html");
		
		}
	}
else {
	?>
		<html>
		<body bgcolor="#FFFF99">
		<br>
		<br>
		<p><div align="center"><font color="FF0000" size="5">Impossible de créer le compte : certains champs n'ont pas été remplis !!!</font></div></p>
		</body>
		</html>
	<?php
	sleep(3);
	mysql_close($link);
	}

?>


voila !
0
djflexlive Messages postés 577 Statut Membre 95
 
Ok bon j'ai pas trop regardé ton code de traitement car je suis occupé, je ne suis pas un pro ajax du tout ; mais je te poste un code source qui faut paufiner, en espérant que ca t'aiguillera un peu :

Fichier nommé ajax.js :
function getXhr()
{
	if(window.XMLHttpRequest)
		xhr = new XMLHttpRequest(); 
	
	else if(window.ActiveXObject)
	{
		try
		{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e)
		{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	else
	{
		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		xhr = false; 
	} 
	
	return xhr;
}

function writediv(texte)
{
	document.getElementById('checkmail').innerHTML = texte;
}

function verif()
{
	if ( document.contact.email.value.length > 5 )
	{
		var xhr = getXhr();
		xhr.onreadystatechange = function()
		{
			if (xhr.readyState == 4 && xhr.status == 200)
			{
				reponse = xhr.responseText;
				document.getElementById('checkmail').innerHTML = reponse;
			}
		}
		
		writediv( xhr.open('get','index.php?mail=' + document.contact.email.value,true) );
		xhr.send(null);
	} else {
		writediv( '' );
	}
}


A appeller dans le <head> de ta page ou se trouve le formulaire :
<script type="text/javascript" src="ajax.js"></script>


Ici tu as ma requete qui cherche à vérifier la validité d'un mail via ce ajax (la requete se trouvant dans ma page index.php) :

if ( isset($_GET['mail']) )
verifmail(checkfield($_GET['mail']));

function verifmail($adresse)
{
   $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#';
   if(preg_match($Syntaxe,$adresse))
     echo '<b style="color: #00ff00;">Email valide</b>';
   else
     echo '<b style="color: #ff0000;">Email non valide</b>';
}

if ( isset($_GET['mail']) )
exit();



Et ici la partie qui vas aller vérifier l'email dans mon formulaire :
<p><strong>Votre email :</strong><br/><input type="text" name="email" size="20" onkeyup="verif()" value="'.test_c($email).'" /></p>
<div id="checkmail"></div>


Je sais que tout ca , c'est un peu fouilli mais j'ai pas trop le temps ce soir de t'aider.

Ca devrait t'aiguiller un minimum, du moins dans la partie du fichier ajax.js

Le principe de ce que j'ai posté :
- Quand on rentre quelque chose dans le champs "email" du formulaire, il appelle la fonction verif() du fichier ajax.js
- Le fichier ajax.js appelle lui la page index.php qui est structurée afin de renvoyer un echo.
- Le echo est récupéré par le ajax et le ajax se traite d'afficher le echo via la fonction writediv(texte)
- La fonction writediv(texte) affichera le message dans le <div> associé dans le formulaire

Voilà si tu as besoin d'autres infos, je te répondrais demain ! Bonne nuit.
0
Derbie88 Messages postés 120 Statut Membre 2
 
Cette fonction me sera utile, mais je ne crois pas que cal réponde à ma question.
J'ai surement mal dut m'expliquer.
Ma question à la base : je veux, en temps réél, un truc qui analyse ce que tape l'utilisateur dans le champs "login" pour lui dire si ou non le login existe déjà.
Exemple :dans ma base, il y a déjà Pierre, Paul et Henry (pour changer), et un utilisateur autre que ces trois là veux créer un compte. Manque de bol il s'appelle Pierre (je dis manque de bol, bien que je n'ai rien contre les Pierre). Il tape Pierr, tout va bien, petite crois verte à coté de la zone de texte, mais quand il met le "e" final, craque, crois rouge, Pierre, t'as plus qu'à te choisir un autre pseudo. Comment faire ça ?

Mais pour la réponse proposée, c'est super, c'était ma question d'après !

Merci d'avoir pris du temps pour me répondre, et bonne soirée !
0
zoby44 Messages postés 868 Statut Membre 199
 
Salut, le code de djflexlive devrais te mettre sur la bonne voie, le principe est la.
Sinon il y a déjà un script tout fait ici : http://www.editeurjavascript.com/scripts/scripts_formulaires_3_543.php
A toi de l'adapter à tes besoins.
Un autre truc, dans ton code, utilise du CSS et un doctype !!!
0
djflexlive Messages postés 577 Statut Membre 95
 
Derbie88, le principe que je t'ai cité réponds donc à tes souhaits ; c'est une vérification en temps réel si tu suis les explications en bas de mon post précédent.

Le lien donné par zoby44 est assez similaire est c'est en effet un bon exemple de vérification à adapter à tes besoins.

En revanche, je crois que niveau sécurité faut l'arranger un peu ...
"SELECT pseudo FROM membres WHERE pseudo='".$_GET["pseudo"]."'"


Vaut mieux retraiter le $_GET avant de l'appeller dans la requete directement :S

Et sinon, comme une personne réponds en bas de la page donné par zoby44 :
Attention, il faut vérifier en aval de ce script juste avant d'entrer la fiche dans la base de donnée si le pseudo est toujours libre.
Rien n'empêche quelqu'un de taper "toto", et que le pseudo soit libre. Seulement, quelqu'un d'autre tape "toto" en même temps, le pseudo est toujours libre puisque pas dans la base de donnée. Sans test complémentaires, on peut se retrouver avec 2 toto sans la base.
0
Derbie88 Messages postés 120 Statut Membre 2
 
et bien merci à vous deux, je fait mes petits bidouillages et je re-post ici si j'ai (quand j'aurai ?) des problèmes. Merci !
0
djflexlive Messages postés 577 Statut Membre 95
 
Passes le topic en résolu et si t'as des soucis, reposte sur ce topic ;)

Bonne continuation !
0