Verification d'un formulaire

Dgse
Invité n'ayant pas de compte PHPfrance

25 oct. 2005, 13:38

Bonjour

Un petit soucis lors d'une verification d'un formulaire.. voici le script
<script language="javascript" type="text/javascript">
function validation()
{

if(document.formulaire.mail.value == "") 
{
var email=document.formulaire.mail.value;
if ( ( email.indexOf("@") == -1 ) || ( email.indexOf("@") == 0 ) || ( email.indexOf("@") != email.lastIndexOf("@") ) || ( email.indexOf(".") == email.indexOf("@")-1 ) || ( email.indexOf(".") == email.indexOf("@") +1 ) || ( email.indexOf("@") == email.length -1 ) || ( email.indexOf (".") == -1 ) || ( email.lastIndexOf (".") == email.length -1 ) )
{
alert ('entrezune adresse Email valide');
document.formulaire.mail.focus();
return(false);
}
}

if(document.formulaire.Nom.value == "") {
alert ('veuillez entrer votre Nom');
document.formulaire.Nom.focus();
return(false);
} 
}
</script> 

<form name="formulaire" method="post" onSubmit="validation()">
<input type="text" name="mail" size="15" maxlength="40" >
<input type="text" name="Nom" size="15" maxlength="40" >
<input type="submit" name="envois" value="Envoyer">
Mon probleme est que les alert fonctionne bien mais il m'envois quand meme le formulaire apres avoir clicquer sur Ok de la fenetre d'alerte..

Si vous avez une solution je suis preneur

Merci

@+ Dgse

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

25 oct. 2005, 14:01

Merci d'utiliser la balise
 pour encadrer ton code dans tes messages.

[size=59]Comme ton pseudo semble nindiquer que tu as le bras long, je vais le faire pour toi...[/size] :lol:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

25 oct. 2005, 14:15

N'as-tu pas fait une faute de sens dans ton test ?
Moi, je corrigerais ainsi :
function validation()
{ if (document.formulaire.mail.value != "")

Eléphant du PHP | 219 Messages

25 oct. 2005, 14:54

Salut,

Je crois qu'il faut mettre
<form name="formulaire" method="post" onSubmit="return validation()"> 
(ajout de return)

a+

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

25 oct. 2005, 16:05

daoud a raison : il faut mettre le mot clef return. Notamment, teste si l'utilisateur appuie sur Entrée au clavier, au lieu de cliquer.

[+ d'infos]
http://www.openweb.eu.org/articles/vali ... ormulaire/

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

25 oct. 2005, 16:25

Très certainement.

Il n'en demeure pas moins que ce test me paraît curieux, et même contradictoire.

Si document.formulaire.mail.value est vide,
il est inutile d'attribuer cette "non-valeur" à la variable email
tout comme il est inutile d'effectuer des tests sur cette même valeur, non ? ;)
if (document.formulaire.mail.value == "")
   { var email=document.formulaire.mail.value; 

Mammouth du PHP | 19672 Messages

25 oct. 2005, 16:34

Ça vient probablement (mais pas certain) des parenthèses autour de false dans return (false)
Proposition plus simple:
<script language="javascript" type="text/javascript">
function validation()
{

    if(document.formulaire.mail.value != "")
    {
        var email = document.formulaire.mail.value;
        if (email.search(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*[^\._-]@[a-z0-9-]+(\.[a-z0-9]{2,4})*$/) == -1)
        {
            alert ('entrezune adresse Email valide');
            document.formulaire.mail.focus();
            return false;
        }
        else
        {
            return true;
        }
    }
    else
    {
        alert ('entrezune adresse Email');
        document.formulaire.mail.focus();
        return false;
    }

    if(document.formulaire.Nom.value == "") {
        alert ('veuillez entrer votre Nom');
        document.formulaire.Nom.focus();
        return(false);
    }
}
</script>
En JavaScript aussi on peut utiliser des expressions régulières ;)

Ensuite, dans ton formulaire, là où tu fais appel à ton JavaScript de validation, par exemple onsubmit="" etc, formule en rajoutant ceci
<form action="page_xyz.php" method="post" onsubmit="validation(); return false;">
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Dgse
Invité n'ayant pas de compte PHPfrance

26 oct. 2005, 16:48

Bonjour

J'ai modifie le script de cette facon (grace a vous), les conditions fonctionne et quand tout est remplis et que je valide il n'envois rien , ai je oublie quelques chose
<script language="javascript" type="text/javascript"> 
function validation() 
{ 
	 	
        var email = document.formulaire.mail.value; 
        if (email.search(/^[_a-z0-9-]+(.[_a-z0-9-]+)*[^._-]@[a-z0-9-]+(.[a-z0-9]{2,4})*$/) == -1) 
        { 
            alert ('entrez une adresse Email valide'); 
            document.formulaire.mail.focus(); 
            return false; 
        } 
       	if(document.formulaire.Nom.value == "") 
		{ 
        alert ('veuillez entrer votre Nom'); 
        document.formulaire.Nom.focus(); 
        return false; 
    	}
		
else {return true}
}
</script> 

<form action="send.php" method="post" onsubmit="validation(); return false;"> 
<input type="text" name="mail" size="15" maxlength="40" > 
<input type="text" name="Nom" size="15" maxlength="40" > 
<input type="submit" name="envois" value="Envoyer"> 
Merci a tous

Dgse

PS : Pas besoin d'ecrire en minuscule j'en suis pas ;o)

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 oct. 2005, 16:57

il manque un ";" apres return true ....
Mais tu peut en plus réorganiser un peu le code
function validation()
{
         
        var email = document.formulaire.mail.value;
        if (email.search(/^[_a-z0-9-]+(.[_a-z0-9-]+)*[^._-]@[a-z0-9-]+(.[a-z0-9]{2,4})*$/) == -1)
        {
            alert ('entrez une adresse Email valide');
            document.formulaire.mail.focus();
            return false;
        }
        else  if(document.formulaire.Nom.value == "")
        {
             alert ('veuillez entrer votre Nom');
             document.formulaire.Nom.focus();
             return false;
        }        
        else 
        {
             return true;
         }
} 

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Dgse
Invité n'ayant pas de compte PHPfrance

26 oct. 2005, 17:06

Bonjour

J'ai mis le ; derriere true (Oupps un oublis de ma part), mais cela ne m'envois rien , si je retire le return false de onsubmit.

Ca me l'envois bien mais meme si le champ est vide... ce n'est pas reelement ce que je veut ...

Merci encore

Dgse

Dgse
Invité n'ayant pas de compte PHPfrance

26 oct. 2005, 19:41

Bonjour

en faite tout venais du formulaire par lui meme , j'ai mis ceci et tout fonctionne tres bien
<form action="send.php" method="post" onsubmit="return validation(); "> 
<input type="text" name="mail" size="15" maxlength="40" > 
<input type="text" name="Nom" size="15" maxlength="40" > 
<input type="submit" name="envois" value="Envoyer"> 
Merci a Vous tous

@+ Dgse

Eléphant du PHP | 219 Messages

27 oct. 2005, 11:05

Oui c'est sûr, avec
<form action="page_xyz.php" method="post" onsubmit="validation(); return false;">
cela retourne toujours false, et dans ce cas cela n'envoie jamais ton formulaire...

=> bouton Résolu

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 oct. 2005, 11:07

=> bouton Résolu
Modération : comme dgse est un invité, il ne peut pas le faire, mais je le fait pour toi ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer