tu peut simplement utiliser des "setter" pour utiliser ces options si besoin est.
tu ne passe dans le constructeur que les éléments "obligatoire" c'est a dire le type et le nom de l'input les autre étant facultatif (value etc) et ainsi avoir une utilisation plus plausible d'une classe qui final ressemble plus a une fonction qu'a une classe. D'ailleur une classe pour écrire <form .. .> et </form> c'est pas forcément utilise, tu peut faire une classe 'formulaire' qui s'occupe de tous, tu aurais juste a ajouter les noms des inputs dans l'instance de la classe et quand tu le souhaite tu affiche le formulaire (genre $f ->display())
exemple
<?php
########### Class des Inputs
class formulaire {
// propriétés de InputField
private $name;
private $value;
private $type;
private $id;
private $class;
private $inputType;
private $action;
private $formMethod;
private $method;
private $error;
private $form;
private $afterinput;
/**
* constructeur
* @param string $action
* @param string $method
*/
public final function __construct($action,$method='post'){
// les types de champs input possible a compléter ;)
$this->inputType =array('submit' ,'text','password','radio','checkbox');
$action = trim($action);
if (!empty($action) && (strlen($action) !== 0)) {
// on peu aussi ajouter un test sur l'existance du fichier ou autre
// le strlen exclu le fait que la balise action peut être vide, il faudra donc utiliser "PHO_SELF"
$this->action= $action ;
}
$this->formMethod = array('post','get');
$method = trim($method);
if ( !empty($method) && in_array($method, $this->formMethod)){
$this->method = $method;
}
//permet d'indiquer ce que l'on met après un input, classique un saut de ligne mais pas forcément ....
$this->afterinput='<br />';
}
/**
* Ajout d'un champs input dans le formulaire, text par défaut car c'est l'un des plus utilisé, valeur discutable !
* @param string $name
* @param string $type
* @return bool
*/
public final function addInput($name,$type='text'){
//Est ce que le type existe dans les type prévu ?
if (!empty($type) && in_array($type, $this->inputType)) {
$name = trim($name);
if (!empty($name)){
$this->name[] = $name;
$this->type[ $name] = $type;
return true;
}
else {
$this->error[] = 'Le champ nom ne peut être vide !';
}
}
else {
$this->error[] = 'Le type de champs '.htmlspecialchars($type). ' n\'existe pas veuillez utiliser l\'une des valeurs suivantes : '.
implode(', ',$this->inputType);
return false;
}
}
/**
* Permet d'ajouter une valeur à un champ, ne prend pas en compte les champs a valeur multiple (radio, checkbox etc)
* @param string $name
* @param string $value
* @return bool
*/
public final function SetValue($name,$value){
if (!empty($name) && in_array($name,$this->name)){
$this->value[ $name ] = trim($value);
return true;
}
else {
$this->error [] = 'Le nom de champ n\'existe pas ! ';
return false;
}
}
public final function SetId($name,$idname){
//
}
public final function SetClass($name,$idname){
//
}
/**
* Génére le formulaire final
* @return <type>
*/
public final function createform(){
if (!empty($this->action) && !empty($this->method)) {
$this->form = '<form action="'.$this->action.'" method="'.$this->method.'">'."\n";
if (is_array($this->name) && count($this->name)>0){
foreach ($this->name as $input){
if (isset($this->id[ $input ])) {
$this->form .= '<label for="'.$this->id[ $input ].'">'.$input.'</label>';
}
else {
// si il n'y a d'id pour ce champ je choisis d'afficher le nom correctement avant avec un span
// sauf dans le cas d'un submit
if ($this->type[$input] !== 'submit') {
$this->form .= '<span>'.$input.'</span>';
}
}
$this->form .= '<input type="'.$this->type[$input].'" name="'.$input.'" ';
// s'il existe une valeur je l'utilise
if (isset($this->value[ $input ])){
$this->form .= 'value="'.$this->value[ $input ].'" ';
}
// s'il existe une classe je l'utilise
if (isset($this->class[ $input ])){
$this->form .= 'value="'.$this->class[ $input ].'" ';
}
// s'il existe un id je l'utilise
if (isset($this->id[ $input ])){
$this->form .= 'value="'.$this->id[ $input ].'" ';
}
$this->form .= '/>'.$this->afterinput."\n";
}
}
else {
$this->error[] = 'Il faut au moins un champ pour un formulaire';
}
$this->form .= '</form>';
}
else {
$this->error[] = 'Il faut indique une actio et une méthode avant affichage !';
return false;
}
}
/**
* Permet de retourner le formulaire construit
* @return string
*/
public final function display(){
if (empty ($this->form)){
$this->createform();
}
return $this->form;
}
/**
* Permet d'afficher les erreurs
* @return string
*/
public final function getError(){
$ret = '';
if ( is_array($this->error) && (count($this->error)>0)){
foreach ($this->error as $erreur){
$ret .= $erreur."\n";
}
return $ret;
}
else {
return 'Aucune erreur tous va bien :)';
}
}
}
?>
et pour utiliser
<?php
var_dump($_POST); // permet de controler le contenu du formulaire pour le test
$formulaire = new formulaire('rimie.php');
$formulaire->addInput('pseudo');
$formulaire->SetValue('pseudo', 'Entrer votre pseudo ici');
$formulaire->SetId('pseudo', 'pseudo');
$formulaire->addInput('pwd','password');
$formulaire->SetId('pwd', 'pwd');
$formulaire->SetValue('pwd', '******');
$formulaire->addInput('Valider','submit');
//$formulaire->createform();
echo $formulaire->display();
?>
j'ai mis createform en commentaire car optionnel vu qu'il est utilisé dans la méthode display. Cette méthode est a appeler si tu modifie un champ de formulaire après la création du formulaire pour le re générer (on ne sait jamais bien sur cette classe n'est pas parfaite, l'utilisation est verbeuse mais est générique. Elle est aussi très incomplète car elle ne gère pas tous les type d'input, pas de gestion particulière des radio ou checkbox qui peuvent ou non être cochée, pas de gestion de la textarea, du type button etc etc
@+