begin process at 2010 02 10 16:53:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaires

 > [PHP5] CLASSE FORMULAIRE

[PHP5] CLASSE FORMULAIRE


 Information sur la source

Note :
8,13 / 10 - par 8 personnes
8,13 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaires Classé sous :classe, formulaire, php5, form, tostring Niveau :Initié Date de création :08/12/2005 Date de mise à jour :01/03/2006 13:51:58 Vu / téléchargé :20 321 / 1 409

Auteur : malalam

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

 Description

Cliquez pour voir la capture en taille normale
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

  • <?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 ();
  • ?>
<?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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

08 décembre 2005 13:50:08 :
Petite correction sur $val !== '' ...
08 décembre 2005 14:00:52 :
Rien, rien... ;-)
09 décembre 2005 14:51:35 :
J'avais oublié d'autoriser l'attribut 'name' pour les select et les textarea...génant... !
28 janvier 2006 10:57:23 :
Ajout d'une méthode pour inclure des balises <p></p>. Fonctionne comme les fieldset : on ouvre avec openP () et on ferme avec closeP (). Ce, pour être plus conforme XHTML.
02 février 2006 12:26:04 :
Suppression de l'attribut innerHTML dans le code html (mais je le conserve dans la classe, pour la méthode showElems () )
01 mars 2006 13:52:00 :
Corrections diverses (bugs remontés par Stepibou, merci :-) )

 Sources du même auteur

Source avec Zip ASTUCES/HACK PHP
SQUELETTE DE GESTION DES DROITS
[PHP 5.1] CLASS STRING : NOUVEL EXEMPLE SUR LA SPL
Source avec Zip Source avec une capture [PHP 5.1] PHOTOPHOP (PHPDRAW 2)
Source avec Zip Source avec une capture [PHP5.1] O-LOC : CLASSE ET BACKOFFICE D'INTERNATIONALISATION

 Sources de la même categorie

TESTEUR DE REGEX par hornetbzz
Source avec Zip SE SOUVENIRE D'UN VISITEUR GRACE A UN COOKIE par MoulouD1993
Source avec Zip Source avec une capture CAPTCHA PHP SIMPLE par toutoos
Source avec Zip POSTER, AFFICHER, ... DES NEWS SUR VOTRE SITE par TORA38
CLASS DE CONTRÔLE DE FORMULAIRE par baxterio

 Sources en rapport avec celle ci

CLASSE PAGINATION par darkis
Source avec Zip [POO][PHP5]UN SITE MULTILANGUE VIA XML par destinyfr
Source avec Zip PHP5 MY EXPLORER : AFFICHE L'ARBORESCENCE DE DOSSIERS par ranouf
Source avec une capture GÉNÉRATION/GESTION DE FORMULAIRE VIA FICHIER XML par Garno
CLASSE DE CRÉATION DE FORMULAIRE par spoonisback

Commentaires et avis

Commentaire de FhX le 08/12/2005 13:32:44

Pas mal du tout :)
Y'a juste un truc qui me chagrine :p :
"# if (array_key_exists ($clef, $arrArgs)) {
#         $this -> formAttributeArr[$clef] = $arrArgs[$clef];
#       }
#       else if ($val !== '') {"
elseif ( !empty($val) ) {

C'est tout :)

Par contre, j'aurais bien vu un test dans la méthode open_form() au cas ou le dev aurait oublié de libérer les ressources !

Y'a peut être autre chose mais j'ai pas le temps de tout voir :) Verra ca ce soir =)

Commentaire de malalam le 08/12/2005 13:46:41 administrateur CS

C'est pas bête pour openForm() ouais :-) Mais en fait, je voulais laisser le choix au développeur de recréer le même formulaire (enfin, avec les mêmes éléments) le cas échéant, avec juste des rajouts. Faut voir, je vais peut-être affiner la fonction freeForm () plutôt, pour libérer de manière plus précise.

