Afficher / Cacher un message

Eléphant du PHP | 214 Messages

27 févr. 2011, 05:46

Bonjour,

Je voudrais afficher le message quand on clique sur une input et quand je selectionne une autre, le message de l'input doit etre cache et celle recemment selectionne doit apparaitre:
<html dir="rtl">
<head>
<style type="text/css">
#name, #username, #email {
	border-color: #FF0000;
	border-style: solid;
	border-width: 1px;
	border-collapse: collapse;
	
}

#label01 {
	width: 100px;
	display:block;
	float: right;
}

.frm_fields {
	padding: 5px;
}

input:focus {
      background: #fc9fff;   
}

.info {
	background:url(info.png) no-repeat right;
	width: 20px;
	height: 20px;
	display: none;
}


</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function(){

$("#frm_login :text").focus(function(){
	$(this).parent().find(".info").css("display", "inline");
 }).blur(function(){
 		$(this).parent().find(".info").css("display", "none");
 });
	
 });
</script>


</head>
<body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


</head>

<form name="frm_login" id="frm_login" action="#" method="POST">
<div class="frm_fields">
<label for="name" id="label01">nom</label>
<input type="text" name="name" id="name" size="20" maxlength="50"  />
<span class="info">Afficher ici</span><span class="eMsg"></span>
<span class="sMsg"></span></div><div class="frm_fields">
<label for="username" id="label01">pseudo</label>
<input type="text" name="username" id="username" size="20" maxlength="50"  />
<span class="info"></span><span class="eMsg"></span>
<span class="sMsg"></span></div><div class="frm_fields">
<label for="email" id="label01">email</label>
<input type="text" name="email" id="email" size="20" maxlength="50"  />
<span class="info"></span><span class="eMsg"></span>
<span class="sMsg"></span>
</div>
</span><input type="submit" name="send" id="send" value="Envoyer" disabled="disabled"></form>
<br />

</body>
</html>
Merci

ViPHP
AB
ViPHP | 5818 Messages

27 févr. 2011, 16:35

J'essaierais d'avoir un formulaire html plus facilement manipulable, par exemple :

Code : Tout sélectionner

<input type="text" name="name" id="name" size="20" maxlength="50" /> <span class="name">Afficher ici</span> <input type="text" name="username" id="username" size="20" maxlength="50" /> <span class="username">Afficher la</span>
A condition que tous les span du formulaire soient des messages à afficher, et si tu mets pour chaque span une class dont le nom reprend l'id de l'input associé, alors il est facile de dire :

onfocus sur l'input

1/ j'efface tous les span
2/ j'affiche le span dont la class correspond à id de l'input.

Bon c'est un exemple, il y a beaucoup d'autre façons de faire mais celle-ci me paraît parmi les plus simples.

Eléphant du PHP | 214 Messages

01 mars 2011, 04:11

J'ai mis ce code, je trouve un bug, a vous de me reconseiller:
<html dir="rtl">
<head>
<style type="text/css">
em {
	display: none;
}

#name, #username, #email {
	border-color: #FF0000;
	border-style: solid;
	border-width: 1px;
	border-collapse: collapse;
	
}

#label01 {
	width: 100px;
	display:block;
	float: right;
}

.frm_fields {
	padding: 5px;
}

input:focus {
      background: #fc9fff;   
}

.CurFocus {
background: #fdecb2;
width: 800px;
}

.info {
}


.info2 {
	background:url(info.png) no-repeat right;
}


</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function(){


$("#frm_login :text").focus(function(){ // quand on met la souris au input de la form frm_login

	$(this).parent().addClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.eMsg').html(''); // on cherche info afin d'ajouter le code HTML
	$(this).parent().find('.info').html('&nbsp;&nbsp;<img src="info.png" width="20" height="20" align="absmiddle"> Message ici'); // on cherche info afin d'ajouter le code HTML
	
	
					}).blur(function(){ // quand on met la souris au input de la form frm_login
	$(this).parent().removeClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.info').html(''); // on cherche info afin de l'ecraser et la vider
	
	
 });



$("#name").blur(function(){
	
	if ($("#name").val().length < '5')
	{

		$(this).parent().find('.eMsg').html('<img src="error.png" width="20" height="20" align="absmiddle"> Le nom comporte moins de 6 caracteres!');
		$(this).parent().find('#name').css( 
			"border-color", "#FF0000",
		  	"border-width", "1px"
			  );
		  
	}
	else
	{
		$(this).parent().find('.eMsg').html('<img src="success.png" width="20" height="20" align="absmiddle">');
		$(this).parent().find('#name').css( 
			"border-color", "#badfac",
		  	"border-width", "1px"
			  );
					
		$("#send").removeAttr('disabled');	
			
	}

	
//remove all the class add the messagebox classes and start fading
 
 //check the username exists or not from ajax
 
 return false;	
 });
 
 });
  


</script>


