Générer et vérifier automatiquement un formulaire à partir de fichier .ini

Description

Bonjour, c'est la première fois que je dépose une source sur le site, j'espère que je vais être assez clair, et surtout qu'elle sera très utile. Je m'en sers régulièrement.
Explication : J'ai développé une fonction permettant de générer un formulaire automatiquement à partir d'un tableau associatif multidimension. Ce tableau peut être créé à partir de fichiers .ini, ce qui facilite l'utilisation.
Pour la vérification du formulaire, tout sera paramétré dans le fichier .ini (dans la partie code, vous verrez comment le formater).
Il vous faudra développer 2 fonctions qui seront appelées dans la fonction create_form() : une au cas où le formulaire a été rempli correctement, et une dans le cas contraire. Les deux fonctions devront prendre un seul paramètre, un tableau (associatif) contenant les données du formulaire. Dans le premier cas, ce sera les données correctes, dans le deuxième, les incorrectes. (En général, la fonction d'erreur liste les champs incorrects). Ces fonctions doivent retourner le texte (HTML) à afficher lors de la validation du formulaire.
Beaucoup de fonctions présentes dans la source vous seront utiles.
Plutôt que de passer du temps dans des explications qui embrouillent le cerveau, passons directement au code :p

Source / Exemple :


FORMULAIRE.INI
; INI pour le formulaire
; Possibilité d'ajouter des attributs
[form] ; pensez à bien écrire 'form' entre les crochets
; Mettre un ; devant les paramètres non renseignés
name = inscription
;action =
;class =
;id =
; STYLE : mettre entre "" la valeur.
;style =
;target =
method = post
enctype = multipart/form-data ; NE PAS OUBLIER si champs fichier dans le formulaire

; Fonctions à appeler pour le traitement des données postées.
callback = traiter_formulaire
callback_err = en_cas_d_erreur

; SUBMIT : ajoutez des attributs si nécessaire
[submit] ; pensez à bien écrire 'submit' entre les crochets
value = Inscription
class = "submit"
name = "submit"

CHAMPS.INI
; fichier de configuration pour les champs texte

; Aide à la compréhension du fichier
; ----------------------------------------------------------------------------------------------
; titre 		> Intitulé du champ, visible par l'internaute.
; nom_champ 		> Le nom destiné au champ (uniquement utilisé par la vérification
;				Attention tout de même à ne pas donner le même nom à
;				deux champs différents.
; type 			> type du champ (SELECT, TEXT, PASSWORD, RADIO, ...) en HTML.
; value_defaut		> Valeur par défaut du champ.
; option_champ		> Éventuelles options (ex: pour un type 'SELECT': 'MULTIPLE' peut
;				être une option.)
; selected_defaut	> Les options sélectionnées par défaut (uniquement pour les 'SELECT')
;				mettre ici l'index de la(des) valeur(s) sélectionnée(s) 
; double_saisie		> Le champ peut apparaître deux fois pour permettre une vérification
;				utile (pour les mots de passe par exemple)
; type_donnee		> Le type de données (pour vérification du format)
;				pris en compte actuellement : email, password, date, phone
; obligatoire		> Indique si le champ doit être nécessairement renseigné
; ----------------------------------------------------------------------------------------------

; REMARQUE :
;		Le bouton de validation de formulaire est automatiquement créé.
; Il n'est pas obligatoire de mettre des noms entre les crochets.
; J'ai mis le plus d'exemples possibles

[nom]
titre = Nom
nom_champ = nom
type = text
value_defaut = false
option_champ = false
selected_defaut = false
type_donnee = text
obligatoire = true

[adresse]
titre = Adresse
nom_champ = adresse
type = textarea
value_defaut = false
option_champ = "rows=5 cols=30"
selected_defaut = false
type_donnee = text
obligatoire = true

[date_naissance]
titre = "Date de naissance (JJ/MM/AAAA)"
nom_champ = date_naissance
type = text
value_defaut = ""
option_champ = "maxlength=10"
selected_defaut = false
type_donnee = date
obligatoire = true

[email]
titre = "Email (votre_nom@votre_domaine.com)"
nom_champ = email
type = text
value_defaut = false
option_champ = false
selected_defaut = false
type_donnee = email
obligatoire = true

[pass]
titre = "pass VIP"
nom_champ = password
type = password
value_defaut = false
option_champ = false
selected_defaut = false
type_donnee = password
obligatoire = true

[tel_fixe]
titre = "Téléphone fixe"
nom_champ = tel_fixe
type = text
value_defaut = false
option_champ = false
selected_defaut = false
type_donnee = phone
obligatoire = false

/* ------------------------------------------------------------------------------------------------- */
// PASSONS AU PHP

INDEX.PHP

/* -- VOS FONCTIONS -- */

include('fc_form.inc.php'); // Inclusion du fichier contenant les fonctions spécifiques aux formulaires

function traiter_formulaire($tab_form){
	$html = 'Voici le récapitulatif de vos données :<br>';
	$b=false;
	$m='';
	foreach($tab_form as $cle=>$valeur){
		if($b) $m.=', ';
		$m.='<b>'.$valeur.'</b>';
		$b=true;
	}
	$html.=$m;
	// Texte de retour
	return $html;
}
function en_cas_d_erreur($tab_form){
	$html = 'Les champs suivants ne sont pas correctements remplis :<br>';
	$b=false;
	$m='';
	foreach($tab_form as $cle=>$valeur){
		if($b) $m.=', ';
		$m.='<b>'.$valeur.'</b>';
		$b=true;
	}
	$html.=$m;
	// Texte de retour
	return $html;
}

// -- Récupération du formulaire
$t_param=parse_ini_file("FORMULAIRE.INI",true); // Fonction qui parse un ini toute seule ! :)
$t_param['champs']=parse_ini_file("CHAMPS.INI",true); // Bien placer le deuxième INI dans ['champs']
//
// La fonction validate_form() vérifie le formulaire. Elle retourne un tableau :
// dans la première case du tableau, -1, 0 ou 1 (formulaire pas soumis, incorrect, ou correct)
// dans la deuxième, un texte contenant ce que vos 2 fonctions retournent
//
list ( $valide , $texte ) = validate_form ( $t_param ) ;
//
if ( $valide < 1 ) { // Si le formulaire n'a pas été validé correctement
	$formulaire = create_form($t_param);
}

Conclusion :


- Remarques :
Les fonctions create_form() et validate_form() se trouvent dans un fichier externe, joint dans le zip.
Les mots de passes sont automatiquement cryptés en MD5 (il suffit de modifier la fonction pour supprimer cette opération).
Le paramètre double saisi d'un champ n'est pas pris en compte, mais je l'ai prévu au cas où je le développerai.

- Bugs :
Si on met autre chose que des chiffres dans la date, une erreur apparaît en Warning. Je viens de m'en apercevoir, je corrigerai ça dès que possible ;)

- Message aux webmasters :
J'ai trouvé ce message, en rouge et en gras au moment de poster ma source :
"Etes-vous sûr de l'orthographe de votre source ?
Avant de valider jettez un dernier p'tit coup d'oeil ;-)"
[ "Jettez"=> "Jetez" ]

Avez-vous vérifié VOTRE orthographe ?

voici un listing des fautes apparaissant juste dans cette page avec les corrections :
  • (...)exemple récurent et aillant un équivalent, votre source sera spprimée par un admin.

[ récurent => récurrent , aillant => ayant , spprimée => supprimée (pardonnable, faute de frappe...) ]
  • Dans quelle langage est la source que vous souhaitez poster ?

[ quelle => quel ]
  • Annotations finale(...)

[ finale => finales ]
  • (...)les .exe seront automatiquement supprimé lors de l'upload

[ supprimé => supprimés ]
  • doit être avec l'extention .jpg ou .jpeg !

[ extention => extension ]
Voilà !
J'ai vérifié mon orthographe MOI....... ;)
Je vous ai cassés / :p LOL

Sinon le site est excellent ^^
Merci à tous ceux qui se donnent la peine de le faire vivre et évoluer !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.