Contrôler plusieurs champ en php sans avoir 30 lignes ...

WRInaute passionné
Bonjour,

Je cherche le moyen de contrôler plusieurs champs sans être obliger d'avoir 30 lignes de code...

En gros 3 champs sur une même ligne correspondant à date1, date 2 et prix.

Si date 1 remplit mais que date 2 vide et prix vide -> erreur
Si date 1 remplit ,date 2 remplit et prix vide -> erreur
Si date 1 remplit, date 2 vide et prix remplit -> erreur
Si date 1 vide mais que date 2 remplit et prix vide -> erreur
Si date 1vide mais que date 2 remplit et prix remplit -> erreur
etc..etc....et sa x10 !

Il n'y a pas un moyen plus rapide pour vérifier cela ?
Merci
 
WRInaute discret
Bonjour,

moi en général je procède de la manière suivante :

compteur = 0;

si date1 vide alors compteur + 1
si date2 vide alors compteur + 1
si prix vide alors compteur + 1

si compteur > 0 alors erreur
sinon ok
 
WRInaute discret
Seraph a dit:
Code:
foreach($_POST as $field=>$name)
	if (empty($name))
		$error = true;

:)

Faut faire attention, car si la personne à mis un espace, il considèrera le champs comme remplis et validera donc le formulaire :)
 
WRInaute occasionnel
Oui bon là c'est le truc basique, tu peux l'améliorer comme tu veux après, en mettant des messages d'erreurs spécifiques à chaque champ ou autre !
 
WRInaute passionné
merci de vos réponses ^^,

Je ne comprend pas du tout comment fonctionne le code suivant:
Code:
foreach($_POST as $field=>$name)
   if (empty($name))
      $error = true;
Si mes variables sont $champ1, $champ2 et $champ3, je suis censé procéder comment ?
Code:
if(isset($_POST["Valider"]))
{
....
$champ1 = mysql_real_escape_string($_POST["date1"]);
$champ2 = mysql_real_escape_string($_POST["date2"]);
$champ3 = mysql_real_escape_string($_POST["prix"]);
....
//mes conditions
if(machintruc != .....){
.....
else if(ICI JE VERIFIE $champ1, $champ2 et $champ3)
si un ou 2 des 3 champs est remplit
je balance l'erreur
....
Merci
 
WRInaute occasionnel
Bah ça change rien...
La boucle sert juste à vérifier, au lieu de $error = true tu mets tes :

$champ1 = mysql_real_escape_string($_POST["date1"]);
$champ2 = mysql_real_escape_string($_POST["date2"]);
$champ3 = mysql_real_escape_string($_POST["prix"]);
....
 
WRInaute passionné
Merci Seraph, mais il y a un truc que je ne comprend toujours pas ...
foreach($_POST as $field=>$name) , à quoi correspond $_POST, $field et =>$name?
J'ai lus les exemples sur http://fr.php.net/foreach mais je ne suis pas plus inversé ... je ne pige pas ce que sa fait !
 
WRInaute passionné
Pour ne plus se prendre la tête avec des formulaires le mieux pour moi est d'utiliser des classes facilitant le travail :

Exemple avec la classe PEAR HTML Quick Form :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>formulaire</title>
</head>
<body>
<?php
set_include_path(get_include_path() . ";c:\php\pear");
require_once "HTML/QuickForm.php";

$form = new HTML_QuickForm('frmTest', 'post');
$form->addElement('text', 'Pseudo', 'Votre pseudo : ');
$form->addElement('text', 'Nom', 'Votre nom : ');
$form->addElement('text', 'Email', 'Votre adresse email : ');
$options = array(
'language' => 'fr',
'format' => 'dMY',
'minYear' => 2001,
'maxYear' => 2005
);
$form->addElement('date', 'date', 'votre date de naissance : ', $options);
$form->addRule('Pseudo', 'Vous devez saisir un pseudo', 'required', '', 'client');
$form->addRule('Nom', 'Vous devez saisir un nom', 'required', '', 'client');
$form->addRule('Email', 'Vous devez saisir une adresse Email', 'required', '', 'client');
$form->addRule('Pseudo', 'Votre pseudo doit avoir entre 6 caractères et 10 caractères', 'rangelength', array(6,10), 'client');
$form->addRule('Email', 'Vous devez saisir une adresse email valide', 'email', '', 'client');
$form->applyFilter('Nom','trim') ;
$form->applyFilter('Pseudo','trim') ;
$form->setRequiredNote('<span style="color: #ff0000">*</span> = champs obligatoires');
$form->setJsWarnings('Erreur de saisie','Veuillez corriger');
$form->addElement('reset', 'bouton_clear', 'Effacer');
$form->addElement('submit', 'bouton_effacer', 'Envoyer');
if ($form->validate()) {
echo "Toutes les règles sont respectées<br>";
}
else {
$form->display();
}
?>
</body>
</html>
Source : http://php.developpez.com/cours/pear/html-quickform/

Évidemment comme toute boite à outils si on veut sortir des clous ça demande un peu d'apprentissage mais ça facilite grandement la vie.
 
Discussions similaires
Haut