Et heu...j'ai honte pour le $val !== ''...ne me demande pas pourquoi j'ai écrit ça, aucune idée!
Je modifie déjà ça et vais réflêchir à minimiser le risque d'erreurs.
Moi ce qui me chagrine c'est que la plupart des méthodes reprennent la même structure et que je pourrais sans trop de problème réduire sérieusement la taille de la classe. Mais j'ai peur que ce soit moins clair après lol. Par contre ce sera plus facile à modifier après. Donc je vais voir...

Merci au fait :-)


Commentaire de FhX le 08/12/2005 14:33:35

Aussi, si tu n'utilises pas le constructeur, rien ne sert de le déclarer :)

Commentaire de malalam le 08/12/2005 14:39:19 administrateur CS

C'est au cas où...je trouverai bien un truc à mettre dedans ;-)

Commentaire de johann1 le 09/12/2005 12:09:08

Je tiens à me tenir informé de la bonne suite!
Bonne continuation Malaham

Commentaire de malalam le 09/12/2005 12:32:26 administrateur CS

Merci Johann1.
Tu sais que tu es presque mon homonyme ? moi c'est Johan ;-)

Commentaire de johann1 le 09/12/2005 13:49:06

lol ... Je suis ton homonyme! Mais mon père s'appelait Johann, et j'ai tenu à porter son prénom! Je m'appelle Johan comme toi! ... Le Pirlouis est compris avec l'homme! (Wash and go! lol)

Commentaire de stepibou le 12/12/2005 16:38:22

Bonjour, merci pour cette class qui à l'air bien
construite, ca me permet de mieux comprendre,
comment utiliser et créer des classes.
Un exemple de plus d'utilisation serait peu etre le bienvenu.
Je compte bientot poster une source qui est deja prete,
dans cette source, j'utilise un formulaire mais aussi
un systeme de conservation de formulaire de page en page, avec du javascript(mais bon, le javascript n'est pas fondalement indispensable)

son fonctionnement se raprochera un peu du systeme
utilisé ici : http://www.phpcs.com/code.aspx?ID=29652

Donc , voila, comment creer une class qui permette de faire ca automatiquement?
J'essayerai aussi d'utiliser ta classe pour ma source, une fos que je l'aurrai posté, pour evoluer en POO... au lieu d'utiliser les multiple functions que j'ai.

Est ce que ta classe conserve les données? sinon pourrait-elle le faire?

merci, bonne continuation!

Commentaire de FhX le 28/01/2006 12:38:30

Bon, ca fait grosse classe ca.
Est ce qu'il n'est pas possible de faire ca en plus petites classes ?

Genre :
Une classe formulaire.
Une classe pour les inputs
Une classe pour le reste etc...
Et lier le tout via la classe de formulaire ?

Est-ce possible déja ?? ;)

Commentaire de malalam le 28/01/2006 12:52:35 administrateur CS

Tien j'avais pas vu l'autre question. Donc, Stepibou :
je ne pense pas que ce soit à la classe formulaire de gérer les données qu'on génère au travers elle.
Pour ce qui est de conserver les données, sans js, c'est très simple : cette classe conserve bien le formulaire créé. Si tu veux passer l'objet de page en page, il suffit de le sérialiser. Je pourrais implémenter ça dans la classe, mais je n'en vois pas l'intérêt. Car je ne peux pas savoir ce que l'utilisateur va vouloir faire de cet objet sérialisé : le passer en session, dans un champ input hidden...?

Fhx => ouais, c'est possible, mais là non plus, je n'en vois pas l'intérêt lol. Ce que je vais faire un de ces 4, c'est l'alléger : chaque méthode fonctionne peu ou prou de la même manière. Donc, on peut réduire ça drasiquement. Mais faire plusieurs classe, ça ferait beaucoup d'instanciations différentes pour créer 1 formulaire, je trouve. Enfin chais pas, c'est à réflêchir...

Commentaire de FhX le 28/01/2006 13:13:58

En même temps, ce sont de petits objets. De plus, tu peux te permettre de les dupliquer facilement pour pouvoir modifier 2-3 trucs dedands en fonction de ce que tu veux :)

Mais c'est vrai que ca ferait un peu trop lourd je pense...


Cependant, il y a un truc que tu as oubliés de mettre dans ta classe ! C'est une méthode pour savoir si le formulaire a été soumis !!! :D

