begin process at 2012 02 09 10:30:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

 > VÉRIFIER LES CHAMPS OBLIGATOIRES D'UN FORMULAIRE

VÉRIFIER LES CHAMPS OBLIGATOIRES D'UN FORMULAIRE


 Information sur la source

Note :
Aucune note
Catégorie :Formulaires Classé sous :formulaire, post, empty, champs, obligatoires Niveau :Débutant Date de création :15/02/2008 Date de mise à jour :16/02/2008 02:30:05 Vu :15 685

Auteur : choy

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

Ptite fonction toute simple qui n'apprendra rien aux coder confirmés mais qui reste pratique et que je n'ai pas croisé ici alors je post ;).

Source

  • <?php
  • function check_empty_post($unauthorized_vars){
  • $errors = array();//Tableau d'erreur vide
  • foreach($unauthorized_vars as $value){
  • if(empty($_POST[$value]) && $_POST[$value] != '0'){// si la valeur de poste est vide alors on l'ajoute aux erreurs
  • $errors[] = $value;
  • }
  • }
  • if(count($errors)){//si le tableau d'erreur n'est pas vide on retourne les erreurs sinon false
  • return $errors;
  • }else{
  • return false;
  • }
  • }
  • //Exemple de tableau de champs obligatoire
  • $unauthorized_vars = array(
  • 'login',
  • 'pass'
  • );
  • //Exemple d'utilisation
  • if($errors = check_empty_post($unauthorized_vars)){
  • echo count($errors)." erreur(s).";
  • }
  • ?>
  • <?php //Pas super util mais je poste si quelqu'un a besoin
  • function check_empty_post($unauthorized_vars,$error_string){
  • $errors = array();
  • foreach($unauthorized_vars as $value){
  • if(empty($_POST[$value]) && $_POST[$value] != '0'){
  • $errors[] = sprintf($error_string, $value);
  • }
  • }
  • if(count($errors)){
  • return $errors;
  • }else{
  • return false;
  • }
  • }
  • $unauthorized_vars = array(
  • 'login',
  • 'pass'
  • );
  • $error_string = 'Le champs \'%s\' ne peut rester vide.<br />';
  • if($errors = check_empty_post($unauthorized_vars, $error_string)){
  • echo count($errors).' erreurs.<br />';
  • foreach($errors as $value){
  • echo $value;
  • }
  • }
  • ?>
<?php
	
	function check_empty_post($unauthorized_vars){
		$errors = array();//Tableau d'erreur vide
		foreach($unauthorized_vars as $value){
			if(empty($_POST[$value]) && $_POST[$value] != '0'){// si la valeur de poste est vide alors on l'ajoute aux erreurs
				$errors[] = $value;
			}
		}
		if(count($errors)){//si le tableau d'erreur n'est pas vide on retourne les erreurs sinon false
			return $errors;
		}else{
			return false;
		}
	}
	
//Exemple de tableau de champs obligatoire
	$unauthorized_vars = array(
		'login',
		'pass'
	);
	
//Exemple d'utilisation
	if($errors = check_empty_post($unauthorized_vars)){
		echo count($errors)." erreur(s).";
	}

?>

<?php //Pas super util mais je poste si quelqu'un a besoin
	
	function check_empty_post($unauthorized_vars,$error_string){
		$errors = array();
		foreach($unauthorized_vars as $value){
			if(empty($_POST[$value]) && $_POST[$value] != '0'){
				$errors[] = sprintf($error_string, $value);
			}
		}
		if(count($errors)){
			return $errors;
		}else{
			return false;
		}
	}
	
	$unauthorized_vars = array(
		'login',
		'pass'
	);
	$error_string = 'Le champs \'%s\' ne peut rester vide.<br />';
	
	if($errors = check_empty_post($unauthorized_vars, $error_string)){
		echo count($errors).' erreurs.<br />';
		foreach($errors as $value){
			echo $value;
		}
	}

