Créer un formulaire dynamique

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Créer un formulaire dynamique

Re: Créer un formulaire dynamique

par GiorgioLino » 10 mai 2011, 21:40

en remplaçant à chaque fois 'valeur' par le nom de mon champ?
C'est cela.
C'est un peu long si on a beaucoup de champs dans notre table non?
Et tu voudrais faire comment autrement ? On n'a rien sans rien mon ami.

Re: Créer un formulaire dynamique

par rafiki14 » 10 mai 2011, 14:57

ok en faite je doit copier la ligne (qui est à l'intérieur du while):

Code : Tout sélectionner

$form .= '<input name="Name[]" type="text" value="'.$row['valeur'].'"><BR />'."\n";
en remplaçant à chaque fois 'valeur' par le nom de mon champ?
C'est un peu long si on a beaucoup de champs dans notre table non?

Merci pour la réponse!!

Re: Créer un formulaire dynamique

par GiorgioLino » 10 mai 2011, 12:54

Bonjour,

'valeur' est le nom d'un champ requêté par...la requête.

Exemple:
Soit une table liste avec (entre autres) les champs nom et prénom et comportant 2 enregistrements.
la requête "SELECT nom, prenom FROM liste" renverra les nom et prenom pour les 2 enregistrements.

Ainsi pour les récupérer, tu auras le choix :
- $row['nom'] et $row['prenom'] si tu as utilisé un mysql_fetch_assoc
ou
- $row->nom et $row->prenom si tu as utilisé un mysql_fetch_object

Tu comprends le principe ?

Re: Créer un formulaire dynamique

par rafiki14 » 10 mai 2011, 10:17

Bonjour à tous,

J'ai essayé votre code avec la boucle while mais je ne comprend pas ce qu'il faut mettre dans les crochets de $row à la place du mot 'valeur' dans $row['valeur']?
Je suis débutant en php !
Merci d'avance pour votre aide.
:oops:

Re: Créer un formulaire dynamique

par lacfab » 07 mai 2011, 00:19

Waou waou waou on se calme là !!! MDR

Bon merci je me doutais que les array me tomberaient sur la tête un jour !
Je tente ma chance et je reviens pleurnicher si nécessaire :o)

Merci à vous tous en attendant.

@ GiorgioLino : merci pour la culture mais ça fait beaucoup pour cette fois ci ^^ Je suis néanmoins ébahi devant ce que tu m'as présenté. Je met ça de côté pour le regarder à tête reposée.

Re: Créer un formulaire dynamique

par dunbar » 06 mai 2011, 16:32

Faut le faire à fond alors :)
// Création de l'élément form
 $form = new html_element('form');
 $form->set('name','');
 $form->set('action','');
 $form->set('method','post');
 
// Insertion des input à l'intérieur de l'élément form
 while($row = mysql_fetch_objet($req))
 {
 $input = new html_element('input');
 $input->set('name','Name[]');
 $input->set('type','text');
 $input->set('value',$row->valeur);
 $form->inject($input);
 }
 
// Affichage du html généré
 $form->output();

Re: Créer un formulaire dynamique

par GiorgioLino » 06 mai 2011, 00:28

Bonjour,

sans remettre en cause ce qui a été dit plus haut.
Je propose également une solution (si tu n'es pas allergique au php orienté objet). Cette solution se base sur la classe html_element implémentée par David Walsh (et accessoirement très concise) cf. http://davidwalsh.name/create-html-elem ... ment-class

ça ne t'affranchira pas de boucles et autres structure algorithmiques mais je pense que ton code pourrait gagner en sémantique (oui je sais, ça ne fait pas partie de ton cahier des charges mais bon).

Exemple.
[php]
$form = '<form name="" action="" method="post">'."\n";

while($row = mysql_fetch_assoc($req))
{
$form .= '<input name="Name[]" type="text" value="'.$row['valeur'].'"><BR />'."\n";
}

$form .= '</form>'."\n";[/php]

deviendrait

[php]// Création de l'élément form
$form = new html_element('form');
$form->set('name','');
$form->set('action','');
$form->set('method','post');

// Insertion des input à l'intérieur de l'élément form
while($row = mysql_fetch_assoc($req))
{
$input = new html_element('input');
$input->set('name','Name[]');
$input->set('type','text');
$input->set('value',$row['valeur']);
$form->inject($input);
}

// Affichage du html généré
$form->output();[/php]

C'est certes plus long à écrire mais c'est une autre façon de voir la vie.

Bon courage.

Re: Créer un formulaire dynamique

par dunbar » 05 mai 2011, 20:32

Bonjour,

J'ai quelques réticence à Name[] et je préfère Name[1], Name[2] de peur d'un mélange entre les éléments d'un tableau.
Cela ne changera rien il affichera toujours le même tableau de 0 à x et cela même si tu fait Name[1]

Exemple a Name[]
Array
(
    [Name] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => 
            [6] => 
            [7] => 
            [8] => 
            [9] => 
        )

)