Cependant, si tu veux faire une méthode pour la soumission, tu va devoir faire ta classe de mon point de vue car sinon tu va charger trop de trucs pour tester une soumission de formulaire !
Voila je viens de comprendre maintenant pourquoi je viens de faire la remarque du tout objet :p

Imagions ca vite fait (j'ai un peu de temps la =) )
class input {

private $inputArr = array(); // Je passe sur le reste

  function __construct($name, $id, $type) // Y'en a d'autres c'est pour l'exemple rapide.
  
  function parse() // Pour pouvoir renvoyer la version texte de l'objet (ou alors via __ToString mais je préfère pas).

}
Voila un modèle de classe sympatique (et vite fait surtout !) Tu peux même en faire une abstraction en fonction de ce que tu veux en faire !
abstract class input {

abstract public function __construct($name...)
abstract public function Parse();

}

class ZoneTexte extends input {}
class BoutonRadio extends input {}
class TextArea extends input {}

Et comme ca, dans ta classe formulaire du début tu peux relier les objets entre eux de la facon que tu veux en faisant une boucle qui appèle la méthode parse() de chaque objet !
Et ca te permet d'avoir une méthode de test de soumission de formulaire sans tout chargé au préalable :)

Faudrait que je tente ca sur ta classe voir si c'est faisable. Avec la neige aujourd'hui, je vais essayer cette après midi. Dès que j'aurais developpé quelque chose je t'enverrais ca :)

Commentaire de stepibou le 25/02/2006 12:27:00

Bon, vraiment de la balle, cette source, je commence à l'utiliser.
Et oui, une belle classe, faut pas que ce soit juste pour faire joli! ;)
Donc premiere imperssion :
Quand on met rien dans son formulaire , on a erreur :
machin truc is not a array...
En meme temps tu me dira un formulaire vide, ca sert à rien...
Par con,tre un truc plus reelement génant, qui m'a tout de suite marqué : J'ai fais afficher la source html...
Et là tout sur une ligne,
aucun retour à la ligne! il manque à la fin de chaque bloc :
\n..
Voila sinon, pour , l'instant, c nickel. Je vais rajouter les \n, si tu veux je t'enverai mes modifs..
bye

Commentaire de stepibou le 25/02/2006 14:37:43

Bon,
je t'es mis 10 pour contre-balancer le 3 d'un jaloux, qui ne s'est pas rendu compte que le principale etait d'utiliser les classes...
Sinon , il semble qu'il y ai un pbavec la balise p :
pArr n'a pas l'air d'etre defini...
J'ai du mal àsavoir quoi mettre à l'intérieur des variables de fonctions..
a+

Commentaire de malalam le 25/02/2006 20:43:22 administrateur CS

Hello,

merci Stepibou.
Je corrigerai l'erreur en cas de formulaire vide, ça ne fait pas très propre ;-)
Pour ce qui est de la source html, je dois avouer que mon soucis premier n'était pas d'avoir un code proprement présenté, mais plutôt un code valide xhtml.
Tu peux ajouter des \r\n si tu veux oui, lol.
Je vais aussi regarder pour la balise <p>.
Ah ben ouais faut ajouter à la définition des propriétés de la classe un :
private $pArr = array ();

Commentaire de stepibou le 01/03/2006 12:41:33

Salut,

ok ben nichel, ca marche tres bien!
J'ai meme pas pu afficher showelements telement y en avait,
ca a fait bugger mon navigateur dans la hauteur... ;-)
Ouai sinon, juste un truc que j'ai rajouté :
added size in input : hidden, password, text, file.
Sinon, ouai c'est bo niveau w3c pas de soucis.

Un dernier truc :
on peut pas mettre deux addAnything de suite???
ou pas si y a rien derriere... apparement un pb de cpt...

Sinon,
tranquile j'ai pu creer une classe de conservation de formulaire par javascript, En pompant sur le modèle de ta classe. (je pense que c'est un bon, complement, je le posterai bientot!

encore merci, a+.

Commentaire de malalam le 01/03/2006 13:51:12 administrateur CS

Hello,

