Page 1 sur 2

Saut de ligne dans un formulaire

Posté : 07 mai 2011, 09:23
par rimie1
Bonjour!

J'ai essaye de faire un saut de ligne dans une class de formulaire, les sauts de lignes s'affichent en debut de page:
<?php

class Formulaire {
	
		// fonctions des Inputs
		public final function addInput($type, $name='', $value='', $inputOptions=array()){
			
			
			} // end addInput
		
		// fonction de creation de formulaire	
		function createForm(){
			
			foreach($this->fields as $field)
			{
				$fieldType 	= $field['type'];
				
				
				Switch($fieldType)
				{
					case 'text':
					$form .= '<input type="'.$fieldType.'" value="'.$fieldValue.'">';
					//$form .= '<br />';
					break;
					
					//code
			
				}
				
				
			} // end foreach
			} // end function createForm
			
		
		// fonction de separation des champs
		public final function Separation($separation){
		
		$separationArray = array('<br />');
			
		if(!in_array($this->separation, $separationArray))
		{
				$this->error[] = '<li>"'.$this->separation.'" n existe pas dans separationArray</li>';	
		}
		
		// on  retourne la separation
		$this->separation = $separation;
		
		} // end Separation
		

} // end class

// on affiche le formulaire
$frm1->addInput('text', 'nomText1', 'valTxt', array('id' => 'MyText2', 'class' => 'maClass')); // text

echo $frm1->Separation('<br />');

echo $frm1->createForm();

?>
et le code HTML que je recois:
<br /><form ..><input...>
comment puis je faire afin de mettre des sauts de lignes ou je veux, par exemple:
<input type="text"..>
<br />
<input type="text"..>
<br />
<input type="text"..>
// ici je veux pas le mettre
<input type="file"..>
merci

Re: Saut de ligne dans un formulaire

Posté : 07 mai 2011, 09:41
par xTG
Il faudrait que tu stockes quand tu créés la séparation la clé du tableau du dernier input créé afin de savoir où insérer ta séparation.
Ainsi quand tu appelles la fonction createForm() tu n'auras plus qu'à vérifier après l'affichage de l'élément qu'une séparation ne lui est pas liée.

Re: Saut de ligne dans un formulaire

Posté : 07 mai 2011, 10:02
par rimie1
merci xTG, malheureusement je n'ai pas compris comment proceder mon code

Re: Saut de ligne dans un formulaire

Posté : 07 mai 2011, 11:59
par xTG
addInput() est censée remplir le tableau fields. Donc pour chaque input il y aura une clé associée grâce à ce tableau.
Cette clé est la position en quelque sorte de l'input dans le formulaire.

Exemple banal si tu comprends mieux du code que des mots :
$tab = array( 0 => "field1", 1 => "field2", 2 => "field3");
$elements = array();
// Placer un élément après field2 => index = 1
$elements[1] = "un élément";

// Affichage
foreach($tab as $cle => $field)
{
  echo "$field \n"; // affichage du field
  if( isSet($elements[$cle]) ) // vérification qu'un élément ne lui est pas attribué
    echo "{$elements[$cle]} \n";
}
field1
field2
un élément
field3

Re: Saut de ligne dans un formulaire

Posté : 08 mai 2011, 02:59
par rimie1
Merci xTG, je vais essayer de la mettre en place

Re: Saut de ligne dans un formulaire

Posté : 10 mai 2011, 10:02
par rimie1
si je fais un:

var_dump($this->fields), le resultat est:
NULL
NULL
NULL
NULL
NULL
NULL 
var_dump($field), le resultat est:
array(7) { ["type"]=> string(4) "text" ["name"]=> string(8) "nomText1" ["value"]=> string(6) "valTxt" ["size"]=> int(20) ["maxlength"]=> int(50) ["checked"]=> NULL ["class"]=> string(8) "nomText1" } 
donc ne sont pas des tableaux du genre que vous m'avez ci-cites.

