Saut de ligne dans un formulaire

rimie1
Invité n'ayant pas de compte PHPfrance

07 mai 2011, 09:23

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

ViPHP
xTG
ViPHP | 7331 Messages

07 mai 2011, 09:41

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.

rimie1
Invité n'ayant pas de compte PHPfrance

07 mai 2011, 10:02

merci xTG, malheureusement je n'ai pas compris comment proceder mon code

ViPHP
xTG
ViPHP | 7331 Messages

07 mai 2011, 11:59

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

rimie1
Invité n'ayant pas de compte PHPfrance

08 mai 2011, 02:59

Merci xTG, je vais essayer de la mettre en place

rimie1
Invité n'ayant pas de compte PHPfrance

10 mai 2011, 10:02

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

ViPHP
xTG
ViPHP | 7331 Messages

10 mai 2011, 10:59

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é. ;)

rimie1
Invité n'ayant pas de compte PHPfrance

10 mai 2011, 12:25

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();

?>

ViPHP
xTG
ViPHP | 7331 Messages

10 mai 2011, 14:37

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.

rimie1
Invité n'ayant pas de compte PHPfrance

11 mai 2011, 04:06

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

ViPHP
xTG
ViPHP | 7331 Messages

11 mai 2011, 08:04

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

rimie1
Invité n'ayant pas de compte PHPfrance

12 mai 2011, 04:09

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

ViPHP
xTG
ViPHP | 7331 Messages

12 mai 2011, 08:10

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.

rimie1
Invité n'ayant pas de compte PHPfrance

13 mai 2011, 01:16

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.

ViPHP
xTG
ViPHP | 7331 Messages

13 mai 2011, 08:04

Tu as une variable $Formulaire->enctype donc il suffit de la modifier avec la fonction addInput() lorsque tu ajoutes un input file.