2009-05-27 5 views
2

J'essaie de trouver la meilleure façon de nommer mes champs de formulaire HTML afin qu'ils puissent être facilement analysés dans un ensemble d'opbjects PHP.Comment structurer des éléments de formulaire HTML pour qu'ils puissent être facilement traduits en objet PHP?

Par exemple je le tableau suivant des éléments: (supposons qu'il est dans une forme)

<table> 
    <tr id='payment0'> 
    <td><input type='text' name='paymentType0'></td> 
    <td><input type='text' name='paymentAmount0'></td> 
    <td><input type='text' name='paymentAccount0'></td> 
    </tr> 
    <tr id='payment1'> 
    <td><input type='text' name='paymentType1'></td> 
    <td><input type='text' name='paymentAmount1'></td> 
    <td><input type='text' name='paymentAccount1'></td> 
    </tr> 
</table> 

Il est évident que je peux écrire un tas de code pour chercher dans le tableau $ _POST pour trouver toutes les paymentType/Montant/Compte etc. valeurs et les mettre dans des objets. Cependant, cela sent un peu malodorant et je me demande s'il existe une meilleure façon de nommer ces éléments de forme? D'un côté, j'avais essayé de nommer les champs comme des tableaux de contrôle (du moins c'est ce que je les appelle) donc au lieu de paymentType0 ce serait paymentType [0] et PHP les verrait comme un tableau que je pourrais itérer cependant. Le problème avec cette approche est que le référencement de ces champs avec jQuery devient très difficile en raison des crochets.

Quelle est la meilleure solution pour les deux mondes?

+1

De quelle façon il devient difficile d'accéder aux champs via jQuery lorsque vous utilisez des tableaux? –

+0

Cela devient difficile parce que jQuery utilise des crochets pour ses sélecteurs d'attributs ex: $ ('input [@ type = text]') Pour référencer le tableau de commandes, je dois faire ceci: $ ('# payment \\ \ [0 \\\] \\\ [type \\\] ') ce qui n'est évidemment pas très agréable ... –

Répondre

3

Vous pouvez utiliser le tableau sans aucun problème, mais ne pas appeler les champs paymentType[0], paymentAmount[0] ...

Au lieu de cela, les appeler payment[0][type], payment[0][amount], etc.

Ensuite, les enregistrements seront commodément regroupées en tableaux associatifs, qui sont beaucoup plus faciles à manipuler:

foreach ($_POST["payment"] as $payment) { 
    echo "The type was $payment[type] and the amount was $payment[amount]"; 
} 

En ce qui concerne le jQuery: suivre la suggestion de David. Les objets en JavaScript sont des tableaux associatifs vraiment juste avec le sucre syntaxique et vous pouvez accéder à leurs membres comme suit:

myForm["payment[0][amount]"].value = 300 
0

Vous pouvez envisager de prétraiter les valeurs soumises avec jQuery. Au lieu de soumettre les données de formulaire brutes, vous pouvez les structurer du côté client et les transmettre au serveur à l'aide de JSON, qui peut facilement être transformé en un objet PHP.

-1

Je suis d'accord avec n3rd, si vous rencontrez des problèmes avec les variables une fois passé, pré-formater vos données sur votre fin. Une petite extrapolation sur cette idée signifie juste stocker vos données dans un objet JSON que vous construisez lorsque l'utilisateur entre des valeurs, puis sur envoyer envoyer l'objet JSON à la page suivante au lieu de se soucier de ce que chaque nom de variable est.

Si ce n'est pas, il y a une autre solution possible, bien que je ne suis pas sûr si elle traite votre problème particulier:

http://www.configure-all.com/arrayoffields.php

(saisi d'une recherche google sur « noms sous forme de php tableau jquery »

0

Utilisez les noms entre crochets pour que la bibliothèque de traitement de formulaires de PHP les convertisse en tableaux.

Ensuite, si vous avez besoin de les référencer en utilisant JavaScript - utilisez square bracket notation.

-1

Vous pouvez toujours essayer le code suivant:

foreach($_POST as $key => $val) 
{ 
    if(isset($$key)) $$key = $val; 
} 

Cependant ce approarch est mauvais parce que vous pouvez POST variables telles que PHP_SELF etc, de sorte que vous souhaitez vérifier ceux-ci.