Danygras

Gestion des Formulaires HTML

Cet exemple un peu plus complexe permet d'utiliser tous les champs classiques HTML

radio checkbox list multilist password select button option optgroup ...
fieldset et legend pour regrouper plusieurs champs ensembles
HTML5 = datalist keygen output

Les éléments à définir dans chaque field (sous forme d'un tableau - array)

<?php 

// je défini mon formulaire avec des attributs 'en vrac'
$cond = array(
	// un input TEXT classique
	'nom' => array('type'=>'text', 'name'=>'nom', 'size'=>18, 'maxlength'=>20, 'value'=>'Visiteur', 'label'=>array('txt'=>'Nom : ')),
	// un input de type PASSWORD
	'pwd' => array('type'=>'password', 'name'=>'pwd', 'label'=>array('txt'=>'Mot de Passe : ')),
	// une liste : SELECT --> option
	'voiture' => array('type'=>'select', 'name'=>'voiture', 'value'=>5, 'label'=>array('txt'=>'Voiture : '),
		'list' => array(1 => 'Renault', 2=> 'Citroen', 3 => 'Volswagen', 4 => 'Volvo', 5 => 'Fiat', 6 => 'Chevrolet', 7 => 'Toyota')),
	// un SELECT avec des regroupements : optgroup
	'pays' => array('type'=>'select', 'name'=>'pays', 'value'=>'FR', 'label'=>array('txt'=>'Pays : '),
		'list' => array(
			'Europe' => array('FR' => 'France', 'UK' => 'Royaume-Uni', 'ES' => 'Espagne'),
			'Amérique' => array('US' => 'Etats Unis', 'MX' => 'Mexique', 'CA' => 'Canada'))
	),
	// des boutons RADIO
	'sexe' => array('type'=>'radio', 'name'=>'sexe', 'list'=>array('M'=>'Masculin', 'F'=>'Féminin')),
	// une série de 4 boutons CHECKBOX
	'chkVelo' => array('type'=>'checkbox', 'name'=>'vehicule[]', 'label'=>array('txt'=>'J\'ai un vélo : ')),
	'chkMoto' => array('type'=>'checkbox', 'name'=>'vehicule[]', 'label'=>array('txt'=>'J\'ai une moto : ')),
	'chkVoiture' => array('type'=>'checkbox', 'name'=>'vehicule[]', 'label'=>array('txt'=>'J\'ai une voiture : ')),
	'chkCamion' => array('type'=>'checkbox', 'name'=>'vehicule[]', 'label'=>array('txt'=>'J\'ai un camion : ')),
	// une zone de texte libre : TEXTAREA
	'texto' => array('type'=>'textarea', 'name'=>'texto', 'cols'=>60, 'rows'=>4, 'wrap'=>'virtual', 'value'=>''),
	// un bouton simple : déclenche une action javascript sur le ''onclick''
	'button' => array('type' => 'button', 'value' => 'Click Me !', 'onclick' => 'alert(\'Hello World\')'),
	// un bouton SUBMIT pour soumission du formulaire
	'submit' => array('type'=>'submit', 'name'=>'Submit', 'value'=>'Envoyer',
		'label'=>array('txt'=>'Nom et message obligatoires.')),
	// annuler toutes les valeurs du formulaire : RESET
	'reset' => array('type'=>'reset', 'name'=>'Annuler', 'value'=>'Annuler le formulaire'),
	// FIELDSET : regroupe plusieurs champs dans un encadré avec légende, préfixe et suffixe pour chaque champs inclu
	'chkVehicule' => array('type' => 'fieldset', 'legend' => array('txt' => 'Choisir un ou plusieurs Véhicule(s)'), 
		'fields' => array('chkVelo', 'chkCamion', 'chkMoto', 'chkVoiture'), 
		'prefix' => '', 'fldPrefix' => '
  • ', 'fldSuffix' => '
  • ', 'glue' => "
    \n",), 'fildsex' => array('type' => 'fieldset', 'legend' => array('txt' => 'Choisir le Sexe'), 'fields' => array('sexe')), ); $myForm = new form($cond); // form(); $myForm->setDebug(true); if($myForm->validateForm()) { // formulaire OK if (empty($myForm->nom) || empty($myForm->texto)) { // des zones manquantes, msg d'erreur echo '

    il manque un nom ou un message

    '; // on re-injecte les valeurs pour pas avoir à les re-saisir $myForm->setValues($myForm->getValues()); } else { // insérer le msg en bdd avec $myForm->getValues // ou chaque élément $myForm->url $myForm->email etc var_dump($myForm->getValues()); } } else if($myForm->isPosted()) { echo '

    ' . $myForm->getError() . '

    '; } // afficher le formulaire 'en vrac' si le CSS suffit à la mise en forme: echo $myForm; ?>

    Résultat

    Choisir un ou plusieurs Véhicule(s)




    Choisir le Sexe