Et avec Name[1], [2] etc...
Array
(
    [Name] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => 
            [6] => 
            [7] => 
            [8] => 
            [9] => 
        )

)

Car avec des elements entre crochet php assigne toujours 0 et incrémente les indices suivant :)

Re: Créer un formulaire dynamique

par Mazarini » 05 mai 2011, 19:55

Bonjour,

J'ai quelques réticence à Name[] et je préfère Name[1], Name[2] de peur d'un mélange entre les éléments d'un tableau.

Re: Créer un formulaire dynamique

par dunbar » 05 mai 2011, 19:47

Salut,

Tu crée tes input dans une boucle (WHILE) par exemple

Exemple :
$sql = " SELECT * FROM table ";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

$form = '<form name="" action="" method="post">'."\n";

while($row = mysql_fetch_assoc($req))
{
 	 $form .= '<input name="Name[]" type="text" value="'.$row['valeur'].'"><BR />'."\n";
}

$form .= '</form>'."\n";

echo $form;

Re: Créer un formulaire dynamique

par Mazarini » 05 mai 2011, 08:25

Bonjour,

Sur le principe, il faut utiliser des tableaux dans les input :
<input type="text"> name="nom[1]" value="azerty">

Ainsi tu crées les inputs dans une boucle selon le nombre nécessaire.

Pour les récupérés, tu utilises $_POST['nom'][1] et ainsi de suite.

Re: Créer un formulaire dynamique

par lacfab » 05 mai 2011, 08:04

Ah ... euh ...

Disons que je veux faire un formulaire de modification de mes champs, mais leur nombre varie. Il faut donc créer un formulaire dynamique qui se construit tout seul (<input type=text etc)

Exemple :
Sur le dossier A j'ai 4 elements
Sur le dossier B j'ai 13 elements

Pour le colis 1 du dossier A j'aurai donc 4 champs input
Pour le colis 1 du dossier B j'aurai donc 13 champs input

Re: Créer un formulaire dynamique

par devlop78 » 05 mai 2011, 01:43

C'est pas clair du tout :?

Créer un formulaire dynamique

par lacfab » 04 mai 2011, 23:47

Bonjour à tous,

Voilà mon problème :
Je veux gérer la répartition de colis pour les dossiers de mon entreprise.
Pour chaque dossier, il y a un nombre X de colis.
Pour chaque dossier, on crée des éléments (le nombre varie pour chaque dossier)
Pour chaque colis, on doit attribuer une quantité sur chaque élément qui composent le dossier.

Donc à ce stade on a les tables DOSSIERS, ELEMENTS et COLIS



Je veux pouvoir cliquer sur "modifier le colis" dans ma liste de colis, et y trouver la liste des éléments (qui composent ce dossier) avec un champ texte pour y insérer une quantité.

Une table REPARTITION vient donc s'ajouter, contenant l'id des tables DOSSIERS, ELEMENTS et COLIS + un champ "quantite"
Quand on arrive sur la page de modification des colis, on vérifie si les champs existent pour ce colis, si ce n'est pas le cas un insert ajoute la ligne correspondant à l'élément manquant, pour ce colis (car un élément peut être ajouté en cours de remplissage de ma liste, il faut donc vérifier à chaque fois qu'on modifie une quantité que chaque élément est créé dans la table REPARTITION, et l'y ajouter si ce n'est pas le cas).
Jusque ce point, mon script fonctionne.

Ma question est : Comment faire pour générer la liste des éléments sur la page de modification, et surtout de traiter les infos envoyées par le formulaire ? Faut-il utiliser les array et de quelle façon ?
Actuellement j'ai un while qui me créé des inputs, ça marche impeccable, c'est le traitement qui merde, je n'arrive pas à updater mes valeurs.

Help !