[php5] classe formulaire

Soyez le premier à donner votre avis sur cette source.

Vue 34 805 fois - Téléchargée 2 240 fois

Description

Une petite classe formulaire, avec gestion de tous les éléments et attributs possible liés à un formulaire (y compris legend, label, fieldset).
Utilisation de la méthode magique __toString () pour afficher le formulaire créé.

Source / Exemple :


<?php
class form {

  // propriétés privées : tous les éléments et attributs utilisables (certaines valeurs sont entrées par défaut)
  private $eventArr = array ('onfocus' => '',
                             'onblur' => '',
                             'onselect' => '',
                             'onchange' => '',
                             'onclick' => '',
                             'ondblclick' => '',
                             'onmousedown' => '',
                             'onmouseup' => '',
                             'onmouseover' => '',
                             'onmousemove' => '',
                             'onmouseout' => '',
                             'onkeypress' => '',
                             'onkeydown' => '',
                             'onkeyup' => '');
  private $commonArr = array ('id' => '',
                              'class' => '',
                              'title' => '',
                              'style' => '',
                              'dir' => '',
                              'lang' => '',
                              'xml:lang' => '');
  private $formArr = array (
                   'method' => 'post',
                   'action' => '',
                   'id' => 'mainForm',
                   'enctype' => 'application/x-www-form-urlencoded',
                   'accept' => '',
                   'onsubmit' => '',
                   'onreset' => '',
                   'accept-charset' => 'unknown',
                   'style' => ''
                   );
  private $inputArr = array ('text' => array ('value' => '',
                                              'name' => '',
                                              'alt' => '',
                                              'tabindex' => '',
                                              'accesskey' => '',
                                              'readonly' => '',
                                              'disabled' => '',
                                              'width' => '',
                                              'maxlength' => '',
                                              'size ' => ''),
                             'button' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'disabled' => ''),
                             'hidden' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'disabled' => '',
                                               'size ' => ''),
                             'password' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'readonly' => '',
                                               'disabled' => '',
                                               'width' => '',
                                               'maxlength' => '',
                                               'size ' => ''),
                             'submit' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'disabled' => ''),
                             'checkbox' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'disabled' => '',
                                               'checked' => ''),
                             'radio' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'disabled' => '',
                                               'checked' => '',
                                               'title' => ''),
                             'reset' => array ('name' => '',
                                               'class' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'disabled' => '',
                                               'title' => ''),
                             'file' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'disabled' => '',
                                               'accept' => '',
                                               'size ' => ''),
                             'image' => array ('name' => '',
                                               'value' => '',
                                               'alt' => '',
                                               'tabindex' => '',
                                               'accesskey' => '',
                                               'disabled' => '',
                                               'src' => '',
                                               'usemap' => '',
                                               'ismap' => '')
                             );
  private $fieldsetArr = array ();
  private $pArr = array ();
  private $legendArr = array ();
  private $labelArr = array ('for' => '');
  private $textareaArr = array ('rows' => '',
                                'cols' => '',
                                'disabled' => '',
                                'readonly' => '',
                                'accesskey' => '',
                                'tabindex' => '',
                                'name' => '');
  private $selectArr = array ('disabled' => '',
                              'multiple' => '',
                              'size' => '',
                              'name' => '');
  private $optionArr = array ('disabled' => '',
                              'label' => '',
                              'selected' => '',
                              'value' => '');
  private $optgroupArr = array ('disabled' => '');
  private $formBuffer = array ();
  private $formElementArr = array ();
  private $formAttributeArr = array ();

  //Constructeur
  public function __construct () {

  }

  // débuter effectivement le formulaire
  public function openForm ($arrArgs = array ()) {
     foreach ($this -> formArr as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formAttributeArr[$clef] = $arrArgs[$clef];
      }
      else if (!empty ($val)) {
        $this -> formAttributeArr[$clef] = $val;
      }
    }
    $this -> formBuffer['open'] = '<form ';
    foreach ($this -> formAttributeArr as $clef => $val) {
      $this -> formBuffer['open'] .= $clef.'="'.$val.'" ';
    }
    $this -> formBuffer['open'] .= '>';
  }

  // fermer le formulaire
  public function closeForm () {
    $this -> formBuffer['close'] = '</form>';
  }

  // ajouter un type input
  public function addInput ($elem, $arrArgs = array ()) {
    if (!array_key_exists ($elem, $this -> inputArr)) {
      throw new Exception ($elem.' n\'est pas un élément valide');
    }
    if (!array_key_exists ('name', $arrArgs) && $elem !== 'submit' && $elem !== 'reset') {
      $arrArgs['name'] = 'default';
    }
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt][$elem] = array ();
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> inputArr[$elem]);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
      $this -> formElementArr[$cpt][$elem][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<input type="'.$elem.'" ';
    foreach ($this -> formElementArr[$cpt][$elem] as $clef => $val) {
      $chaineTemp .= $clef.'="'.$val.'" ';
    }
    $chaineTemp .= '/>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ouvrir un fieldset
  public function openFieldset ($arrArgs = array ()) {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['fieldset'] = array ();
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> fieldsetArr);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formElementArr[$cpt]['fieldset'][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<fieldset ';
    foreach ($this -> formElementArr[$cpt]['fieldset'] as $clef => $val) {
      $chaineTemp .= $clef.'="'.$val.'" ';
    }
    $chaineTemp .= '>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // fermer un fieldset
  public function closeFieldset () {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['/fieldset'] = array ();
    $chaineTemp = '</fieldset>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ajouter une légende
  public function addLegend ($legend, $arrArgs = array ()) {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['legend']['innerHTML'] = $legend;
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> legendArr);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formElementArr[$cpt]['legend'][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<legend ';
    foreach ($this -> formElementArr[$cpt]['legend'] as $clef => $val) {
	 if ($clef !== 'innerHTML') {
		$chaineTemp .= $clef.'="'.$val.'" ';
	}
    }
    $chaineTemp .= '>'.$legend.'</legend>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

   // ouvrir une balise p
   public function openP ($arrArgs = array ()) {
     $cpt = count ($this -> formElementArr);
     $this -> formElementArr[$cpt]['p'] = array ();
     $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> pArr);
     foreach ($arrTemp as $clef => $val) {
       if (array_key_exists ($clef, $arrArgs)) {
         $this -> formElementArr[$cpt]['p'][$clef] = $arrArgs[$clef];
       }
     }
     $chaineTemp = '<p ';
     foreach ($this -> formElementArr[$cpt]['p'] as $clef => $val) {
       $chaineTemp .= $clef.'="'.$val.'" ';
     }
     $chaineTemp .= '>';
     $this -> formBuffer['elements'][$cpt] = $chaineTemp;
   }

   // fermer une balise p
   public function closeP () {
     $cpt = count ($this -> formElementArr);
     $this -> formElementArr[$cpt]['/p'] = array ();
     $chaineTemp = '</p>';
     $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ajouter un label
  public function addLabel ($label, $arrArgs = array ()) {
    $cpt = count ($this -> formElementArr);
   $this -> formElementArr[$cpt]['label']['innerHTML'] = $label;
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> labelArr);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formElementArr[$cpt]['label'][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<label ';
    foreach ($this -> formElementArr[$cpt]['label'] as $clef => $val) {
	 if ($clef !== 'innerHTML') {
		$chaineTemp .= $clef.'="'.$val.'" ';
	}
    }
    $chaineTemp .= '>'.$label.'</label>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ajouter un textarea
  public function addTextarea ($txt, $arrArgs = array ()) {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['textarea']['innerHTML'] = $txt;
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> textareaArr);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formElementArr[$cpt]['textarea'][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<textarea ';
    foreach ($this -> formElementArr[$cpt]['textarea'] as $clef => $val) {
	 if ($clef !== 'innerHTML') {
		$chaineTemp .= $clef.'="'.$val.'" ';
	}
    }
    $chaineTemp .= '>'.$txt.'</textarea>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ouvrir un select
  public function openSelect ($arrArgs = array ()) {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['select'] = array ();
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> selectArr);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formElementArr[$cpt]['select'][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<select ';
    foreach ($this -> formElementArr[$cpt]['select'] as $clef => $val) {
      $chaineTemp .= $clef.'="'.$val.'" ';
    }
    $chaineTemp .= '>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // fermer un select
   public function closeSelect () {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['/select'] = array ();
    $chaineTemp = '</select>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ajouter une option
  public function addOption ($txt, $arrArgs = array ()) {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['option']['innerHTML'] = $txt;
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> optionArr);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formElementArr[$cpt]['option'][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<option ';
    foreach ($this -> formElementArr[$cpt]['option'] as $clef => $val) {
	 if ($clef !== 'innerHTML') {
		$chaineTemp .= $clef.'="'.$val.'" ';
	}
    }
    $chaineTemp .= '>'.$txt.'</option>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ouvrir un optgroup
  public function openOptgroup ($label, $arrArgs = array ()) {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['optgroup']['label'] = $label;
    $arrTemp = array_merge ($this -> eventArr, $this -> commonArr, $this -> optgroupArr);
    foreach ($arrTemp as $clef => $val) {
      if (array_key_exists ($clef, $arrArgs)) {
        $this -> formElementArr[$cpt]['select'][$clef] = $arrArgs[$clef];
      }
    }
    $chaineTemp = '<optgroup ';
    foreach ($this -> formElementArr[$cpt]['optgroup'] as $clef => $val) {
      $chaineTemp .= $clef.'="'.$val.'" ';
    }
    $chaineTemp .= '>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // fermer un optgroup
  public function closeOptgroup () {
    $cpt = count ($this -> formElementArr);
    $this -> formElementArr[$cpt]['/optgroup'] = array ();
    $chaineTemp = '</optgroup>';
    $this -> formBuffer['elements'][$cpt] = $chaineTemp;
  }

  // ajouter n'importe quoi
  public function addAnything ($any) {
    $cpt = count ($this -> formElementArr);
    $this -> formBuffer['anything'][$cpt] = $any;
  }

  // méthode magique utilisée pour afficher effectivement le formulaire défini
	public function __toString () {
		$chaineTemp = '';
		if (isset ($this -> formBuffer['open']) && isset ($this -> formBuffer['close'])) {
			$chaineTemp = $this -> formBuffer['open'];
			if (isset ($this -> formBuffer['elements']) && !empty ($this -> formBuffer['elements'])) {
				foreach ($this -> formBuffer['elements'] as $clef => $val) {
					 if (isset ($this -> formBuffer['anything'][$clef])) {
					        $chaineTemp .= $this -> formBuffer['anything'][$clef];
      					}
      					$chaineTemp .= $val;
				}
			}
			$chaineTemp .= $this -> formBuffer['close'];
		}
		return $chaineTemp;
	}

  // méthode pour libérer les ressources et créer un nouveau formulaire (tout formulaire réé auparavant et non affiché sera perdu)
  public function freeForm () {
    $this -> formBuffer = array ();
    $this -> formElementArr = array ();
    $this -> formAttributeArr = array ();
  }

  // destructeur (en attendant mieux...)
  public function __destruct () {
    unset ($this);
  }

  /***************************

      • METHODS FOR DEBUGGING***
                                                      • /
// méthode affichant tous les éléments que contient le formulaire public function showElems () { $chaineTemp = ''; foreach ($this -> formElementArr as $clef => $val) { foreach ($val as $elem => $attrArr) { if (strpos ($elem, '/') !== false) { $chaineTemp .= '<ul><li style="color: blue;">end '.substr ($elem, 1, strlen ($elem)).'</li></ul>'; } else { $chaineTemp .= '<ul><li style="color: blue;">'.$elem.'</li><ul>'; foreach ($attrArr as $attr => $value) { $chaineTemp .= '<li style="color: red;">'.$attr.' = <span style="color: green; font-style: italic;">'.$value.'</span></li>'; } $chaineTemp .= '</ul></ul>'; } } } return $chaineTemp; } // méthode coomptant les éléments que contient le formulaire : total global, et total par élément public function countElems () { foreach ($this -> formElementArr as $clef => $val) { foreach ($val as $elem => $attrArr) { if (strpos ($elem, '/') === false) { $arrTemp[] = $elem; } } } $cptElem = count ($arrTemp); $arrEachElem = array_count_values ($arrTemp); $chaineTemp = '<span style="color: black; font-weight: bold;">Total éléments : <span style="color: red;">'.$cptElem.'</span><br />dont : </span><br />'; ksort ($arrEachElem, SORT_STRING); foreach ($arrEachElem as $elem => $nbr) { $chaineTemp .= '<span style="color: blue; margin-left: 20px;">'.$elem.' : </span><span style="color: red;">'.$nbr.'</span><br />'; } return $chaineTemp; } } // on instancie notre objet $form = new form (); // on crée un 1er formulaire $form -> openForm (array ('action' => '?', 'id' => 'MyForm')); $form -> openFieldset (array ('style' => 'border:1px dotted red; width: 300px;')); $form -> addLegend ('test'); $form -> addInput ('text', array ('id' => 'MyText', 'value' => 'ok', 'test' => 'test')); $form -> addLabel ('label', array ('for' => 'MyText', 'style' => 'margin: 5px;')); $form -> addAnything ('<br /><br />'); $form -> addInput ('button', array ('id' => 'MyButton', 'value' => 'click!', 'test' => 'test')); $form -> closeFieldset (); $form -> closeForm (); echo '<div style="border: 1px solid darkgrey; text-align: center; width: 310px;">'; // on l'affiche echo $form; echo '</div>'; // on compte et affiche ses éléments (debugging only) echo $form -> showElems (); echo $form -> countElems (); // on libère les ressources pour pouvoir créer un 2d formulaire $form -> freeForm (); // on réinitialise un nouveau formulaire // on ouvre effectivement le nouveau formulaire $form -> openForm (array ('action' => '?', 'id' => 'MyForm2')); $form -> openFieldset (array ('style' => 'border:1px dotted blue; width: 300px;')); $form -> addLegend ('test 2'); $form -> addInput ('text', array ('id' => 'MyText2', 'value' => 'yep', 'test' => 'test')); $form -> addInput ('checkbox', array ('id' => 'MyCheck', 'value' => '1', 'test' => 'test')); $form -> addLabel ('Checkbox', array ('for' => 'MyCheck')); $form -> addTextarea ('mon texte', array ('cols' => 20, 'rows' => 10)); $form -> openSelect (); $form -> openOptgroup ('label options 1'); $form -> addOption ('1'); $form -> closeOptgroup (); $form -> openOptgroup ('label options 2'); $form -> addOption ('2'); $form -> addOption ('2_2'); $form -> closeOptgroup (); $form -> closeSelect (); $form -> closeFieldset (); $form -> closeForm (); echo '<div style="border: 1px solid orange; text-align: center; width: 310px;">'; echo $form; echo '</div>'; echo $form -> showElems (); echo $form -> countElems (); $form -> freeForm (); ?>

Conclusion :


C'est juste un début; je m'attèlerai à des ajouts éventuellement si le besoin d'en fait ressentir.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
161
Date d'inscription
jeudi 13 octobre 2005
Statut
Membre
Dernière intervention
12 août 2010

Merci beaucoup pour cette classe trop géniale !!!

Je débute en POO et je n'arrive pas à passer en paramètre la longueur d'un champ text.... Que j'utilise "width" ou "size", le champ reste toujours la même longueur.... Quelqu'un a une idée ?

Merci d'avance. ;)
Messages postés
1
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
17 mars 2010

Bonjour,

je débute en prog POO et je voulais savoir comment déclarer cette class après svp... merci
Messages postés
4
Date d'inscription
jeudi 9 octobre 2003
Statut
Membre
Dernière intervention
8 juillet 2009

Merci, c'est précisément ce que je cherchais afin de mieux comprendre comment créer un formlaire en objet. Ton code semble propre et très lisible, bravo (:
Je ferais part de mes remarques après..
Messages postés
2
Date d'inscription
lundi 29 octobre 2007
Statut
Membre
Dernière intervention
14 janvier 2010

Salut Skydoo,
Pour le 'size' il n'a pas été modifié l'espace est toujours présent (ligne 47). Enfin il me semble que c'était la coquille que j'avais constaté il y'a un an. (Ca date pour moi donc je ne sais plus trop ^^).
Messages postés
16
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
14 janvier 2010

Déjà je tiens à dire : très bonne classe! :)

@MATTINHO : Tiens il a été modifié depuis que je l'ai pris non? parce que moi il n'y avait pas le 'size' j'ai du le rajouter... A moins que je l'auteur l'ai aussi posté sur un autre site (sans le et que je l'ai trouvé ailleurs...

Sinon j'ai fais comme FRANCO_SE pour le problème du addAnything qui était assez problématique et je confirme ça marche !
Afficher les 35 commentaires

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.