?>

 Conclusion

Rien de révolutionnaire mais ça peut etre pratique.


 Historique

16 février 2008 02:30:05 :
Correction du bug pour les champs contenant la valeur '0' (merci à codefalse et malalam pour leurs lumières dans cette fin de semaine sombre ;))

 Sources du même auteur

FORM, ORM POUR FORMULAIRE
PARCOURS DE TABLEAU À L'AIDE D'ATTRIBUTS HTML "NAME
CLASS MOTEUR DE TEMPLATE PHP5

 Sources de la même categorie

Source avec Zip VÉRIFICATION DE FORMULAIRE EN PHP par psonic13
Source avec Zip Source avec une capture CALENDRIER RÉSERVATION POUR CHAMBRES D'HÔTES EN PHP MYSQL par oallais
Source avec Zip Source avec une capture UPLOADEUR DE FICHIERS MULTIPLES V1 par cod57
FORM, ORM POUR FORMULAIRE par choy
Source avec Zip Source avec une capture LOGIN SHA1 + CRÉATION UTILISATEUR par aventurier19

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip VÉRIFICATION DE FORMULAIRE EN PHP par psonic13
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
FORM, ORM POUR FORMULAIRE par choy
FORMULAIRE : 4 EN 1 par Tartuffe

Commentaires et avis

Commentaire de codefalse le 15/02/2008 15:35:51 administrateur CS

Une remarque : 0 n'est pas vide, or empty (0) retourne true :p

Commentaire de choy le 15/02/2008 16:45:47

As tu testé ? car je sais qu'en actionscript ça renvoi false donc j'ai testé avec php et chez moi (MAMP sur leopard) ça marche.

Commentaire de codefalse le 15/02/2008 18:09:33 administrateur CS

php.net/empty

c'est la doc qui le dit :p

Commentaire de choy le 15/02/2008 18:33:26

lol alors je changerai ça dans un souci de propreté ^^ mais ça marche ici :p
Alors question, vaut il mieux que je fasse un if(count(array)>0) ou alors que je saute la déclaration de l'array et que je fasse un if(isset(array)) ?
les deux marchent mais est-ce bien propre ?

Commentaire de choy le 15/02/2008 18:44:41

bah en fait j'aime bien ton lien ^^ :

Retourne FALSE si var a une valeur non-vide et différente de zéro.

Ce qui suit est considéré comme étant vide :