comment faire afin d'avoir un tableau avec des index, pour que 0 soit pour le premier champs, 1 pour le 2eme, ainsi de suite

Re: Saut de ligne dans un formulaire

Posté : 10 mai 2011, 10:59
par xTG
Un var_dump($fields) ne peut contenir des éléments NULL si $field qui est produit à partir de cette variable contient quelque chose...
Il serait bon de nous montrer ton code afin de voir le micmac que tu nous as codé. ;)

Re: Saut de ligne dans un formulaire

Posté : 10 mai 2011, 12:25
par rimie1
voila le micmac :D
<?php
class Formulaire {
    // Toutes les propriétés du formulaire
    private $name;
	private $method; // POST et GET
    private $formMethod = array(); // array (POST et GET)
    private $formEnctype = array(); // array (application/x-www-form-urlencoded, multipart/form-data,text/plain)
    private $formOptions = array();
    private $InputOptions = array();
	private $action;
    private $value;
    private $type; // text, password, button, submit, radio, checkbox 
    private $id;
    private $class;
    private $size;
    private $maxlength;
    private $cols;
    private $rows;
    private $enctype;
    private $error;
    private $optionsTextarea = array();
    private $optionOptions = array();
    private $fields = array();
    private $infos = array();
    private $separation;
    
	
######## On construit le formulaire:
######################################## Form Start #############################
public final function __construct($name, $method='', $action='', $formOptions=array(), $enctype='') { // champ name est obligatoire
			
		// le nom du formulaire:
		$this->name = $name;
		
		// la methode
		# on liste les differentes methodes
		$this->formMethod = array('POST','GET');
		// on supprime l'espace
		$method = trim($method);
		// si la method est vide on met POST par defaut sinon on la laisse
		$method = (empty($method)) ? 'POST' : $method;
		// si la method remplie ne contient pas le tableau formMethod (post, get) on met a defaut post
		$method = (!in_array($method, $this->formMethod)) ? 'POST' : $method;
		// on  retourne la method
		$this->method = $method;
	
		//l'action
        $action = (empty($action)) ? $_SERVER['PHP_SELF'] : $action;
        $this->action = $action;
        
        // formOptions
        $this->formOptions = $formOptions;

		$formOptionsArray = array(
		"autocomplete" => array('on', 'off'), 
		"target" => array('_self', '_blank', '_parent', '_top'), 
		"novalidate" => array("novalidate"),
		"DISABLED" => array(""),
		
		); // DISABLED A SUPPRIMER
		
		$this->formOptionsArray = $formOptionsArray;
		
				$this -> infos ['name'] = $name;
                $this -> infos ['method'] = $method;
                $this -> infos ['action'] = $action;
                //$this -> infos ['formOptions'] = $formOptions;
                $this -> infos ['enctype'] = $enctype;
                

        $formOptions = trim($formOptions);
        
        // enctype
        $formEnctype 	= array('application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain');
        $enctype 		= (empty($enctype)) ? 'application/x-www-form-urlencoded' : $enctype;
        $enctype 		= (!in_array($enctype, $this->formEnctype)) ? 'application/x-www-form-urlencoded' : $enctype;
  
       }
######################################## Form End #############################	

######################################## Inputs Start #############################	
	public final function addInput($type, $name='', $value='', $InputOptions=array()){

		$value 		= (empty($value)) 		? 	$name	: $value;
		$id 		= (empty($id)) 			? 	$name 	: $id;
		$class 		= (empty($class)) 		?	$name 	: $class;
		$size		= (empty($size)) 		? 	20 		: $size;
		$maxlength	= (empty($maxlength)) 	? 	50	 	: $maxlength;
		
		$this->type 		= $type; //type
		$this->name 		= $name; // nom
		$this->value		= $value; // valeur
		$this->InputOptions = $InputOptions; // autres options des inputs
		$this->id 			= $id; // id
		$this->class		= $class; // class
		$this->size			= $size; // size
		$this->maxlength	= $maxlength; // maxi
		$this->Ioptions		= $Ioptions;
		
		$name = trim($name);
		
				
		$this->fields[] = array(
           'type' => $type,
           'name' => $name,
           'value' => $value,
           'size' => $size,
           'maxlength' => $maxlength,
           'checked' => $checked,
           'class' => $class
        );
      
        $InputOptionsArray = array(
		'id' => array(''),
		'class' => array(''),
		'checked' => array('checked'),
		'autocpmplete' => array('on', 'off'),
		); // DISABLED A SUPPRIMER
		
		$this->InputOptionsArray[] = $InputOptionsArray;
		
		$InputOptions = trim($InputOptions);
		
		} // end addInput function
######################################## Inputs End #############################

######################################## Build the Form Start #############################