</head>
<body>
<?php
include 'site_vars.php';

    echo '<form name="frm_login" id="frm_login" action="#" method="POST">';
    echo '<div class="frm_fields">';
    echo '<label for="name" id="label01">'.$name_var.'</label>';
    echo $name_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="username" id="label01">'.$username_var.'</label>';
    echo $username_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="email" id="label01">'.$email_var.'</label>';
    echo $email_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '</span>';
    
    echo $submit_var;
    
    echo '</form>';
?>
</body>
</html>
Le bug est: quand je precise un nom valide (plus de 5 caracteres), le bouton submit se rend actif, et je pars vers les autres champs (j'ai pas encore fait leurs verifications, ce n'est que pour tester sur un seul champs), je reviens vers le champs nom, je supprime les caracteres (les rendre moins de 5), le boutton submit reste toujours actif :(

Eléphant du PHP | 214 Messages

02 mars 2011, 02:26

Sinon je peux changer de methode de verification des champs, par exemple:
function check_name() {
if() {
return true;
return false;
 }

}

function check_username() {
if() {
return true;
return false;
 }

}

function check_mail() {
if() {
return true;
return false;
 }

}

// et la, je mets la condition

si toutes les fonctions sont a TRUE, j'active le boutton
le code en partiel est la:
var name = $("#name");
	var username = $("#username");
	
	function check_name () {
		
		if (name.val().length < 5)
		{
			return false;
		}
		else
		{
			return true;
		}
	}

if (check_name() == true) {
	alert ('lol');
}
else {
	alert ('hmm');
	}

il retourne ce message d'erreur:
check_name is not defined
Comment verifier que toutes mes fonctions sont a TRUE?

Eléphant du PHP | 214 Messages

02 mars 2011, 08:21

Voila le code apres correction des erreurs:
<html dir="rtl">
<head>
<style type="text/css">
em {
	display: none;
}

#name, #username, #email {
	border-color: #FF0000;
	border-style: solid;
	border-width: 1px;
	border-collapse: collapse;
	
}

#label01 {
	width: 100px;
	display:block;
	float: right;
}

.frm_fields {
	padding: 5px;
}

input:focus {
      background: #fc9fff;   
}

.CurFocus {
background: #fdecb2;
width: 800px;
}

.info {
}


.info2 {
	background:url(info.png) no-repeat right;
}


</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function(){

//$("input #frm_login").focus(function(){ // quand on met la souris au input de la form frm_login
$("#frm_login :text").focus(function(){ // quand on met la souris au input de la form frm_login

	$(this).parent().addClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.info').html('&nbsp;&nbsp;<img src="info.png" width="20" height="20" align="absmiddle"> Message ici'); // on cherche info afin d'ajouter le code HTML
	$(this).parent().find('.eMsg').html(''); // on ecrase le message d'erreur
	$(this).parent().find('.sMsg').html(''); // on ecrase le message de success
	
	
	
					}).blur(function(){ // quand on met la souris au input de la form frm_login
	$(this).parent().removeClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.info').html(''); // on cherche info afin de l'ecraser et la vider
	
	
 });



$("#frm_login :text").blur(function(){

	
	var name = $("#name");
	var username = $("#username");
	
	var name1 = name.val().length;
	console.log(name1);
	
	function check_name () {
		
		if (name.val().length < 5)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	
	function check_username () {
		
		if (username.val().length < 5)
		{
			return false;
		}
		else
		{
			return true;
		}
	}

 
 
 
 if (check_name() == true) {
	alert('lol');
}
else {
	alert('hmm');
	}
	
	return false;	
 });
 
 
 });
 
 
	

  


</script>


</head>
<body>
<?php
include 'site_vars.php';

    echo '<form name="frm_login" id="frm_login" action="#" method="POST">';
    echo '<div class="frm_fields">';
    echo '<label for="name" id="label01">'.$name_var.'</label>';
    echo $name_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="username" id="label01">'.$username_var.'</label>';
    echo $username_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="email" id="label01">'.$email_var.'</label>';
    echo $email_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '</span>';
    
    echo $submit_var;
    
    echo '</form>';
?>

</body>
</html>
Est ce que je suis sur la bonne voix?

ViPHP
AB
ViPHP | 5818 Messages

03 mars 2011, 03:48

Je peux pas vraiment te dire si tu es sur la bonne voix car je ne connais pas encore assez jquery. Pour voir je me suis amusé à faire un code suivant de ce que j'ai compris de ton problème (sans jquery).

