Saut de ligne dans un formulaire

rimie1
Invité n'ayant pas de compte PHPfrance

14 mai 2011, 09:30

Tu as une variable $Formulaire->enctype donc il suffit de la modifier avec la fonction addInput() lorsque tu ajoutes un input file.
oui c'est vrai, l'idee est de changer la tag form pour que ce soit:

avec file:
                                $this->FormField[] = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" enctype="'.$this->enctype.'">';
sans file:
                                $this->FormField[] = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'">';
enctype ne serait pas dans la tag form

rimie1
Invité n'ayant pas de compte PHPfrance

16 mai 2011, 23:55

y a t il quelqu'un qui a rencontre ce genre de problemes?

ViPHP
xTG
ViPHP | 7331 Messages

17 mai 2011, 08:07

Quel problème ? Celui de l'enctype ? Comme je te l'ai dit il suffit de faire un simple test pour savoir quoi mettre...

rimie1
Invité n'ayant pas de compte PHPfrance

17 mai 2011, 20:36

Quel problème ? Celui de l'enctype ? Comme je te l'ai dit il suffit de faire un simple test pour savoir quoi mettre...
j'ai 3 fonctions: une pour la tag form, l'autre pour les inputs, et la 3eme pour generer le formulaire:
<?php
// 1ere de la tag form
public final function __construct($name, $method='', $action='', $enctype='')
$this->FormField[] = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'">';

// 2eme: inputs
public final function addInput($type, $name='', $value='')

//3eme creation du formulaire
function createForm()
			{
							
				foreach($this->FormField as $k=>$v)
					{
					echo $v;
					}
			}   

?>
si un champs input de type file existe, on doit avoir la tag form avec enctype:
$this->FormField[] = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" enctype="'.$this->enctype.'">';
sinon:
$this->FormField[] = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'">';

ViPHP
xTG
ViPHP | 7331 Messages

18 mai 2011, 08:04

Ta balise form est déjà formée lors de la construction de ton objet, mais tu sais que c'est la première a être formée.
Elle est donc toujours à l'index 0 de ton tableau.

Tu peux donc dans ta fonction de création du formulaire passer en revue les champs et aller modifier le contenu du premier index de ton tableau en fonction si tu trouves une balise d'upload.

rimie1
Invité n'ayant pas de compte PHPfrance

19 mai 2011, 12:27

quelque chose du genre:
function createForm()
			{
			
				foreach($this->FormField as $k=>$v)
					{
						if(preg_match('/type="file"/', $this->FormField[$k]))
						{
							$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" enctype="'.$this->enctype.'">';
						}
						else
						{
							$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'">';
						}
						
						echo $form;
						echo $v;
					}
		
			}   
puisque je fais foreach ca se repond en toute verification du champs, comment puis je l'afficher une seule fois.

merci xTG

ViPHP
xTG
ViPHP | 7331 Messages

19 mai 2011, 13:10

Ton gros souci en fait c'est que tu créés des Strings avec tes méthodes add alors qu'il faudrait créer une structure qui sera ensuite mise en forme dans le createForm().
Mais bon...
Pour ton problème faudrait parcourir une fois le tableau pour placer le enctype et ensuite parcourir une seconde fois le tableau pour générer les champs.

rimie1
Invité n'ayant pas de compte PHPfrance

19 mai 2011, 13:25

Ton gros souci en fait c'est que tu créés des Strings avec tes méthodes add alors qu'il faudrait créer une structure qui sera ensuite mise en forme dans le createForm().
est ce que vous pouvez me donner un exemple.
Pour ton problème faudrait parcourir une fois le tableau pour placer le enctype et ensuite parcourir une seconde fois le tableau pour générer les champs.
cela veut dire que je fois avoir le code en doublon:
foreach($this->FormField as $k=>$v)
					{
// place le enctype
}

foreach($this->FormField as $k=>$v)
					{
// generer les champs
}

ViPHP
xTG
ViPHP | 7331 Messages

19 mai 2011, 13:33

Il n'y a qu'à prendre ton __construct() il fait ceci :
$this->FormField[] = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'">';
Là tu formattes déjà alors que tu ne devrais que stocker des informations.
A savoir plutôt ainsi :
$this->FormField[] = array( 'type' => "form", 'name' => $name, 'method' => $method, 'action' => $action);
Et ainsi tu ne créerais la chaine que dans la fonction createForm().

rimie1
Invité n'ayant pas de compte PHPfrance

19 mai 2011, 17:06

le voila:
public final function __construct($name, $method='', $action='', $enctype='') 
			{
//codes
				
				$this->FormField[] = array( 'type' => "form", 'name' => $name, 'method' => $method, 'action' => $action);
			}

function createForm()
			{
			if(preg_match('/type="file"/', $this->FormField[$k]))
						{
							$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" enctype="'.$this->enctype.'">';				
						}
						else
						{
							$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'">';
						}
						
				echo $form;
				
			foreach($this->FormField as $k=>$v)
			{
				
				echo $v;
			}
si j'ai bien compris, mais ca donne un doublon de la tag form

rimie
Invité n'ayant pas de compte PHPfrance

19 mai 2011, 20:35

enfinnnnnnnnnnnnnnnn RESOLUUUUUUUUUUUUUUUUUUUUUUUUUUUUU:

il me reste celui la: php-debutant/verifier-les-clefs-premier ... 58634.html

Merci xTG

			function createForm()
			{
				
			$creerForm = '';
			foreach($this->FormField as $k=>$v)
			{
				$creerForm .= $v;
			}
			
			if(preg_match('/type="file"/', $creerForm))
						{
							echo 'file exists<br>';
							
							$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" enctype="'.$this->enctype.'" enccccccccccc>';				
						}
						else
						{
							echo 'file do not exists<br>';
							
							$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" nooooooooooo>';
						}
				
						
				echo $form;
				echo $creerForm;