		function createForm(){
			
			
			
			// on cherche si un input est de type file
			$fileSearch = false;
			foreach($this->fields as $field)
			{
				
				if($field['type'] == 'file')
				{
					$fileSearch = TRUE;
					break;
				}
			
			}
			
			
		
		// on verifie si les autres options de form existent
			$OtherFormOptions = '';
			echo 'this form options: '.var_dump($this->formOptions).'<br>';
			foreach($this->formOptions as $key=>$value)
      			{
       				if(array_key_exists($key, $this->formOptionsArray) === true )
							{
  								if(in_array($value,$this->formOptionsArray[$key]))
  										{
  											$OtherFormOptions .= ' '.$key.'="'.$value.'"';
  										}
  										else
										{
								$this->error[] = '<li>"'.$value.'" n est pas present</li>';
  										}
  
							}
  					else
  							{
  								$this->error[] = '<li>"'.$key.'" n est pas present</li>';
								//return false;
  							}
      			
      			}
      			
      			//$this->InputOptions = array('id' => $id, 'class' => 'o');
			
			// on verifie si les autres options de input existent
			$OtherInputOptions = '';
			echo 'this input options: '.var_dump($this->InputOptions).'<br>';
			
			foreach($this->InputOptions as $kkk=>$vvv)
      			{
      				//echo 'this input: '.$this->InputOptions.'<br>';
      				echo 'key is: '.$kkk.'<br>';
      				echo 'value is: '.$vvv.'<br>';
      				$OtherInputOptions .= $key.$value;
      				echo $OtherInputOptions;
       			}
       			
				      			
			// si on trouve que le type file existe on ajoute l'enctype
			if($fileSearch)
			{
			// je n'ai pas fait d'espace entre action et OtherFormOptions pour ne pas avoir 2 espaces entre les 2
				$form = '<form name="'.$this->infos['name'].'" method="'.$this->infos['method'].'" action="'.$this->infos['action'].'"'.$OtherFormOptions.' enctype="'.$this->infos['enctype'].'">';
			}
			else // sinon on enleve l'enctype
			{
				$form = '<form name="'.$this->infos['name'].'" method="'.$this->infos['method'].'" action="'.$this->infos['action'].'"'.$OtherFormOptions.'>';
			}

			
			foreach($this->fields as $field)
			{
				echo var_dump($field).'<br>';
				//echo var_dump($field['type']).'<br>';
				$fieldType 	= $field['type'];
				$fieldName 	= $field['name'];
				$fieldValue = $field['value'];
				$fieldSize 	= $field['size'];
				$fieldMax 	= $field['maxlength'];
				$fieldClass = $field['class'];
				$fieldId 	= $field['id'];


				//addInput($type, $name='', $value='', $inputOptions=array()
				Switch($fieldType)
				{
					case 'text':
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" '.$OtherInputOptions.' />';  
					break;
					
					case 'password':
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
					break;
					
					case 'submit':
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
					break;
				
					case 'button':
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
					break;
		
					case 'reset':
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
					break;
		
					case 'file':
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" />';
					break;
					
					case 'radio':
							/*if($checked)
							{
					echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" id="'.$id.'" class="'		.$class.'" '.$checked.' />';	
							}
							else
							{
								*/
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
							//}
					break;
					
					case 'checkbox':
							/*if($checked)
							{
					echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" id="'.$id.'" class="'		.$class.'" '.$checked.' />';	
							}
							else
							{
								*/
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
							//}
					break;
		
					case 'hidden':
					$form .= '<input type="'.$fieldType.'" name="'.$fieldName.'" value="'.$fieldValue.'" />';
					break;
										
					default:
					$form .= '<input type="text" value="'.$fieldValue.'">';
					break;
				}
			
			}
			
			return $form;
			
			
			
		} // end createForm
		

######################################## Get any Error Start #############################	
     public final function getError(){
         //$ret = '';
         
         echo '<br>nbre erreur: '.count($this->error).'<br>';
         
		 $ret_err = ''; // ret_err a rien
         foreach($this->error as $erreur)// on loop pour chercher les erreurs
         {
         	
         	$ret_err .= $erreur; // on les recupere
         }
         
         echo '<ul><font color="#FF00EE">';
         echo $ret_err.'<br>'; // on les affiche
         echo '</font></ul>';
         }
######################################## Get any Error End #############################


}// end class formulaire
######################################## Build the Form EnD #############################

######################################## Afficher les champs du formulaire #############################
//name, method, action, formOptions, enctype
//$frm1 = new Formulaire('monForm1', '', '', array('target' => '_self'));

$frm1 = new Formulaire('monForm1', '', '', array('autocomplet' => 'on', 'target' => '_self', 'DISABLED' => '','novalidate' => 'novalidate'));

//$type, $name='', $value='', $InputOptions=array()
$frm1->addInput('text', 'nomText1', 'valTxt', array('id' => 'myID', 'class' => 'myClass')); // text

$frm1->addInput('text', 'nomtext'); // champ text

$frm1->addInput('text', 'nomtext2', '');

$frm1->addInput('file', 'nomFile', 'valeur'); // file upload

$frm1->addInput('text', 'nomtext2', 'valeur'); // parce que je n'ai pas fait un <br> apres ce champs en create form'

$frm1->addInput('radio', 'nomtext2', 'valeur'); // parce que je n'ai pas fait un <br> apres ce champs en create form'

echo $frm1->createForm();
echo $frm1->getError();

?>

Re: Saut de ligne dans un formulaire

Posté : 10 mai 2011, 14:37
par xTG
Je vois pas les deux var_dump() dans ton code, seulement le second. :)

Toujours est-il que tu as la structure qu'il faut. C'est juste qu'au lieu de "field1" tu as un array.
Cela ne change rien puisque ce qui nous intéresse c'est l'index et non le contenu du field.

Re: Saut de ligne dans un formulaire