"" (une chaîne vide)
0 (0 en tant qu'entier)                              <---------- :D
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
var $var; (une variable déclarée, mais sans valeur dans une classe)

Commentaire de malalam le 15/02/2008 18:50:02 administrateur CS

Hello,

"lol alors je changerai ça dans un souci de propreté ^^ mais ça marche ici :p"
Hmm..nous sommes sur des données de formulaire, donc des chaînes.
or empty('0') renverra true avec toute version de php >= 4
Alors à moins que tu bosses avec une version de PHP3...je vois mal comment ça peut renvoyer false chez toi?

Pour ta question, ce ne sera soit la deuxième, soit if(!empty($errors)) {}

Commentaire de malalam le 15/02/2008 18:51:50 administrateur CS

Je crois que tu n'as pas compris la remarque de codefalse : si je saisis 0 dans un champ de formulaire, ce doit être considéré comme une valeur, et justement pas comme un champ vide.
Exemple : Combien avez-vous d'enfants (réponse obligatoire). Ton code va prétendre que je n'ai pas répondu si je mets que j'ai 0 enfant.

Commentaire de choy le 15/02/2008 19:00:40

aaah ok ok, autant pour moi en effet je pensai à l'autre test. Faut m'excuser, ma semaine de taff m'est montée à la tête ^^.
oki, je vois bien le probleme, alors comment le régler ?
un if(empty($_POST['value']) && $_POST['value'] != '0') devrait faire l'affaire nan ?

Commentaire de divx78340 le 15/02/2008 20:47:38

Normalement oui

Commentaire de morpheus57 le 17/02/2008 16:18:39

Oui ou alors

if (isset($_POST['value']) && trim($_POST['value'])!='')

Commentaire de yoman64 le 17/02/2008 20:36:37

Tu n'as jamais vu de code de ce genre ? tu n'As pas d'u chercher bien loin ;) http://www.phpcs.com/recherche.aspx?r=verifier+formulaire

et comme dit plus haut vraiment étrange de comparer si != '0' .. O.o je vois mal comment un string vide peut être égale à un string '0' mais bon je me trompe peut être mais $_POST[''] === '' est plus juste...

Commentaire de Tartuffe le 18/02/2008 09:40:09

LE problème de vérification des formulaires, c'est qu'il ne peut pas être automatisé avec seulement un test ISSET, car rapidement il est SET (d'autant si tu testes les valeurs retour et que tu ré-affiches dans les champs les valeurs envoyées, même les fausses avec un message d'erreur à l'utilisateur...).

Le test doit être fait sur la valeur, qui elle est 'unique' pour chaque champ puisqu'elle doit être ET significative ET stockable (en BdD)...

C'est donc un ISSET + TESTS aux limites (a minima sur TRIM($_post['monchamp']) pour éviter les malins qui mettent des espaces...) qui eux restent propriétaire de l'application.


Explication par l'exemple :
- les enfants de malalan, c'est >-1 et <10 (de 0 à 9) (et 9 c'est vraiment beaucoup, mais aux limites, ca existe...)
- un titre, c'est inférieur au MAX de bdD, mais pour être significatif tu peux vouloir lui imposer un mini, donc c'est >5 et inférieur à 126 (max BdD =125)
- un choix de liste déroulant (0= sélectionnez), c'est >0 et <(X+1) (le dernier choix !).
- un texte libre (area) comme le titre, mais avec un signifiant plus important (>10...)


Bref, les vérif de formulaire ca me fait rire, car c'est forcément un truc perso qui colle à l'appli, donc aux spécif, donc au 'métier' pour laquelle (et lesquels) elle a (et ils ont) été réalisé.

CE N'EST PAS GENERALISABLE !


Maintenant tu peux appliquer 2 politiques :
- l'exploitant / chercheur : mieux vaut ne rien avoir en bdd qu'une info non-exploitable !
- commerciale : on prends tout et les exploitants se démerderont...

Les tests et les variables obligatoires pour enregistrement seront fait en conséquence, bref, selon l'appli, les spéc, la demande, le métier, la demande initiale qui fait que tu réalises un formulaire , koi ^^

Commentaire de choy le 18/02/2008 13:44:23

Tartuffe> Attention, il ne s'agissait pas ici d'un script pour s'assurer que les valeurs entrées correspondent à celles souhaitées (par ex. qu'un champs âge soit bien composé de chiffres uniquement) mais juste de savoir si elles sont remplies.
Ca a une utilités limités certes mais c'est une opération qui revient souvent. Ca évite de se retaper les if(empty()) de chaque champs quand on crée un nouveau script, là il suffit de remplir le tableau.

Yoman64> Je comprend pas tout, je teste si la var est empty puis si elle est différente de zéro car zéro est considéré comme empty alors que ça peut être une valeur valide (merci à codefalse et malalam). Donc un string vide n'est pas égal à un string '0' mais empty renverra true pour les deux alors il faut faire la différence.
Sinon j'ai beaucoup vu de script pour vérifier qu'un mail était un mail, qu'une date est bien une date... beaucoup sont bancales, beaucoup sont inadaptable, et je n'en ai pas vu dont le but est la vérification du remplissage.

Commentaire de Tartuffe le 18/02/2008 13:50:06

... c'est bien ce que je disais ^^

