Vérifier les champs d'un formulaire

Petit nouveau ! | 5 Messages

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>

Mammouth du PHP | 702 Messages

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.

ViPHP
AB
ViPHP | 5818 Messages

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.
Modifié en dernier par AB le 18 mai 2012, 21:08, modifié 1 fois.

Petit nouveau ! | 2 Messages

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) ){

.
.
.
.
}

Eléphant du PHP | 127 Messages

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 ;)

ViPHP
AB
ViPHP | 5818 Messages

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).

Eléphant du PHP | 127 Messages

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 ! ;)