verification formulaire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : verification formulaire

par mc » 22 févr. 2006, 17:21

je viens reanimer ce topic !!!!

je suis confronter a un petit probleme et je ne voit comment le resoudre !!!

je ven donc faire appel a vous pour m'aider cela concerne le meme code donc je reanime ce topic pour ne pas faire de double post

comme le code de mon dernier message le montre lorsqu'il y a une erreur je fais ceci
champ.style.background = 'yellow'; 
champs.style.background = 'yellow'; 
mais je me suis vite apercu que si on fait plusieur erreur sa devient le gros bazarre car beaucoup de champ ce retrouve coloré en jaune et on ne si retrouve plus

donc je voudrais que une fois que l'utilisateur a resolu son probleme si un autre champs a un probleme que le champs ou le probleme ce situait avant soit remis en blanc

mais comment faire je ne trouve pas trop d'idée !!!
il faudrait que je me repositionne sur ce champ et que je fasse
background = 'white';

mais je n'arrive pas me repositionner sur le champ en question

encore merci de ton aide de la derniere fois truc

par mc » 21 févr. 2006, 12:48

:afraid: :afraid: :afraid: :afraid: :afraid:

dans la serie erreur bete je susi le champion ce matin

il manquait un return false; dans le code de verification mais bon je suis pas reveillez ce matin on dira sa comme sa :wink:

pour tout ceux que sa interresse voicit donc le code javascript final

