2012-06-19 6 views
0

J'ai une classe PHP qui a 8 propriétés et un formulaire HTML qui ont 40 (8 * 5) zones de texte, 8 par objet, de sorte qu'un utilisateur peut entrer des données pour 5 objets à la fois .PHP Formulaire de traitement avec seulement les champs remplis

Pour chaque ensemble de boîtes, je veux créer un objet de la classe et l'enregistrer dans ma base de données. Si l'utilisateur a par exemple rempli 10 cases (deux ensembles), deux objets doivent être créés et sauvegardés.

+3

Alors, quelle est votre question? [Qu'avez-vous essayé?] (Http://www.whathaveyoutried.com/) –

+3

Ne mettez-vous pas des contrôles sur votre formulaire qui détermine combien de champs sont remplis ... Aussi, pourquoi tant de champs. Montrez seulement 5 champs au début et donnez un bouton "Ajouter un autre utilisateur", ce qui crée 5 champs supplémentaires lorsque vous cliquez dessus. Cela vous permettra un meilleur contrôle. –

Répondre

1

Si je vous comprends bien, voici par exemple de forme HTML:

<form action="" method="post"> 
    <fieldset> 
    <legend>Group 1</legend> 
    <div> 
     <input type="text" name="groups[0][first_name]" /> 
    </div> 
    <div> 
     <input type="text" name="groups[0][last_name]" /> 
    </div> 
    </fieldset> 

    <fieldset> 
    <legend>Group 2</legend> 
    <div> 
     <input type="text" name="groups[1][first_name]" /> 
    </div> 
    <div> 
     <input type="text" name="groups[1][last_name]" /> 
    </div> 
    </fieldset> 

    <fieldset> 
    <legend>Group 3</legend> 
    <div> 
     <input type="text" name="groups[2][first_name]" /> 
    </div> 
    <div> 
     <input type="text" name="groups[2][last_name]" /> 
    </div> 
    </fieldset> 
</form> 

attention aux noms des champs, comment les champs sont grupped. Après avoir soumis la forme comme celui-ci, votre _POST $ array superglobale contiendra $ _POST [ 'groupes'] tableau de structure suivante:

Array 
(
    [0] => Array 
     (
      [first_name] => 
      [last_name] => 
     ) 

    [1] => Array 
     (
      [first_name] => 
      [last_name] => 
     ) 

    [2] => Array 
     (
      [first_name] => 
      [last_name] => 
     ) 

) 

Vous pouvez facilement traiter ces données avec le code comme ceci:

foreach ($_POST['groups'] as $group) { 
    $group = array_filter($group); 

    if (!empty($group)) { 
    // do something with group 
    } 
} 

Ce petit exemple boucle sur tous les groupes soumis. La fonction array_filter() jettera toutes les valeurs vides de chaque tableau $ group, et! empty (...) s'assurera que $ group n'est pas vide.

Questions connexes