ok j'ai corrigé :
- si le formulaire est vide, ou si on oublie de l'ouvrir, ou de le fermer, d'ailleurs :-)
- j'ai ajouté l'attribut "size"
- j'ai corrigé le $pArr
- je me suis battu avec le addAnything, je sais d'où vient l'erreur, mais je n'ai pas le temps de corriger de suite ça va prendre un peu plus de temps que prévu.

Commentaire de nunoluciano le 28/05/2006 19:14:13

Un simple example d'utilisation serait le bienvenu avec cette class!

Merci pour l'esprit de partage,

:-)

Commentaire de malalam le 29/05/2006 08:03:28 administrateur CS

hello,

il y en a un. Plusieurs, mêmes, à la fin de la page.
On les voit même ici.

Commentaire de nizouille le 12/07/2006 00:04:31

Hello,

Les remarques de FHX ont elles été prises en compte ? Proposeras-tu une classe pour vérifier les champs des formulaires ? Peux-tu nous dire comment tu réaliserais ça à première vue, avec affichage de l'erreur ?
Où dois-je rajouter les différents \n pour avoir un affichage correct du code html produit ?
Merci pour ce superbe code en tous cas !

Commentaire de malalam le 12/07/2006 11:28:11 administrateur CS

Hello,

1 => non, pas toutes en tous cas. J'ai préféré corriger d'abord les vraies erreurs, avanjt de refondre la classe pour la rendre plus...jolie.
2 => Non. Enfin, pas dans celle-ci en tous cas. Je mettrai peut-être un jour, une classe pour ça, oui. Mais décorrelée de celle-ci. La génération d'un formulaire et son traitement sont deux choses différentes selon moi.
Comment je réaliserais ça ? Eh bien...diffcile à dire. Il faut un traitement par "type", avec des options : par exemple, un traitement pour les chaînes, limités ou non en longueur, avec ou sans borne inférieure et/ou supérieure. Traitement email. Traitement codes postaux. etc...
3 => dans la méthode form::__toString (). Là où tu veux tes retours chariots. Bien que je sois contre... ;-)

et, merci à toi :-)

Commentaire de nizouille le 12/07/2006 15:08:51

- Pourquoi es-tu contre les retours charriot ? Peux-tu me dire comment on inclut ces retours ?
$chaineTemp .= $this -> formBuffer['close'] \n ;

Comme ça ?
- J'ai également trouvé un "bug" ? On ne peut pas ajouter un addAnything juste avant le close du form ...

Commentaire de vega11 le 12/02/2007 15:45:11

Très bon ! on peut donc tout faire en objet ! :D

Commentaire de vega11 le 12/02/2007 15:53:16

dsl pour le doublon mais pour la classe de traitement d'apres ce que j'ai compris de l'objet il faudrait une classe

FormManager par exemple qui traite les informations rentrees dans le formulaire et verifie les champs peu etre selon le type que l'on rentre en se mettant une convention.

Commentaire de adys le 01/06/2007 17:30:09

Salut, je suis tombé sur cette source en cherchant si ce que j'étais en train de faire n'existait pas déjà. Et en fait, pas vraiment.
Le but de ta classe est seulement d'afficher un formulaire d'après ce que j'ai vu, même si je n'ai pas lu tout le code.
Il faudrait que tu ajoutes la vérification des données au cas où le développeur sérialize le formulaire par exemple, et qu'il veut vérifier tel ou tel champ, s'il était obligatoire, s'il fallait un email, des chiffres, un mot de passe, ...
Bref, c'est là-dessus que je bosse, et en fait, c'est ma deuxième version, seulement je ne pense pas toujours à mettre mes codes sources à disposition. La prochaine le sera !
Sinon, très bon boulot quand même hein !

Commentaire de malalam le 01/06/2007 18:19:21 administrateur CS

Hello,

j'ai créé une classe permettant de valider des données.
Je préfère bien séparer les outils, personnellement : je ne pense pas que le formulaire doive imposer  la façon dont on va le traiter. Le formulaire s'affiche, et se soumet, point. C'est une autre outil qui va décider comment traiter les données qu'il reçoit.
Voir ma classe formchecker, sur ce site :-)

Commentaire de vega11 le 02/06/2007 21:12:12

tout à fait d'accord c bcp plus modulable qui plus est...

c'est un peu un modele MVC (modele vue controleur) on sépare toujours le graphisme et le traitement des données :DDD

vrt sympa tes 2 classe ^^

Commentaire de softghost le 16/06/2007 13:28:46

bonjour ;

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\program files\easyphp1-8\www\formulaire-class977\form.cls.php on line 6

je comprend pas cette probleme ..

merci d'avancer

Commentaire de malalam le 18/06/2007 09:22:53 administrateur CS

Hello Softghost,

La classe est en PHP5, et tu es en PHP4 ;-)

Commentaire de franco_se le 09/12/2007 12:40:53

perso, pour le problème de suites de addAnything; j'ai resolu ça avec :
    $this -> formBuffer['anything'][$cpt] .= $any;
au lieu de
    $this -> formBuffer['anything'][$cpt] = $any;

c'est simple, et ça marche ....

Commentaire de Mattinho le 16/01/2009 09:06:18 10/10

Bonjour,
Tout d'abord félicitation a MALALAM pour cet excellent code.
Je débute en PHP objet et je cherchais à créer un formulaire en objet et ce code me fut fort utile.
J'ai rencontré un soucis pour la taille des champs, enfin c'était tout bête, mais au cas ou certains ne comprendraient pas.
En fait un espace c'est glissé dans la déclarations des attributs :
'size ' => ''),
Soit il faut supprimer l'espace en trop soit quand vous crééz votre formulaire il faut rajouter un espace !
Encore merci pour ce très bon code.

Commentaire de Skydoo le 14/01/2010 09:05:12

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 !

Commentaire de Mattinho le 14/01/2010 16:33:37

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 ^^).

Commentaire de Tenetubbies le 09/02/2010 14:32:45 9/10

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..

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

un Form dans un Form [ par stailer ] Salut tout le monde !Donc voila mon problème :J'ai un formulaire qui contient notamment un champ et une liste déroulante.Lorsque je valide 1 de ces ch 2 boutons submit dans le meme form? [ par LaurentKOogar ] Bonjour et bon début de week end à tous,ptit problème==&gt;ya 1 formulaire avec 1 champt text et dans ce formulaire il faudrait 2 boutons submit1 bout pb avec formulaire [ par billy67000 ] Salut, dans mon formulaire je recupere une valeur d'une base de donn&#233;e (MAX(id)): $val = .... mon form est ici &lt;form name="frm_category" act Envoyer un form par mail ! ! ! [ par laubro ] Bonjour,j'ai un formulaire que je voudrais me faire envoyer "par mail", celui-ci contien des champsclassiques : nom prenom adresse......+ 1 case texta Problème inclusion form dans un autre form [ par 2swfan ] Bonjour tout le monde&nbsp; !Voila, je dois faire un formulaire d'ajout de cartes g&#233;ographiques. Dans ce formulaire, l'utilisateur saisit le nom, Problème de tests sur l'envoi d'un formulaire [ par seabird ] Salut a tous , J'ai un petit soucis que je n'arrive pas &#224; r&#233;soudre. En effet j'envois un formulaire par mail qui contient plusieurs champs e Return pour une Classe [ par mandark ] Bonjour &#224; tous et encore merci &#224; tous de l'aide que vous offrez ici (:Voil&#224; j'aimerai savoir comment g&#233;rer les valeurs de retour d [PHP5] Etendre une classe prédéfinie [ par ZuGbEn ] Bonjour !Je débute plus ou moins dans la programmation orientée objet, et je souhaite faire une classe qui, à partir d'un DomNode existant, ajoute des traitement de plusieurs formulaires sur une seule page php [ par arnold002 ] Bonjour à tous,J'ai un formulaire d'inscription relativement long.Actuellement, l'utilisateur remplit ce formulaire et le valide. Le traitement php se redirection [ par kenny18 ] salut,j'ai un gros soucis de redirection.j'ai ma page formulaire.php qui contient un formulaire. Lorsque je clique sur "envoyer", cela va appeler des


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 1,061 sec (3)

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