Ne cherche pas à savoir s'il est rempli ou non, cherche tout de suite à savoir s'il contient les valeurs attendues, ca t'évitera les pbs comme ca : "je teste si la var est empty puis si elle est différente de zéro car zéro".

Après plus de souci. Et pour "Ca évite de se retaper les if(empty()) de chaque champs...", rien ne t'empêche de faire un fonction de test, avec les param Min et Max, et hop !

Commentaire de choy le 18/02/2008 14:07:48

Oui, mais là tu part du principe que j'attend forcément quelque chose de mes champs, qu'un tel soit email, un autre nombre, un autre url... mais dans le cas de champs obligatoire mais pas forcément spéciaux ça devient utile de tester si elle est remplie ou non et seulement ça.

Commentaire de yoman64 le 18/02/2008 22:02:38

(empty($_POST[$value]) && $_POST[$value] != '0')

Ici tu regarde si il y a quelque chose dans le POST, et ensuite si il est pas égale au string '0', pourquoi faire ?
En plus tu vérifie pas si isset, ça va vite générer des notices pour ceux qui développe strict (comme tous les devs devraient faire)

#  if(empty($_POST[$value]) && $_POST[$value] != '0'){// si la valeur de poste est vide alors on l'ajoute aux erreurs
# $errors[] = $value;
# }


Remplacer par
#  if(!isset($_POST[$value]) || trim($_POST[$value]) === ''){// si la valeur de poste est vide alors on l'ajoute aux erreurs
# $errors[] = $value;
# }

Me semble beaucoup plus juste...

Ce qui va vérifier si elle est setter, si c'est pas le cas on arrête la et on ajoute une erreur, sinon on voit si elle contient quelque chose, si c'est pas le cas on ajoute une erreur...

bref je vois pas trop l'utilité d'un tel code, mais bon tant qu'à le faire, aussi bien le faire correctement...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

formulaire [ par Tomcube ] SalutJ'ai un problème complètement bizarre.J'ai un formulaire avec des champs "titre", "section", "titre0" et "astuce0". Lorsque je rempli les 4, et q 2 actions :-( [ par Blacknight91titi ] Salutvoila j'ai un problèmej'ai crée un formulairepuis ajouter un code pour vérifier que les champs soit rempli correctementmasi le problème est que c Formulaire...validation [ par CyberMen30 ] Bonjour &#224; tous,J'ai un formulaire d'adh&#233;sion contenant les donn&#233;es suivante:Tarif, Regionale, recruteur, prenom, nom, numero, rue, case comment les valeurs d'un champ input créé dynamiquement [ par Jarod1980 ] Bonjour,Je voudrais donner la possibilité à l'utilisateur d'insérer des champs input type text dans la page WEB à partir d'un bouton. Le problème, c'e J'ai 5 champs et j'aimerais faire une vérification pour savoir si au minimum un des 5 est rempli. [ par pyrrah ] Hello à tous :)Voilà, j'ai un problème de dev php.J'ai 5 champs et j'aimerais faire une vérification pour savoir si au minimum un des 5 est rempli.L'i php "automatique" d'un formulaire [ par maxhazard ] Bonjour à tousJe suis débutant sur php et je bloque sur un point qui vous paraitra peut être facile(enfin je pense).Je cherche à récolter les réponses Connexion formulaire POST à distance... [ par R3dDragon ] Bonjour,Je viens ici car j'ai un petit soucis... (bien évidemment!!lol)J'aimerais que mon site se connecte à ma place sur un site internet distant, ma Formulaire et envoi de mail [ par Becca ] Bonjour, j'ai un petit problème avec le formulaire. En fait quand les personnes remplissent le formulaire je voudrais recevoir par mail leur réponse. formulaire de recherche multicriteres [ par bendoc ] Bonjour, Je m'adresse à vous après de nombreuses recherches infructueuses sur internet. Voilà c'est assez simple je voudrais faire une recherche multi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,380 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales