Classe de création de formulaire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 188 fois - Téléchargée 20 fois

Contenu du snippet

j'ai créer cette classe (PHP 5 ?) pour générer des formulaires plus simplement. J'attend les admin CS pour me tuer, et surtout pour me dire ce qui ne vas pas (sauf si la liste est trop longue ^^)

Source / Exemple :


<?php

	class formulaire
	{
		var $titre;
		
		function __construct($style_tableau,$action,$titre='',$nom='',$onsubmit='',$classe_bouton,$champs,$classe_libele,$champs_obligatoire,$classe_libele_obligatoire)
		{
			$this->conteneur = array();
			$this->nb_composants = 0;
			
			$this->bouton = $classe_bouton;
			$this->champs = $champs;
			$this->libele = $classe_libele;
			$this->champs_obligatoire = $champs_obligatoire;
			$this->libele_obligatoire = $classe_libele_obligatoire;
			
			/*---	Compteur pour la génération automatique du traitement	---*/
			$this->compteur_text = 0;
			$this->valeurs_text = array();
			$this->compteur_pass = 0;
			$this->valeurs_pass = array();
			$this->compteur_photo = 0;
			$this->valeurs_photo = array();
			$this->compteur_files = 0;
			$this->valeurs_files = array();
			$this->compteur_hidden = 0;
			$this->valeurs_hidden = array();
			$this->compteur_check = 0;
			$this->valeurs_check = array();
			$this->compteur_radio = 0;
			$this->valeurs_radio = array();
			$this->compteur_textarea = 0;
			$this->valeurs_textarea = array();
			$this->compteur_select = 0;
			$this->valeurs_select = array();
			$this->compteur_captcha = 0;
			$this->valeurs_captcha = array();
			
			/*---	Création du formulaire	---*/
			$this->conteneur[] = '<form action="'.$action.'" name="'.$nom.'" onSubmit="'.$onsubmit.'" method="post" enctype="multipart/form-data">'."\n";
			if(!empty($titre))
				$this->conteneur[] = "\t".$titre."\n";
			$this->conteneur[] = "\t".'<table style="'.$style_tableau.'">'."\n";
			if(sizeof($this->conteneur) === 0)
				throw new Exception('Erreur lors de la création du formulaire : aucune donnée n\'as été créer dans le conteneur.');
			return $this->conteneur;
		}
		
		private function creer_libele($lib,$obl)
		{
			if($obl == true)
				$tempo = "\t\t".'<tr><td align="right"><label class="'.$this->libele_obligatoire.'">'.$lib.' : </label></td>';
			else
				$tempo = "\t\t".'<tr><td align="right"><label class="'.$this->libele.'">'.$lib.' : </label></td>';
			
			if(!isset($tempo) || empty($tempo))
				throw new Exception('Erreur lors de la création du liblelé "'.$lib.'".');
			return $tempo;
		}
		
		private function calculer_param($type,$lib)
		{
			switch($type)
			{
				case 0:
					$this->compteur_text++;
					$this->valeurs_text[] = $lib;
				break;
				case 1:
					$this->compteur_pass++;
					$this->valeurs_pass[] = $lib;
				break;
				case 2:
					$this->compteur_photo++;
					$this->valeurs_photo[] = $lib;
				break;
				case 3:
					$this->compteur_files++;
					$this->valeurs_files[] = $lib;			
				break;
				case 4:
					$this->compteur_hidden++;
					$this->valeurs_hidden = $lib;
				break;
				case 5:
					$this->compteur_check++;
					$this->valeurs_check[] = $lib;
				break;
				case 6:
					$this->compteur_radio++;
					$this->valeurs_radio[] = $lib;
				break;
				case 7:
					$this->compteur_select++;
					$this->valeurs_select[] = $lib;
				break;
				case 8:
					$this->compteur_captcha++;
					$this->valeurs_captcha[] = $lib;
				break;
				case 9:
					$this->compteur_textarea++;
					$this->valeurs_textarea[] = $lib;
				break;
			}
		}
		
		public function text($libele,$nom,$obl=false,$value='',$max=255)
		{
			formulaire::calculer_param(0,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				if($obl == false)
					$this->conteneur[] = '<td align="left"><input type="text" name="'.$nom.'" maxlenght="'.$max.'" value="'.$value.'" class="'.$this->champs.'" /></td></tr>'."\n";
				else
					$this->conteneur[] = '<td align="left"><input type="text" name="'.$nom.'" maxlenght="'.$max.'" value="'.$value.'" class="'.$this->champs_obligatoire.'" /></td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs texte "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function password($libele,$nom,$obl=false,$max="255")
		{
			formulaire::calculer_param(1,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				if($obl === false)
					$this->conteneur[] = '<td align="left"><input type="password" name="'.$nom.'" maxlenght="'.$max.'" class="'.$this->champs.'" /></td></tr>'."\n";
				else
					$this->conteneur[] = '<td align="left"><input type="password" name="'.$nom.'" maxlenght="'.$max.'" class="'.$this->champs_obligatoire.'" /></td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs password "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function photo($libele,$nom,$obl=false)
		{
			formulaire::calculer_param(2,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				if($obl === 0)
					$this->conteneur[] = '<td align="left"><input type="file" name="'.$nom.'" class="'.$this->champs.'" /></td></tr>'."\n";
				else
					$this->conteneur[] = '<td align="left"><input type="file" name="'.$nom.'" class="'.$this->champs_obligatoire.'" /></td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs photo "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function fichier($libele,$nom,$obl=false)
		{
			formulaire::calculer_param(3,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				if($obl === 0)
					$this->conteneur[] = '<td align="left"><input type="file" name="'.$nom.'" class="'.$this->champs.'" /></td></tr>'."\n";
				else
					$this->conteneur[] = '<td align="left"><input type="file" name="'.$nom.'" class="'.$this->champs_obligatoire.'" /></td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs fichier "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function hidden($libele,$nom,$value)
		{
			formulaire::calculer_param(4,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = "\t\t".'<tr><td colspan="2"><input type="hidden" name="'.$nom.'" value="'.$value.'" /></td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs caché "'.$nom.'".');
			return $this->conteneur;
		}		
		
		public function check($libele,$nom,$tableau,$obl=false)
		{
			formulaire::calculer_param(5,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				$this->conteneur[] = '<td align="left">';
				foreach($tableau as $cle => $value)
				{
					$this->conteneur[] = '<input type="checkbox" value="1" name="'.$nom.'_'.$cle.'" />'.$value.' ';
				}
				$this->conteneur[] = '</td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs checkbox "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function check_cu($libele,$nom,$tableau,$selection,$obl=false)
		{
			formulaire::calculer_param(5,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				$this->conteneur[] = "\t\t".'<td align="left">';
				foreach($tableau as $cle => $value)
				{
					if(in_array($cle,$selection))
						$this->conteneur[] = '<input type="checkbox" value="1" checked="checked" name="'.$nom.'_'.$cle.'" />'.$value.' ';
					else
						$this->conteneur[] = '<input type="checkbox" value="1" name="'.$nom.'_'.$cle.'" />'.$value.' ';
				}
				$this->conteneur[] = '</td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs checkbox "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function radio($libele,$nom,$tableau,$obl=false)
		{
			formulaire::calculer_param(6,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				$this->conteneur[]= '<td align="left">';
				foreach($tableau as $cle => $value)
				{
					$this->conteneur[] = '<input type="radio" value="'.$cle.'" name="'.$nom.'" />'.$value.' ';
				}
				$this->conteneur[] = '</td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs radio "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function radio_cu($libele,$nom,$tableau,$search,$obl=false)
		{
			formulaire::calculer_param(6,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				$this->conteneur[]= '<td align="left">';
				foreach($tableau as $cle => $value)
				{	
					if($search == $cle)
						$this->conteneur[] = '<input type="radio" checked="checked" value="'.$cle.'" name="'.$nom.'" />'.$value.' ';
					else
						$this->conteneur[] = '<input type="radio" value="'.$cle.'" name="'.$nom.'" />'.$value.' ';
				}
				$this->conteneur[] = '</td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs radio "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function select($libele,$nom,$tableau,$obl=false)
		{
			formulaire::calculer_param(7,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,$obl);
				$this->conteneur[]= '<td align="left">';
				$this->conteneur[] = '<select name="'.$nom.'">'."\n";
				foreach($tableau as $cle => $value)
					$this->conteneur[] = "\t\t\t".'<option value="'.$cle.'">'.$value.'</option>'."\n";
			$this->conteneur[] = '</select></td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs select "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function select_cu($libele,$nom,$tableau,$search)
		{
			formulaire::calculer_param(7,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,0);
				$this->conteneur[]= '<td align="left">';
				$this->conteneur[] = '<select name="'.$nom.'">'."\n";
				foreach($tableau as $cle => $value)
				{
					if($cle == $search)
						$this->conteneur[] = "\t\t\t".'<option selected="selected" value="'.$cle.'">'.$value.'</option>'."\n";
					else
						$this->conteneur[] = "\t\t\t".'<option value="'.$cle.'">'.$value.'</option>'."\n";
				}
				$this->conteneur[] = '</select></td></tr>'."\n";				
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs select "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function captcha($nom)
		{
			formulaire::calculer_param(8,$nom);
			$this->conteneur[] = '<tr>'."\n";
			$this->conteneur[] = '<td align="left">';
			$this->conteneur[] = '<label class="'.$this->classe_libele_obligatoire.'"><img src="Captcha/validation.php" border="0" /></label></td>'."\n";
			$this->conteneur[] = '<td align="left"><input class="'.$this->champs_obligatoire.'" type="text" name="'.$nom.'" /></td>'."\n";
			$this->conteneur[] = '</tr>'."\n\n";
		}
		
		public function textarea($libele,$nom,$value='',$cols=25,$rows=5)
		{
			formulaire::calculer_param(9,$nom);
			$taille_deb = sizeof($this->conteneur);
				$this->conteneur[] = formulaire::creer_libele($libele,0);
				$this->conteneur[]= '<td align="left"><textarea class="'.$this->champs.'" name="'.$nom.'" cols="'.$cols.'" rows="'.$rows.'">'.$value.'</textarea></td></tr>'."\n";
			$taille_fin = sizeof($this->conteneur);
			if($taille_fin <= $taille_deb)
				throw new Exception('Erreur lors de la création du champs select "'.$libele.'" ('.$nom.').');
			return $this->conteneur;
		}
		
		public function vide($content)
		{
			$this->conteneur[] = $content;
			return $this->conteneur;
		}
		
		public function fckeditor($label,$contenu='',$nom="message",$width="100%",$height="300",$toolbar='Default')
		{
			include_once("fckeditor/fckeditor.php");
			$editeur = new FCKeditor($nom);
			$editeur->BasePath='fckeditor/';
			$editeur->Value = $contenu;
			$editeur->ToolbarSet=$toolbar;
			$editeur->Width  = $width;
			$editeur->Height = $height;
			$this->conteneur[] = '<tr><td align="center" colspan="2">'.$label.'</td></tr><tr><td align="center" colspan="2">'.$editeur->Create().'</td></tr>';
			return $this->conteneur;
		}
		
		public function afficher($text,$reset=false)
		{
			if($reset == true)
				$this->conteneur[] = '<tr><td align="center" colspan="2"><input type="reset" value="RAZ" class="'.$this->bouton.'" /><input type="submit" value="'.$text.'" class="'.$this->boutons.'" /></td></tr>';
			else							  
				$this->conteneur[] = '<tr><td align="center" colspan="2"><input type="submit" value="'.$text.'" class="'.$this->bouton.'" /></td></tr>';	
			
			$this->conteneur[] = '</table></form>';
			foreach($this->conteneur as $cle => $value)
				echo $value;
		}
		
		function __destruct()
		{
			unset($this->conteneur);
		}
		
	}

?>

A voir également

Ajouter un commentaire

Commentaires

cs_spoonisback
Messages postés
72
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
5 février 2010
-
Bonjour et merci
Je vais implanter ce système de classe héritée comme tu le dit. Mais malheureusement, je ne peux développer de classe en PHP 5 que pour le plaisir, la boite ou je bosse n'utilise que le PHP4, donc coté héritage, je ne sai spas si ca vas fonctionner.
Pour le comptage des élément, c'était dans l'intention de faire une autre classe, qui me permettrai a partir du nombre d'élément de tel ou tel type, et leur nom, de les traiter automatiquement, d'ou la séparation des méthodes file et photo...
Mais bon j'y suis pas encore. Je vais essayer de réfléchir pour les classes étendue pour la création des éléments, mais pour la "décoration" et surtout le stylage (virer le tableau), je ne vois pas par ou commencer

Bonne journée à tous CS
cs_garfield90
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009
-
- Tu meles de la presentation et traitement (la gestion par tableau n'est pas nécessaire, voir a ne pas faire).

Tu aurais pu faire de l'heritage avec une classe FormElement qui contient permettrai de gerer un input (text, hidden ou autre), un select, textarea, etc.

Les traitements sur le FormElement sont quasi les memes, association d'un label, d'attribut(id, class, name, etc.), une valeur. Il pourrait y avoir une liste des attribut autorisé.

J'aurai fait un truc du genre

Classe Form => ensemble de FormElement
Classe FormElement
Classe FormInput (étendant FormElement)
Classe FormText (étendant FormInput)
Classe FormTextarea (étendant FormElement)
...

- Sur ce, tu pourrais implementer un décorateur permettant de t'occuper de la présentation (sous forme de tableau, de liste, de definition, etc...)
- Tu pourrais aussi implementer un systeme de vérification des valeurs au moment de la validation du formulaire

Ce ne sont que des pistes, par contre, je ne vois pas l'interet de compter les elements par type.

je vois pas pourquoi la fonction vide s'appele comme ca, a la rigueur un appendContent(ajout_contenu) me semble plus correct et plus compréhensible.

My 2 cents

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.

Du même auteur (cs_spoonisback)