Vérifier les champs d'un 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 : Vérifier les champs d'un formulaire

Re: Vérifier les champs d'un formulaire

par nhachet » 19 mai 2012, 10:25

Sans aller jusqu'à utiliser complètement ces frameworks, il peut être intéressant d'utiliser ou de s'inspirer des classes de validation existantes.

Maintenant je suis pro-framework. Je pense qu'il est important de les utiliser (même partiellement), d'en comprendre la théorie (MVC) et de les appréhender au plus tôt dans sa découverte du PHP / POO. Mais c'est un autre débat ! ;)

Re: Vérifier les champs d'un formulaire

par AB » 19 mai 2012, 02:57

Comme le dit AB, il est indispensable d'effectuer les contrôles coté PHP. Les contrôles JS ne sont là que pour améliorer l'expérience utilisateur.
Soit tu écris tes propres validateurs, soit tu ne réinventes par la roue et tu te tournes vers des classes de validation connues et éprouvées :

Zend validator : http://framework.zend.com/manual/fr/zen ... e.set.html
SF2 validation : http://symfony.com/doc/current/book/validation.html

Il y en a bien d'autres, quelques recherches sur Google te mèneront vers des classes intéressantes ;)
Oui mais là je suis pas trop d'accord pour conseiller aux débutants d'utiliser Zend ou Symphony pour simplement valider un formulaire. Déjà il faut bien connaître php pour utiliser ces outils qui sont à vocation professionnelle et justement la validation d'un formulaire fait partie des bases qu'il faut maitriser avant d'avoir le niveau requis pour les utiliser (enfin c'est mon avis).

Re: Vérifier les champs d'un formulaire

par nhachet » 18 mai 2012, 22:39

Comme le dit AB, il est indispensable d'effectuer les contrôles coté PHP. Les contrôles JS ne sont là que pour améliorer l'expérience utilisateur.
Soit tu écris tes propres validateurs, soit tu ne réinventes par la roue et tu te tournes vers des classes de validation connues et éprouvées :

Zend validator : http://framework.zend.com/manual/fr/zen ... e.set.html
SF2 validation : http://symfony.com/doc/current/book/validation.html

Il y en a bien d'autres, quelques recherches sur Google te mèneront vers des classes intéressantes ;)

Re: Vérifier les champs d'un formulaire

par agloubeach » 18 mai 2012, 19:51

utiliser cette methode :




if(!empty($_POST ) && strlen($_POST['nom'])>4 && strlen($_POST['message'])>120 && filter_var($_POST['email'],FILTER_VALIDATE_EMAIL) ){

.
.
.
.
}

Re: Vérifier les champs d'un formulaire

par AB » 18 mai 2012, 18:45

Oui mais il faut commencer par la vérification côté php puisque c'est indispensable (javascript pouvant être désactivé).

Ci-dessous un exemple type qui permet de garder les valeurs déjà rentrées en utilisant des variables de sessions. Les messages d'erreurs sont enregistrés dans un tableau (également dans une variable de session) pour permettre d'afficher plusieurs erreurs simultanément.
Cet exemple est autonome, à tester dans une page séparée.
<?php session_start();

if(isset($_POST['nom'],$_POST['email'],$_POST['message'])) //Vérifie que le formulaire a été envoyé
{

	function Verif_magicquotes ($chaine)
	{
		if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
		
		return $chaine;
	} 
	
	
	$_SESSION['message_form'] = array();
	$_SESSION['value_form'] = array();
	
	$nom = trim(Verif_magicquotes($_POST['nom']));//"trim" enlève les espaces vides de début et de fin
	$_SESSION['value_form']['nom'] = $nom;
	if(empty($nom)) {$_SESSION['message_form'][] = 'le nom doit être rempli';}
	
	$email = trim(Verif_magicquotes($_POST['email']));
	$_SESSION['value_form']['email'] = $email;
	if(empty($email )) {$_SESSION['message_form'][] = 'le mail doit être rempli';}
	
	$message = trim(Verif_magicquotes($_POST['message']));
	$_SESSION['value_form']['message'] = $message;
	if(empty($message)) {$_SESSION['message_form'][] = 'le message ne doit pas être vide';}
	
	if(count($_SESSION['message_form']) == 0)
	  {
	   // code d'envoi de mail ou requête d'insertion ou...
	   //...
	   $_SESSION['message_form'][] = 'merci de votre message';
	   unset($_SESSION['value_form']);// efface les valeurs des champs du formulaire si tout est correct
	   
	   }
	   
	header('Location:'.$_SERVER['PHP_SELF']);
	exit;
}
?>

<html>
<div>
<form action = "#" method="post" />
<p>
nom <input type = "text" name = "nom" value = "<?php if (isset($_SESSION['value_form']['nom'])) echo htmlspecialchars($_SESSION['value_form']['nom']) ?>" /><br />

mail <input type = "text" name = "email" value = "<?php if (isset($_SESSION['value_form']['email'])) echo htmlspecialchars($_SESSION['value_form']['email']) ?>" /><br />

message <input type = "text" name = "message" value = "<?php if (isset($_SESSION['value_form']['message'])) echo htmlspecialchars($_SESSION['value_form']['message']) ?>" /><br />

<input type = "submit" value = "envoyer" />
</p>
</form>
</div>

<div>
<?php if(isset($_SESSION['message_form']) && is_array($_SESSION['message_form']) && count($_SESSION['message_form']) > 0)
{
foreach($_SESSION['message_form'] as $value) echo '- '.$value.'<br>';
unset($_SESSION['message_form']);
}
?>
</div>
</html>
Et c'est normalement par dessus ce type de script (qui effectue un traitement des erreurs en php) que l'on ajoute une couche javascript (en option) pour le confort de l'utilisateur et éviter des requêtes inutiles au serveur.

Re: Vérifier les champs d'un formulaire

par piotrowski-s » 18 mai 2012, 17:07

tu souhaites pouvoir les vérifier lors du traitement ou avant la soumission du formulaire ?

Il faut savoir qu'une vérification en Javascript n'est pas très fiable dans la mesure ou sur ton navigateur tu peux facilement désactiver javascript.

Cela dit, pour le visiteur c'est plus intéressant, car s'il est mal rempli, le formulaire n'est pas envoyé.

Je te proposes plusieurs petites fonction pour vérifier ton formulaire, à toi de les adapter et d'en créer une pour chaque champs que tu estimera nécessaire d'être vérifier.

donc pour reprendre voila ce que tu obtiendras:
des fonctions qui doivent, en plus de colorer le champ, renvoyer true si c'est bon, et false si ça ne l'est pas.

Je te donnes un exemple pour verifier un peseudo.

[javascript]<script language="JavaScript">
function verifPseudo(champ)
{
if(champ.value.length < 2 || champ.value.length > 10)
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}
</script>[/javascript]

Ici tu vérifie tout simplement qu'une chaine de caractère fait au minimum 2 caractères et au maximum 10 caractères.
A toi d'adapter cette fonction, en fonction de tes desiderata, cette fonction servira a verifier la longueur d'une chaîne de caractères.


voila comment tu peux appeler cette fonction dans un champs
<input type="text" name="pseudo" onblur="verifPseudo(this)" />
Pour vérifier une adresse mail c'est exactement la même chose que précédement, seul la condition de ta fonction va changer et ceux en fonction de la regex que tu utilises:

la méthode test(str) pour testeter la chaine de caractère utilisera la regex ci dessous pour verifier que l'adresse mail remplie satisfasse bien les conditions requises:

[javascript]
<script language="JavaScript">
function verifMail(champ)
{
var regex = /^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/;
if(!regex.test(champ.value))
{
surligne(champ, true);
return false;
}
else
{
surligne(champ, false);
return true;
}
}
</script>
[/javascript]

pour appeler cette fonction pareil que pour le champ pseudo:
<input type="text" name="email" size="30" onblur="verifMail(this)" />
le onblur permet d'exécuter la fonction lorsque le champ n'a plus le focus.


Après tu dois créer une fonction qui englobe tout le reste et qui vérifie que tous les champs ont été correctement vérifiés:

voila ce que cela donne avec les deux exemples ci-dessus:

[javascript]
<script language="JavaScript">
function verifForm(f)
{
var pseudoOk = verifPseudo(f.pseudo);
var mailOk = verifMail(f.email);


if(pseudoOk && mailOk )
return true;
else
{
alert("Veuillez remplir correctement tous les champs");
return false;
}
}
</script>
[/javascript]

Bien entendu tu dois l'adapter avec tes champs.

et pour finir, pour bloquer l'envoie si le formulaire est mal rempli, tu devras ajouter une clause dans
la balise form qui est onsubmit, voici un exemple, tu peux l'adapter (je n'ai pas mis la méthode ni rien, a toi
de l'adapter, c'est juste pour que tu vois).
<form action="tapagedetraitement.php" onsubmit="return verifForm(this)">
Ca c'est pour la page mère qui contient ton formulaire,


maintenant côté server c'est tout autre chose.
Tu devras impérativement vérifier tes données côté server avant le traitement du formulaire.

car cela t'évitera bien des mauvaises surprises, comme des messages du genre undefined $var, etc...

donc à toi de jouer après avec les conditions if isset, if empty etc... et de tout adapter à tes champs pour le traitement côté server,

et tu dois vérifier chaque variable.


si tu as d'autres questions n'hésites pas.

Vérifier les champs d'un formulaire

par paikan06 » 18 mai 2012, 11:17

Bonjour à tous,

J'ai créé un petit formulaire afin de récupérer différentes informations. (J'avoue que ça ma prie un mois, j suis un peu nul en php :D )

Je cherche une petite fonction qui me permette de vérifier que tous les champs sont remplis.
J'ai fais plusieurs recherches mais j'ai l'impression que tous les solutions que j'ai trouvé ne correspondent pas à mon code.

Si vous avez une petite idée ou une piste à travailler, c'est avec plaisir.
Merci d'avance et très bonne journée.
		
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/plain; charset=UTF-8" />
</head>
<?PHP
if (get_magic_quotes_gpc())
{
    $nom = stripslashes($_POST['nom']); 
    $email = stripslashes($_POST['email']);
    $nation = stripslashes($_POST['nation']); 
    $prenom = stripslashes($_POST['prenom']); 
    $telephone = stripslashes($_POST['telephone']); 
    $adresse = stripslashes($_POST['adresse']);
    $profession = stripslashes($_POST['profession']); 
    $statut = stripslashes($_POST['statut']); 
    $interet = stripslashes($_POST['interet']);
    $message = stripslashes($_POST['message']);  
} 
else
{  
    extract($_POST,EXTR_OVERWRITE); 
    
    
$to = '[email protected]';
// Subject
$subject = 'Demande informations concernant monsite.com';
/////voici la version Mine 
$headers = "MIME-Version: 1.0\r\n"; 

$headers .='Content-Type: text/plain; charset="utf-8"'." ";
$headers .='Content-Transfer-Encoding: 8bit'; 
/* Construction du message */
$msg  = 'Bonjour,'."\r\n\r\n";
$msg .= 'Ce mail a été envoyé depuis le site monsite.com par '.$nom.' '.$prenom."\r\n\r\n";
$msg .= 'Voici le message qui vous est adressée :'."\r\n";
$msg .= '***************************'."\r\n";
$msg .= 'Le nom est :'.$nom."\r\n\r\n";
$msg .= 'Le prénom est :'.$prenom."\r\n\r\n";
$msg .= 'La nationalité est :'.$nation."\r\n\r\n";
$msg .= 'Le numéro de téléphone est :'.$telephone."\r\n\r\n";
$msg .= 'L adresse email est :'.$email."\r\n\r\n";
$msg .= 'L adresse de domiciliation est :'.$adresse."\r\n\r\n";
$msg .= 'Sa profession est :'.$profession."\r\n\r\n";
$msg .= 'Son statut est :'.$statut."\r\n\r\n";
$msg .= 'Son intérêt est :'.$interet."\r\n\r\n";
$msg .= 'Son message est :'.$message."\r\n\r\n";
$msg .= '***************************'."\r\n\r\n";
 
$headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n\r\n";
/* Envoi de l'e-mail */
mail($to, $subject, utf8_decode($msg), utf8_decode ($headers));
// la fonction de redirection ------------
function redir($url){
echo "<script language=\"javascript\">";
echo "window.location='$url';";
echo "</script>";
}
// Utiliser la redirection ---------------
redir("http://www.monsite.com"); 
}?> 
</html>