\:D/ \:D/ \:D/ \:D/ \:D/ \:D/
function validation() {

	var formulaire = document.forms["form1"];
	var elem = formulaire.elements.length; 
	var j = 0;
	
	for(var i = 0; i < elem; i++) 
	{
	if(formulaire.elements[i].type == "text") 
		{
			var champ = formulaire.elements["Heure"+j];
			var champs = formulaire.elements["Homme"+j];
			if ((champ.value != "") && (champs.value != ""))
				{
				alert ('vous ne pouvez saisir que un des champ par ligne merci');
				champ.focus();
				champ.style.background = 'yellow';
				champs.style.background = 'yellow';
				return false;
				} 
			    if ((champ.value == "") && (champs.value == "")) 
				  {   
						alert ('veuillez rentrer une valeur dans au moin un des champs merci'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
				  } 
					if ((!is_numeric(champ.value)) || (!is_numeric(champs.value))) 
					{ 
						alert ('Champ non-numérique'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
					}      
		j++;
		} 
	} 
	return true;
} 
merci beaucoup de ton aide truc

par mc » 21 févr. 2006, 12:40

:pouce: j'ai trouver l'erreur

la ligne ci dessous ce trouvait comme ceci:
<input type="text" name=" <? echo "Heure".$i; ?>">
et je l'ai changer en ceci :
<input type="text" name="<? echo "Heure".$i;?>">
tu remarqueras les espaces en moins
et bien c'etait pour cela que sa ne fonctionnait pas :shock:

j'avait lut que javascript etait sensible mais a ce point la je pensait vraiment pas 8-[

sinon j'ai un autre probleme du au fonctionnement de ce code.

voila lors de la verification si je met:

-les champs heure0 et homme0 a "" une alert ce produit c bon
-un des 2 champs ou les 2 une valeur non numerique une alerte ce produit c bon aussi
- si je met les champs heure0 et homme0 a 1 une alert ce produit et il verifie egalement le champ d'apres c a dire heure1 et homme1 et si il ne trouve pas d'autre erreur il valide que des champs heureX hommeX tout les 2 remplis il valide le formulaire
ce n'est pas bon

comment je peut faire pour qu'il s'arrete comme les autres parceque la je ne voit pas pourquoi certain s'arrete bien a la verification et lui non

je pense le probleme vient de la variable J mais pourquoi??

sa avance bien en tout cas merci beaucoup de ton aide

par mc » 21 févr. 2006, 10:55

j'ai fait plusieur test hier soir mais aucun ne donnes des resultat satisfaisant

dont cela que tu ma sugerer
function validation()
{
	var formulaire = document.forms["form1"];
	var elem = formulaire.elements.length; 
	var j = -1;
	
	for(var i = 0; i < elem; i++) 
	{
	if(formulaire.elements[i].type == "text") 
		{
		j++;
			var champ = formulaire.elements["Heure"+j];
			var champs = formulaire.elements["Homme"+j];
				if ((champ.value == "") && (champs.value == "")) 
				  {   
						alert ('veuillez rentrer une valeur dans au moin un des champs merci'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
				  } 
				  if ((champ.value != "") && (champs.value != ""))
					{
					alert ('vous ne pouvez saisir que un des champ par ligne merci');
					champ.focus();
					champ.style.background = 'yellow';
					champs.style.background = 'yellow';
					}  
					if ((!is_numeric(champ.value)) || (!is_numeric(champs.value))) 
					{ 
						alert ('Champ non-numérique'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
					}      
		} 
	} 
	return true; 
} 
function validation()
{
	var formulaire = document.forms["form1"];
	var elem = formulaire.elements.length; 
	var j = 0;
	
	for(var i = 0; i < elem; i++) 
	{
	if(formulaire.elements[i].type == "text") 
		{
		
			var champ = formulaire.elements["Heure"+j];
			var champs = formulaire.elements["Homme"+j];
				if ((champ.value == "") && (champs.value == "")) 
				  {   
						alert ('veuillez rentrer une valeur dans au moin un des champs merci'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
				  } 
				  if ((champ.value != "") && (champs.value != ""))
					{
					alert ('vous ne pouvez saisir que un des champ par ligne merci');
					champ.focus();
					champ.style.background = 'yellow';
					champs.style.background = 'yellow';
					}  
					if ((!is_numeric(champ.value)) || (!is_numeric(champs.value))) 
					{ 
						alert ('Champ non-numérique'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
					}      
		j++;} 
	} 
	return true; 
} 
mais aucun resultat satisfaisant

pour infos si je fait ceci

function validation()
{
	var formulaire = document.forms["form1"];
	var elem = formulaire.elements.length; 
	var j = -1;
	
	for(var i = 0; i < elem; i++) 
	{
	if(formulaire.elements[i].type == "text") 
		{
                                alert ('j a la valeur'+j);
		j++;
                                alert ('j a la valeur'+j);
                        //reste du code
mon compteur est bien a -1 puis passe a 0 mais il me met toujours que value a la valeur nul ou n'est pas un objet toujours sur cette ligne
if ((champ.value == "") && (champs.value == "")) 
je commence a deseperer :cry: :cry: :cry:

par Truc » 20 févr. 2006, 18:50

cela devrait fonctionner, mais tu incrémente la variable j avant de l'utiliser ce qui a pour effet de produire une erreur en fin de boucle puisque tu auras un champ non identifié.

Refait un test en initialisant j à -1 ou incrémente ( j++; ) en fin de test


à éviter aussi ce genre de tests vide:
if ((is_numeric(champ.value)) && (is_numeric(champs.value)))
{}
else
Il faut inverser les condition avec "!":
if ((!is_numeric(champ.value)) || (!is_numeric(champs.value)))
{
   // message d'erreur
}

par mc » 20 févr. 2006, 17:24

bon mes recherche on été infructueuse j'ai bien reflechi et j'ai elaborer une solution qui ne marche malheureusement pas ](*,) ](*,) ](*,) ](*,)

j'aimerais avoir ton avis decu
function validation()
{
	var formulaire = document.forms["form1"];
	var elem = formulaire.elements.length; 
	var j = 0;
	
	for(var i = 0; i < elem; i++) 
	{
		if(formulaire.elements[i].type == "text") 
		{
			j++;						
			var champ = formulaire.elements["Heure"+j];
			var champs = formulaire.elements["Homme"+j];
				if ((champ.value == "") && (champs.value == "")) 
				  {   
						alert ('veuillez rentrer une valeur dans au moin un des champs merci'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
				  } 
				 if ((champ.value != "") && (champs.value != ""))
					{
					alert ('vous ne pouvez saisir que un des champ par ligne merci');
					champ.focus();
					champ.style.background = 'yellow';
					champs.style.background = 'yellow';
					}  
				if ((is_numeric(champ.value)) && (is_numeric(champs.value)))
					{
					} 
					else
					{      
						alert ('Champ non-numérique'); 
						champ.focus(); 
						champ.style.background = 'yellow'; 
						champs.style.background = 'yellow'; 
						return false;
					}      
				} 
			} 
			return true; 
	
} 
voila je retourne a mes recherche qui j'espere vont deboucher sur des choses meilleur et surtout qui fonctionne

par mc » 20 févr. 2006, 16:03

j'ai comprit pourquoi sa bug. c'est deja une chose maintenant il faut que je trouve la bonne solution maintenant

en tout cas merci pour tes eclaircicessement je vais continuer a me prendre la tete la dessus en esperant trouver la bonne solution

au moin j'ai comprit grace a toi pouquoi mon code ne marche pas c'est beaucoup mieux pour resssir a le faire marcher

merci

par Truc » 20 févr. 2006, 15:24

mais oui cela pose un problème étant donné que tu boucles sur les éléments du formulaire:
ah??? je penser que en mettant le nom comme sa sa passait :
Non, puisque tu as plus d'éléments que de champs texte donc admettons que tu as 5 éléments et 2 champ texte. Les nom deviennent:
var champ = formulaire.elements["Heure0"]; 
var champ = formulaire.elements["Heure1"];
...
var champ = formulaire.elements["Heure4"];
donc des champs qui n'existent pas et donc pas de value associé d'où l'erreur.
par contre dans ta solution il y a un petit probleme que tu ne pouvais pas deviner ces que l liste deroulante et un champ caché se trouve avant la boucle d'affichage des champ text donc si je comptabilise le nombre de champ text et que je reboucle derriere par rapport a mon formulaire je vais boucler quand meme sur ma liste deroulante et sur mon champ cacher .
enfin je pense ...
Non plus.

Pour débugger du JS utilise des alert() pour afficher les variables et suivre le cheminement, exemple:
var champ_total = formulaire.elements[i].type; 
alert("Le champ traité est de type "+champ_total);
[/u]

par mc » 20 févr. 2006, 15:10

j'avais pas vu....
c'est pas grave
mais oui cela pose un problème étant donné que tu boucles sur les éléments du formulaire:
ah??? je penser que en mettant le nom comme sa sa passait :
var champ = formulaire.elements["Heure"+i]; 
var champs = formulaire.elements["Homme"+i];
par contre dans ta solution il y a un petit probleme que tu ne pouvais pas deviner ces que l liste deroulante et un champ caché se trouve avant la boucle d'affichage des champ text donc si je comptabilise le nombre de champ text et que je reboucle derriere par rapport a mon formulaire je vais boucler quand meme sur ma liste deroulante et sur mon champ cacher .
enfin je pense ...

par contre j'ai penser a cette solution que je vien de tester mais il me met toujours (apres une lutte de rapidité sans merci :twisted: ) la meme erreur javascript :(
function validation()
{
	var formulaire = document.forms["form1"];
	var elem = formulaire.elements.length; 

    for(var i = 0; i < elem; i++)
    { 
		var champ_total = formulaire.elements[i];			
	    var champ = formulaire.elements["Heure"+i];
		var champs = formulaire.elements["Homme"+i];
		
		if (champ_total.type == "text")
		{
			if ((champ.value == "") && (champs.value == "")) 
			  {   
					alert ('veuillez rentrer une valeur dans au moin un des champs merci'); 
					champ.focus(); 
					champ.style.background = 'yellow'; 
					champs.style.background = 'yellow'; 
					return false;
			  } 
			 if ((champ.value != "") && (champs.value != ""))
				{
				alert ('vous ne pouvez saisir que un des champ par ligne merci');
				champ.focus();
				champ.style.background = 'yellow';
				champs.style.background = 'yellow';
				}  
			if ((is_numeric(champ.value)) && (is_numeric(champs.value)))
				{
				} 
				else
				{      
					alert ('Champ non-numérique'); 
					champ.focus(); 
					champ.style.background = 'yellow'; 
					champs.style.background = 'yellow'; 
					return false;
				}      
			}
		}  
		return true; 
	
} 
la chose incomprehensible pour moi c'est pourquoi il ne prend pas le champ.value et qu'il prend le champ_total.type alors qu'il sont construit de la meme maniere :-k ](*,)

par Truc » 20 févr. 2006, 14:28

j'avais pas vu....

mais oui cela pose un problème étant donné que tu boucles sur les éléments du formulaire:
var elem = formulaire.elements.length; 
for(var i = 0; i < elem; i++) 
Il ne faut boucler que sur les éléments de type texte, pour cela tu peut soit relever le type de l'élément avec une 2eme boucle:
var elem = formulaire.elements.length; 
var elem_text=0;
for(var i = 0; i < elem; i++) 
  if(formulaire.elements[i].type == "text")
     elem_text++; // compte le nombre d'éléments text

for(var i = 0; i < elem_text; i++) // boucle que sur ces éléments
{
   var champ = formulaire.elements["Heure"+i];
   var champs = formulaire.elements["Homme"+i];
    // et tout le reste du code
}
ou alors 2eme solution, placer le $i dans un champ caché apres la boucle de création des champs texte, par exemple:
<!-- code champ textes -->
<?
$i++;
endwhile;
?> 
<input type=hidden" value="<?echo $i;?>" name="i">
et le JS associé:
var elem = formulaire.elements["i"].lvalue; 
for(var i = 0; i < elem; i++) // boucle que sur ces éléments
{
   var champ = formulaire.elements["Heure"+i];
   var champs = formulaire.elements["Homme"+i];
   // et tout le reste du code
}

par mc » 20 févr. 2006, 14:06

salut truc

je l'ai mis au-dessus j'ai plusieur champs cacher et une liste deroulante aussi dans le formulaire

sa peut agir dessus ???

par Truc » 20 févr. 2006, 13:58

Salut,

est-ce que tu n'as que des champs texte et UN bouton submit dans le formulaire ?

par mc » 20 févr. 2006, 12:32

je viens de voir que lors de l'execution du code il m'etais une erreur mais d'habitude lorsque je fait recedente elle reste mais la elle ne restait pas
:(

je me suis donc battu avec le pc pour etre plus rapide que lui et cliquer pour afficher l'erreur :x

apres une lutte acharner j'ai reussi a ertre plus rapide que lui et a decouvrir l'erreur

ligne 23
car3
value a la valeur nul ou n'est pas un objet :shock:

il me la encore jamais sortie cette erreur alors que ce n'est pas la premiere fois que j'utilise value

:?: :?: :?: :?:

verification formulaire

par mc » 20 févr. 2006, 11:41

je vien une fois de plus vers cous pour un probleme ne javascript que je n'arrive pas a resoudre tout seul.

voici le script de verification javascript:
<script language="javascript" type="text/javascript"> 

function is_numeric(num)
	{
		var exp = new RegExp("^[0-9-,]*$","i");
		var bool = exp.test(num);
		return bool;		
	}

function validation()
{
	var formulaire = document.forms["form1"];
	var elem = formulaire.elements.length; 
    for(var i = 0; i < elem; i++)
    { 		
	    var champ = formulaire.elements["Heure"+i];
		var champs = formulaire.elements["Homme"+i];
		
		if ((champ.value == "") && (champs.value == "")) 
          {   
                alert ('veuillez rentrer une valeur dans au moin un des champs merci'); 
                champ.focus(); 
                champ.style.background = 'yellow'; 
                champs.style.background = 'yellow'; 
                return false;
		  } 
		 if ((champ.value != "") && (champs.value != ""))
		 	{
			alert ('vous ne pouvez saisir que un des champ par ligne merci');
			champ.focus();
			champ.style.background = 'yellow';
			champs.style.background = 'yellow';
			}  
		if ((is_numeric(champ.value)) && (is_numeric(champs.value)))
			{
			} 
            else
			{      
                alert ('Champ non-numérique'); 
                champ.focus(); 
                champ.style.background = 'yellow'; 
                champs.style.background = 'yellow'; 
                return false;
		    }      
        }  
		return true; 

} 

</script>    

il ne fonctionne pas et ne genere pas d'erreur d'ou mon gros probleme pour voir ce qui ne vas pas.

voici le code d'affichage du formulaire:
<form name="form1" method="post" action="insert.php" onsubmit="return validation();">

<?$i = 0;	while ($row = mysql_fetch_array($res)) : ?>

<input type="text" name=" <?echo "Heure".$i; ?>" value = "1">	
<input type="text" name=" <? echo "Homme".$i; ?>" value = "1">

<?
$i++;
endwhile;
?>

<input type="submit" name="envoyer" value="envoyer"><br><br>
</form>

je ne pense que sa interragi avec mon probleme mais il y a plusieurs champs caché et une liste déroulante dans le formulaire d'affichage.

merci