Posté : 11 mai 2011, 04:06
par rimie1
foreach($this->fields as $field)
                        {
                                var_dump($field).'<br>';
                                var_dump($this->fields).'<br>';
                                var_dump($this->fields['type']).'<br>';
                                
                                //echo var_dump($field['type']).'<br>';
                                $fieldType      = $field['type'];
                                $fieldName      = $field['name'];
                                $fieldValue = $field['value'];
                                $fieldSize      = $field['size'];
                                $fieldMax       = $field['maxlength'];
                                $fieldClass = $field['class'];
                                $fieldId        = $field['id'];
si la structure n'est pas bonne, je peux la changer, je cherche toujours a optimiser mon code

Re: Saut de ligne dans un formulaire

Posté : 11 mai 2011, 08:04
par xTG
Puisque je te dis que la structure nous importe peu... On se fiche du contenu de l'array, ce qu'on veut c'est l'index du dernier élément.
Relis mon code à tête reposée car visiblement tu n'as rien compris de ce que je t'ai proposé.

Re: Saut de ligne dans un formulaire

Posté : 12 mai 2011, 04:09
par rimie1
Puisque je te dis que la structure nous importe peu... On se fiche du contenu de l'array, ce qu'on veut c'est l'index du dernier élément.
Relis mon code à tête reposée car visiblement tu n'as rien compris de ce que je t'ai proposé.
je sais qu'il est mal structure, c'est pour cela on ne recupere pas l'index, je cherche a avoir un formulaire, que je peux:

+ Ajouter des champs comme je veux et la quantite que je veux,
+ Les alimenter comme je veux, pas obligatoirement qu'il portent tous des id, class,...
+ Structurer le formulaire comme je veyx.

par exemple:
<form name='nomForm' method='POST' action='' enctype=''>
Label1: <input type='text' name='a1' class="c1"><br>
Label2: <input type='text' name='a2' value='valeur2'><span></span>
Label3: <input type='password' name='p1'><br>
Label4: <input type='file' name='f1'><br>
voila, des champs avec BR, des champs avec SPAN, des champs comportants des CLASS,...

je peux jouer comme je veux avec le formulaire

Merci

Re: Saut de ligne dans un formulaire

Posté : 12 mai 2011, 08:10
par xTG
Beh dans ce cas si tu veux varier autant pourquoi ne pas les implémenter comme tu le fais pour les inputs ? Ce sont des "fields" du formulaire.
Concernant la class ce n'est qu'une option d'un field, donc facile à implémenter.

Re: Saut de ligne dans un formulaire

Posté : 13 mai 2011, 01:16
par rimie1
voila, le saut de ligne c'est fait, ca marche comme je le veux:
<?php
class Formulaire {
    // Toutes les propriétés du formulaire
    
######################################## Form Start ###############################
		public final function __construct($name, $method='', $action='', $enctype='') 
			{
				$this->name 	= $name;
				$this->method 	= $method;
				$this->action 	= $action;
				$this->enctype 	= $enctype;			
				
				$this->FormField[] = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" enctype="'.$this->enctype.'">';
				
				
			}
		
######################################## Inputs Start #############################	
		public final function addInput($type, $name='', $value='')
			{
				$this->type		= $type;
				$this->name  	= $name;
				$this->value 	= $value;
				
				Switch($this->type)
				{
					case 'text':
					$this->FormField[] .= '<input type="'.$this->type.'" value="'.$this->value.'">';
					break;
					
					case 'password':
					$this->FormField[] .= '<input type="'.$this->type.'" value="valPass">';
					break;
					
					
					case 'file':
					$this->FormField[] .= '<input type="'.$this->type.'">';
					break;
				
			} // EnD Switch
			} // EnD Function



			public final function addTextarea($name)
				{
					$this->FormField[] .= '<textarea name="'.$name.'" cols="20" rows="5">okokok</textarea>';	
				}
				
				
				
	
######################################## Seperation Start #############################
	// separation des champs
	public function Separation()
    {
       $this->FormField[] .= "<br />";
    }
######################################## Seperation End #############################
    
######################################## Inputs Start #############################
			
			function createForm()
			{
							
				foreach($this->FormField as $k=>$v)
					{
					echo $v;
					}
			}   
	
} // EnD class

$frm = new Formulaire('formName', 'met', 'act', 'enc');
$frm->addInput('text', 'nom1', 'valeur1');
$frm->addInput('text', 'nom2', 'valeur2');
$frm->Separation();
$frm->addInput('file', 'nom2', 'valeur2');
$frm->Separation();
$frm->addTextarea('', '', '');
$frm->Separation();
$frm->addInput('text', 'nom3', 'valeur3');
echo $frm->createForm();

?>
le seul soucis c'est de verifier si un input de type file existe pour que la form comporte l'attribut enctype, sinon on ne l'ajoute pas.

Re: Saut de ligne dans un formulaire

Posté : 13 mai 2011, 08:04
par xTG
Tu as une variable $Formulaire->enctype donc il suffit de la modifier avec la fonction addInput() lorsque tu ajoutes un input file.