Code à tester dans une page séparée, peut-être que cela te donnera des idées.
<?php
if (isset($_POST['ok']))
{
echo '<pre>';
print_r($_POST);
echo '</pre>';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="css.php" rel="stylesheet" type="text/css" />
<title>Document sans nom</title>
<script type="text/javascript">
<!--
function Trim (myString)
{//supprime les espaces vides en début et en fin de chaine
	return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
}


function Affiche_span(input,form,nom)
{
	var form = document.getElementById(form);
	
	var tab_p = new Array();
	
	// Sélectionne tous les p du formulaire 
	tab_p = form.getElementsByTagName('p');
	
	var tab_p_length = tab_p.length;

	for (var j=0; j < tab_p_length; j++)  
		{
			if (tab_p[j].className == input) // si la class de p = id de l'input (passé en paramèttre à la fonction)
				{
					// Sélectionne tous les span du p
					var tab_span = tab_p[j].getElementsByTagName('span');
					
					var tab_span_length = tab_span.length;
					
					for (var k=0; k < tab_span_length; k++) 
						{
							 if (tab_span[k].className == nom) // si class = nom on affiche 
								 {
									 tab_span[k].style.display = 'inline';
								 }	
						}
				}
		}
}



function Message(input,form)
{

	// on affiche le span de class = "info" du bloc p ayant une classe égale à l'id de l'input
	if(Trim(document.getElementById(input).value) == '')// seulement si input vide
		{
			Affiche_span(input,form,'info');
		}
		

}



function Controle_mail(value)
{
	var message = null;
	
	var regex_mail = /^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$/;
	if (!(regex_mail.test(value))) message = 'Email invalide';
	
	return message;
}


function Controle_nom(value)
{
	var message = null;
	
	if (value != 'toto') message = 'Vous devez vous appeller toto !';
	
	return message;
}


function Controle_tel(value)
{
	var message = null;
	
	var regex_tel = /^0[1-9]([_.\-\s]*[0-9]{2}){4}$/;
	if (!(regex_tel.test(value))) message = 'Téléphone invalide';
	
	return message;
}



function Controle(input,form)
{
	var form = document.getElementById(form);
	
	var value = Trim (document.getElementById(input).value);
	
	var result = null;
	
		switch (input)
		{
			case "mail" : result = Controle_mail(value);break;
			case "nom" : result = Controle_nom(value);break;
			case "tel" : result = Controle_tel(value);break;
		}
			
		
	var tab_p = new Array();	
	// Sélectionne tous les p du formulaire 
	tab_p = form.getElementsByTagName('p');
	
	var tab_p_length = tab_p.length;
	
	for (var i=0; i < tab_p_length; i++)  
		{
			if (tab_p[i].className == input) // si la class de p = id de l'input (passé en paramèttre à la fonction)
				{
					// Sélectionne tous les span du p
					var tab_span = tab_p[i].getElementsByTagName('span');
					
					var tab_span_length = tab_span.length;
					
					for (var j=0; j < tab_span_length; j++) 
						{
							 if (tab_span[j].className == 'info') // si class = info on cache info
							 {
								 tab_span[j].style.display = 'none';
							 }
							 
							 if (tab_span[j].className == 'msg' ) // si class = msg 
							 {
								if (result !== null && value != '') // on affiche result
								{
									 tab_span[j].innerHTML = result;
									 tab_span[j].style.display = 'inline';
									 
									 return false;	//return false sert pour retour Controle_form;
								 }
								 else tab_span[j].style.display = 'none'; 
							 }
							
						}
				}
		}


}



function Controle_form()
{
	var tab_arguments = Controle_form.arguments;
	
	var tab_arguments_length = tab_arguments.length;
	
	var result = true;
	
	for (var i=1; i < tab_arguments_length; i++)
		{
			if(Trim(document.getElementById(tab_arguments[i]).value) == '')
				{
					Affiche_span(tab_arguments[i],tab_arguments[0],'info');
					result = false;
				}
				else	
				{
					if(Controle(tab_arguments[i],tab_arguments[0]) === false) result = false; 
				}
		}
		
	return result;
}
-->
</script>

<style type="text/css">
.info, .msg
{
display : none;
}
</style>

</head>

<body>
<div>
			  <form action="#" method="post" id="mon_form" onsubmit= "return Controle_form(this.id,'mail','nom','tel')" >
		  
		  		<p class = "mail" >
		  		<input type="text" name="mail" id="mail" class="input"  value="" onfocus="Message(this.id,'mon_form')" onblur="Controle(this.id,'mon_form')" />
				<span class="info" >Rentrez votre email</span>
				<span class="msg" ></span>
				<p>
				
				<p class = "nom">				
				<input type="text" name="nom" id="nom" class="input"  value="" onfocus="Message(this.id,'mon_form')" onblur="Controle(this.id,'mon_form')" />
				<span class="info" >Rentrez votre nom</span>
				<span class="msg" ></span>
				<p>
				
				<p class = "tel">				
				<input type="text" name="tel" id="tel" class="input"  value="" onfocus="Message(this.id,'mon_form')" onblur="Controle(this.id,'mon_form')" />
				<span class="info" >Rentrez votre téléphone</span>
				<span class="msg" ></span>
				<p>

				
				<input type="submit" name = "ok" value="ok" />
			 </form>  
</div>

</body>

</html>

Eléphant du PHP | 214 Messages

03 mars 2011, 06:18

AB: Je n'ai rien pige :(

J'ai mis ce code, le seul soucis que j'ai est: si une personne remplis toutes les informations correctement, le boutton submit s'active, alors s'il retourne et change par exemple son pseudo a moins de 5 caracteres, le boutton submit reste toujours actif:
<html dir="rtl">
<head>
<style type="text/css">
em {
	display: none;
}

#name, #username, #email {
	border-color: #FF0000;
	border-style: solid;
	border-width: 1px;
	border-collapse: collapse;
	
}

#label01 {
	width: 100px;
	display:block;
	float: right;
}

.frm_fields {
	padding: 5px;
}

input:focus {
      background: #fc9fff;   
}

.CurFocus {
background: #fdecb2;
width: 800px;
}

.info {
}


.info2 {
	background:url(info.png) no-repeat right;
}


</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function(){

//$("input #frm_login").focus(function(){ // quand on met la souris au input de la form frm_login
$("#frm_login :text").focus(function(){ // quand on met la souris au input de la form frm_login

	$(this).parent().addClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.info').html('&nbsp;&nbsp;<img src="info.png" width="20" height="20" align="absmiddle"> Message ici'); // on cherche info afin d'ajouter le code HTML
	$(this).parent().find('.eMsg').html(''); // on ecrase le message d'erreur
	$(this).parent().find('.sMsg').html(''); // on ecrase le message de success
	
	
	
					}).blur(function(){ // quand on met la souris au input de la form frm_login
	$(this).parent().removeClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.info').html(''); // on cherche info afin de l'ecraser et la vider
	
	
 });
	
	
	// on determine des variables pour les inputs
	var frm_login = $("#frm_login :text");
	var name = $("#name");
	var username = $("#username");
	var email = $("#email");
	
	
	// on procede a la verification des champs
	// Nom
	function check_name () {
		
		if (name.val().length < 5)
		{
			$(this).parent().find('.eMsg').html('<img src="error.png" width="20" height="20" align="absmiddle"> Le nom comporte moins de 5 caracteres!');
		$(this).parent().find('#name').css( 
			"border-color", "#FF0000",
		  	"border-width", "1px"
			  );
			  
			return false;
		}
		else
		{	
			$(this).parent().find('.sMsg').html('<img src="success.png" width="20" height="20" align="absmiddle">');
		$(this).parent().find('#name').css( 
			"border-color", "#badfac",
		  	"border-width", "1px"
			  );
			return true;
		}
	}
	
	
	
		// Username
	function check_username () {
		
		if (username.val().length < 5)
		{
			$(this).parent().find('.eMsg').html('<img src="error.png" width="20" height="20" align="absmiddle"> Le pseudo comporte moins de 5 caracteres!');
		$(this).parent().find('#username').css( 
			"border-color", "#FF0000",
		  	"border-width", "1px"
			  );
			  
			return false;
		}
		else
		{	
			$(this).parent().find('.sMsg').html('<img src="success.png" width="20" height="20" align="absmiddle">');
		$(this).parent().find('#username').css( 
			"border-color", "#badfac",
		  	"border-width", "1px"
			  );
			return true;
		}
	}
	
	// on blur function sur chaque champs
	// on a deja remplace le $("#") par leurs variables
	
	//name.blur(function(valid_name){
	name.blur(check_name); // verification on blur de la fonction check_name sur le champs name
	username.blur(check_username);
		
		 
  frm_login.blur(function() {
 	
 	if ((check_name()) & (check_username()))
 	{
 		$("#send").removeAttr('disabled');
 	}
 	
 });
 
 
 }); // end DOM function
 
 
 
 
 
	

  


</script>


</head>
<body>
<?php
include 'site_vars.php';

    echo '<form name="frm_login" id="frm_login" action="#" method="POST">';
    echo '<div class="frm_fields">';
    echo '<label for="name" id="label01">'.$name_var.'</label>';
    echo $name_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="username" id="label01">'.$username_var.'</label>';
    echo $username_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="email" id="label01">'.$email_var.'</label>';
    echo $email_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '</span>';
    
    echo $submit_var;
    
    echo '</form>';
?>

</body>
</html>

ViPHP
AB
ViPHP | 5818 Messages

03 mars 2011, 17:28

Sur le principe c'est pas un problème que le bouton submit reste activé après modification, l'important est que lors de la soumission, le formulaire ne soit pas envoyé si tous les champs ne sont pas correctement remplis, non ?

Eléphant du PHP | 214 Messages

03 mars 2011, 18:30

Sur le principe c'est pas un problème que le bouton submit reste activé après modification, l'important est que lors de la soumission, le formulaire ne soit pas envoyé si tous les champs ne sont pas correctement remplis, non ?
Oui vous avez raison, alors je l'ai change, le seul soucis, avec des yeux fermes, j'ai lu d'autres documentations, en cas de clique sur le bouton d'envoi, il n'affiche pas les messages d'erreurs si le formulaire n'est pas rempli:
<html dir="rtl">
<head>
<style type="text/css">
#name, #username, #email {
	border-color: #FF0000;
	border-style: solid;
	border-width: 1px;
	border-collapse: collapse;
	-moz-border-radius: 5px;
}

#label01 {
	width: 100px;
	display:block;
	float: right;
}

.frm_fields {
	padding: 5px;
}

input:focus {
      background: #fc9fff;   
}

.CurFocus {
background: #fdecb2;
width: 800px;
}
</style>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script src="jquery.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function(){

$("#frm_login :text").focus(function(){ // quand on met la souris au input de la form frm_login

	$(this).parent().addClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.info').html('&nbsp;&nbsp;<img src="info.png" width="20" height="20" align="absmiddle"> Message ici'); // on cherche info afin d'ajouter le code HTML
	$(this).parent().find('.eMsg').html(''); // on ecrase le message d'erreur
	$(this).parent().find('.sMsg').html(''); // on ecrase le message de success
	$(this).parent().find('.sAvailable').html(''); // on ecrase le message de success de l'availability
	
	
	
					}).blur(function(){ // quand on met la souris au input de la form frm_login
	$(this).parent().removeClass('CurFocus'); // on ajoute le CurFocus a frm_fields afin de combiner les 2 class
	$(this).parent().find('.info').html(''); // on cherche info afin de l'ecraser et la vider
	
	
 });
	
	
	// on determine des variables pour les inputs
	var frm_login = $("#frm_login");
	var name = $("#name");
	var username = $("#username");
	var email = $("#email");
	
	
	// on procede a la verification des champs
	// Nom
	function check_name () {
		
		if (name.val().length < 5)
		{
			$(this).parent().find('.eMsg').html('<img src="error.png" width="20" height="20" align="absmiddle"> Le nom comporte moins de 5 caracteres!');
		$(this).parent().find('#name').css( 
			"border-color", "#FF0000",
		  	"border-width", "1px"
			  );
			  
			return false;
		}
		else
		{	
			$(this).parent().find('.sMsg').html('<img src="success.png" width="20" height="20" align="absmiddle">');
		$(this).parent().find('#name').css( 
			"border-color", "#badfac",
		  	"border-width", "1px"
			  );
			return true;
		}
	}
	
	
	
		// Username
	function check_username () {
		
		if (username.val().length < 5)
		{
			$(this).parent().find('.eMsg').html('<img src="error.png" width="20" height="20" align="absmiddle"> Le pseudo comporte moins de 5 caracteres!');
		$(this).parent().find('#username').css( 
			"border-color", "#FF0000",
		  	"border-width", "1px"
			  );
			  
			return false;
		}
		else
		{
		$(".sAvailable").html('<img src="loading.gif" width="20" height="20" align="absmiddle"> Checking availability');	
			
			// on doit verifier la valdite du pseudo
			//Récupération des valeurs du formulaires
		var name_val 		= $("#name").val();
		var username_val 	= $("#username").val();
		var dataString 	= 'name=' + name_val + '&username=' + username_val;  
		
	$.ajax({
	
	type: 'POST',
	url: 'check_availability.php',
	data : dataString, 
	
	success: function(response)
		{  
				if (response != 'ok')
		{
			$(this).parent().find('.eMsg').html('<img src="error.png" width="20" height="20" align="absmiddle"> Le pseudo que vous avez choisis est deja en utilisation!');
			$(".sAvailable").html('');
			
		$(this).parent().find('#username').css( 
			"border-color", "#FF0000",
		  	"border-width", "1px"
			  );
			  
			return false;
			}
			else
			{
				
				$(".sAvailable").html('');			
				$(".sAvailable").html('<img src="success.png" width="20" height="20" align="absmiddle"> Le pseudo <b>' + username_val + '</b> est disponible');
								
		$(this).parent().find('#username').css( 
			"border-color", "#badfac",
		  	"border-width", "1px"
			  );
			return true;
			 
			}
			}
			});

			return true;
		
		
		} // end else
		} // end username_check function

	name.blur(check_name); 
	username.blur(check_username);
	
	// en gros, la soumission de la form
	frm_login.submit(function(){
		if(check_name() & check_username())
			return true;
		else
			return false;
	});

 
 return false;
 }); // end DOM function

</script>


</head>
<body>
<?php
include 'site_vars.php';

    echo '<form name="frm_login" id="frm_login" action="#" method="POST">';
    echo '<div class="frm_fields">';
    echo '<label for="name" id="label01">'.$name_var.'</label>';
    echo $name_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="username" id="label01">'.$username_var.'</label>';
    echo $username_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '<span class="sAvailable"></span>'; // en cas de validite
    echo '<span class="Checking"></span>'; // en cas de verification
    
    echo '</div>';
    
    echo '<div class="frm_fields">';
    echo '<label for="email" id="label01">'.$email_var.'</label>';
    echo $email_input;
    echo '<span class="info"></span>'; // pour afficher les infos
    echo '<span class="eMsg"></span>'; // en cas d'erreur
    echo '<span class="sMsg"></span>'; // en cas de success
    echo '</div>';
    
    echo '</span>';
    
    echo $submit_var;
    
    echo '</form>';
?>

</body>
</html>

ViPHP
AB
ViPHP | 5818 Messages

04 mars 2011, 01:32

Bon j'ai travaillé un peu le jquery.

Voilà le résultat (toujours à tester dans une page séparée).

A noter qu'une requête est faite au fichier "verif_nom.php" pour vérifier si le nom est déjà utilisé ou non.
Voici le contenu de "verif_nom.php" qu'il est nécessaire de placer sur ton serveur pour faire le test.
J'ai simulé une requête qui dure 3 secondes (pour tester des conditions défavorables) et tu constate que seul le nom "azerty" est déjà pris en partant du principe que la requête retourne 0 si le nom testé est disponible :
<?php
header('Content-type: text/html; charset=UTF-8');

sleep(3);
$name = isset($_POST['name']) && $_POST['name'] == 'azerty' ? 1 : 0;

echo $name;
?>
Et maintenant la page du formulaire avec des tests javascript en utilisant jquery et une requête ajax sur le fichier ci-dessus pour vérifier que le nom est disponible "onblur" sur le champ name et "onsubmit" sur le formulaire :
<?php
if (isset($_POST['ok']))
{
echo '<pre>';
print_r($_POST);
echo '</pre>';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
<!-- 
$(function()
{
var name = $("#name");
var span_name = $(".name");

var mail = $("#mail");
var span_mail = $(".mail");

var tel = $("#tel");
var span_tel = $(".tel");


	function Formate_false (input, span, retour)
		{
			input.css({background: "#EFB8CB" });
			span.empty().append(retour);
		}
	
	
	function Formate_true (input, span, retour)
		{
			input.css({background: "#71ED63" });
			span.empty().append(retour);
		}
	
	
	function Check_name (ajax_synchro) 
		{
			var retour = "Le nom doit comporter au minimum cinq caractères";
			   
			if ($.trim(name.val()).length < 5)
				{
					Formate_false (name, span_name, retour);	
					return false;
				}
			else
				{
					var test_nom = false;
					$.ajax({
							type: "POST",
							url: 'verif_nom.php',
							data: "name="+name.val()+"",
							async: ajax_synchro, // si Check_name est appelée onsubmit "async = false" pour bloquer le navigateur en attente de la réponse.

							success: function(result)
								{
									if (result == 0)	// Si la requête retourne 0 (le nom est disponible)
										{
											Formate_true (name, span_name, 'nom');	
											test_nom = true;
										}
										else
										{
											retour = "Le nom est déjà utilisé";
											Formate_false (name, span_name, retour);	
											test_nom = false;
										}
								}
							});
							
					return test_nom;
				}
		}


	function Controle_mail(value)
		{
			var retour = "Email invalide";
			var regex_mail = /^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$/;
			
			if (!(regex_mail.test(mail.val()))) 
				{
					Formate_false (mail, span_mail, retour);	
					return false;
				}  
			else
				{
					Formate_true (mail, span_mail, 'mail');	
					return true;
				}
		}


	function Controle_tel(value)
		{
			var retour = "Téléphone invalide";
			var regex_tel = /^0[1-9]([_.\-\s]*[0-9]{2}){4}$/;
			
			if (!(regex_tel.test(tel.val())))
				{
					Formate_false (tel, span_tel, retour);
					return false;
				}
			else
				{
					Formate_true (tel, span_tel, 'tel');
					return true;
				}
		}

	
	name.blur(function() 
		{	
			if ($.trim(name.val()) != '') Check_name (true);
		});
	
	mail.blur(function() 
		{	
			if ($.trim(mail.val()) != '') Controle_mail ();
		});
	
	tel.blur(function() 
		{	
			if ($.trim(tel.val()) != '') Controle_tel ();
		});
	
	
	$("#mon_form").submit(function() 
		{
			if (Check_name (false) & Controle_mail () & Controle_tel ())
			return true;
			else
			return false;
		});
		
});
-->
</script>
<style type="text/css">
.info {
background: #EFEFEF;
}
</style>
</head>

<body>
<div>  
                       <form action="#" method="post" id="mon_form" >
                 
                                
                                <input type="text" name="mail" id="mail" class="input"  value=""  />
                                <span class="mail info" >mail</span>
								<br />
                              
                                                         
                                <input type="text" name="name" id="name" class="input"  value=""  />
                                <span class="name info">nom</span>
  
                                <br />
                               
                                                      
                                <input type="text" name="tel" id="tel" class="input"  value=""  />
                                <span class="tel info" >tel</span>
                                <br />

                               
                                <input type="submit" name = "ok" value="ok" />
                         </form>  
<div>

</body>
</html>
A noter que la vérification "onblur" sur le nom utilise une requête ajax asynchrone pour ne pas bloquer le navigateur dans l'attente de la réponse, alors que la vérification "onsubmit" utilise une requête ajax synchrone pour attendre la réponse avant l'envoi du formulaire. C'est pour mieux visualiser cette différence que j'ai fait un sleep de 3 secondes dans mon fichier verif_nom.php.

Pour la vérification des mail et téléphone j'ai pris des regex sur le web sans vérifier plus que ça... (mais ils l'on l'air de bien fonctionner). Quitte à utiliser jquery je suppose qu'il doit y avoir des fonctions intégrées correspondantes qu'il serait peut-être mieux d'utiliser.

Alors ça te fait avancer ?

Eléphant du PHP | 214 Messages

04 mars 2011, 04:27

Bon j'ai travaillé un peu le jquery.

Voilà le résultat (toujours à tester dans une page séparée).

A noter qu'une requête est faite au fichier "verif_nom.php" pour vérifier si le nom est déjà utilisé ou non.
Voici le contenu de "verif_nom.php" qu'il est nécessaire de placer sur ton serveur pour faire le test.
J'ai simulé une requête qui dure 3 secondes (pour tester des conditions défavorables) et tu constate que seul le nom "azerty" est déjà pris en partant du principe que la requête retourne 0 si le nom testé est disponible :
<?php
header('Content-type: text/html; charset=UTF-8');

sleep(3);
$name = isset($_POST['name']) && $_POST['name'] == 'azerty' ? 1 : 0;

echo $name;
?>
Et maintenant la page du formulaire avec des tests javascript en utilisant jquery et une requête ajax sur le fichier ci-dessus pour vérifier que le nom est disponible "onblur" sur le champ name et "onsubmit" sur le formulaire :
<?php
if (isset($_POST['ok']))
{
echo '<pre>';
print_r($_POST);
echo '</pre>';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
<!-- 
$(function()
{
var name = $("#name");
var span_name = $(".name");

var mail = $("#mail");
var span_mail = $(".mail");

var tel = $("#tel");
var span_tel = $(".tel");


	function Formate_false (input, span, retour)
		{
			input.css({background: "#EFB8CB" });
			span.empty().append(retour);
		}
	
	
	function Formate_true (input, span, retour)
		{
			input.css({background: "#71ED63" });
			span.empty().append(retour);
		}
	
	
	function Check_name (ajax_synchro) 
		{
			var retour = "Le nom doit comporter au minimum cinq caractères";
			   
			if ($.trim(name.val()).length < 5)
				{
					Formate_false (name, span_name, retour);	
					return false;
				}
			else
				{
					var test_nom = false;
					$.ajax({
							type: "POST",
							url: 'verif_nom.php',
							data: "name="+name.val()+"",
							async: ajax_synchro, // si Check_name est appelée onsubmit "async = false" pour bloquer le navigateur en attente de la réponse.

							success: function(result)
								{
									if (result == 0)	// Si la requête retourne 0 (le nom est disponible)
										{
											Formate_true (name, span_name, 'nom');	
											test_nom = true;
										}
										else
										{
											retour = "Le nom est déjà utilisé";
											Formate_false (name, span_name, retour);	
											test_nom = false;
										}
								}
							});
							
					return test_nom;
				}
		}


	function Controle_mail(value)
		{
			var retour = "Email invalide";
			var regex_mail = /^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$/;
			
			if (!(regex_mail.test(mail.val()))) 
				{
					Formate_false (mail, span_mail, retour);	
					return false;
				}  
			else
				{
					Formate_true (mail, span_mail, 'mail');	
					return true;
				}
		}


	function Controle_tel(value)
		{
			var retour = "Téléphone invalide";
			var regex_tel = /^0[1-9]([_.\-\s]*[0-9]{2}){4}$/;
			
			if (!(regex_tel.test(tel.val())))
				{
					Formate_false (tel, span_tel, retour);
					return false;
				}
			else
				{
					Formate_true (tel, span_tel, 'tel');
					return true;
				}
		}

	
	name.blur(function() 
		{	
			if ($.trim(name.val()) != '') Check_name (true);
		});
	
	mail.blur(function() 
		{	
			if ($.trim(mail.val()) != '') Controle_mail ();
		});
	
	tel.blur(function() 
		{	
			if ($.trim(tel.val()) != '') Controle_tel ();
		});
	
	
	$("#mon_form").submit(function() 
		{
			if (Check_name (false) & Controle_mail () & Controle_tel ())
			return true;
			else
			return false;
		});
		
});
-->
</script>
<style type="text/css">
.info {
background: #EFEFEF;
}
</style>
</head>

<body>
<div>  
                       <form action="#" method="post" id="mon_form" >
                 
                                
                                <input type="text" name="mail" id="mail" class="input"  value=""  />
                                <span class="mail info" >mail</span>
								<br />
                              
                                                         
                                <input type="text" name="name" id="name" class="input"  value=""  />
                                <span class="name info">nom</span>
  
                                <br />
                               
                                                      
                                <input type="text" name="tel" id="tel" class="input"  value=""  />
                                <span class="tel info" >tel</span>
                                <br />

                               
                                <input type="submit" name = "ok" value="ok" />
                         </form>  
<div>

</body>
</html>
A noter que la vérification "onblur" sur le nom utilise une requête ajax asynchrone pour ne pas bloquer le navigateur dans l'attente de la réponse, alors que la vérification "onsubmit" utilise une requête ajax synchrone pour attendre la réponse avant l'envoi du formulaire. C'est pour mieux visualiser cette différence que j'ai fait un sleep de 3 secondes dans mon fichier verif_nom.php.

Pour la vérification des mail et téléphone j'ai pris des regex sur le web sans vérifier plus que ça... (mais ils l'on l'air de bien fonctionner). Quitte à utiliser jquery je suppose qu'il doit y avoir des fonctions intégrées correspondantes qu'il serait peut-être mieux d'utiliser.

Alors ça te fait avancer ?
J'ai bien saisis le principe, on a presque fait les meme etapes:

+ Verifier les champs avec des fonctions,
+ Utilisation de onblur sur chaque champs,
+ L'envoi du formulaire.

Dans ce dernier, quand j'envois le formulaire, il y a 2 conditions:

+ Le formulaire est bien remplis => Il doit l'envoyer et afficher un message de success => TRUE
+ Le formulaire n'est pas bien remplis => On empeche le submit, et on retourne les erreurs => FALSE.
$("#frm_login").submit(function()
                {
                	 //)
                        if (check_name() & check_username())
                        {
                        $(".congs").html('merci');
                        //return true;
                        }
                        else
                        {
                        //$(".congs").html('erreur');
                        return false;
                        }
						return false;
                });
Alors du coup, il m'affiche le message erreur, mais il ne retourne pas les erreurs :(

ViPHP
AB
ViPHP | 5818 Messages

04 mars 2011, 05:49

Tu as testé mon code ?

Parce que

- Cela vérifie bien les champs "onblur" et retourne les erreurs.
- Cela vérifie bien les même champs à la soumission du formulaire et retourne les erreurs si elles existent sans envoyer le formulaire.
- Et uniquement s'il n'y a aucune erreur, "onsubmit" le formulaire est envoyé.

Donc d'après ce que tu demande il manque juste le retour comme quoi l'enregistrement a bien été effectué. Mais ça devrait se faire en php au reaload de la page quand tu as enregistré toutes les données en bdd. C'est uniquement à cet instant que tu est certain que tout est ok.


Au passage tu t'embête pour rien avec tes 3 span pour chaque champ. A comparé je n'en utilise qu'un pour envoyer les différents messages (nom minimum 5 lettres, nom non dispo etc.).

Eléphant du PHP | 214 Messages

05 mars 2011, 10:03

Donc d'après ce que tu demande il manque juste le retour comme quoi l'enregistrement a bien été effectué. Mais ça devrait se faire en php au reaload de la page quand tu as enregistré toutes les données en bdd. C'est uniquement à cet instant que tu est certain que tout est ok.
J'ai teste votre code, ce que j'ai compris c'est que le code n'a aucun bug, je devais effectuer une page php pour valider le formulaire, et cette fonction doit etre au niveau du PHP:
frm_login.submit(function(){
		if(check_name() & check_username())
		{
		$(".congs").html('merci');
			return true
			}
		else
		{
			$(".congs").html('erreur');
			return false;
			
			}
	});

ViPHP
AB
ViPHP | 5818 Messages

05 mars 2011, 22:44

J'ai teste votre code, ce que j'ai compris c'est que le code n'a aucun bug, je devais effectuer une page php pour valider le formulaire, et cette fonction doit etre au niveau du PHP:
Pas clair du tout. Dans mon code c'est
       $("#mon_form").submit(function()
                {
                        if (Check_name (false) & Controle_mail () & Controle_tel ())
                        return true;
                        else
                        return false;
                });
Donc si les conditions sont remplies le formulaire est soumis.
Et étant donné que dans mon code html j'ai
  <form action="#" method="post" id="mon_form" >
le formulaire sera envoyé sur la même page. C'est pour cette raison que tu vois le contenu du formulaire envoyé quand le formulaire est soumis grâce au code du haut de page :
if (isset($_POST['ok']))
{
echo '<pre>';
print_r($_POST);
echo '</pre>';
}
A la place de ce code tu peut faire l'enregistrement en bdd des données du formulaire et si tout est ok tu renvoies un message comme quoi tout est ok : "merci bla bla..."

Eléphant du PHP | 214 Messages

06 mars 2011, 03:55

A la place de ce code tu peut faire l'enregistrement en bdd des données du formulaire et si tout est ok tu renvoies un message comme quoi tout est ok : "merci bla bla..."
Aucun probleme en ce sens:
frm_login.submit(function(){
		if(check_name() & check_username())
		{
		$(".congs").html('merci');
			return true
			}
		else
		{
			$(".congs").html('erreur');
			return false;
			
			}
	});
J'obtiens 'merci', mais en cas de false j'obtiens 'erreur', c'est bien jusqu'a cette etape, ce que je voudrais en cas de false 'erreur', afficher les erreurs survenues en face de leurs champs:
Nom: <input ...> Ici le message d'erreur (Veuillez entrer votre nom)
Pseudo: <input ...> Ici le message d'erreur (Veuillez entrer votre pseudo)
E-mail: <input ...> Ici le message d'erreur (Veuillez entrer votre un email valide)