如何构建HTML表单元素,以便可以轻松地将它们转换为PHP对象?

时间:2009-05-27 13:45:51

标签: php jquery html oop webforms

我试图找出命名我的HTML表单字段的最佳方法,以便可以很容易地将它们解析为一组PHP对象。

例如,我有以下元素表:(假设它在表单内)

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

显然,我可以编写一堆代码来搜索$ _POST数组,以查找所有paymentType / Amount / Account等值并将它们放入对象中。然而,这感觉有点臭,我想知道是否有更好的方法来命名这些表单元素?

另一方面,我试图将字段命名为控制数组(至少我称之为控制数组),所以而不是paymentType0,它将是paymentType [0],而PHP会将它们视为我可以迭代的数组虽然。这种方法的问题在于,由于方括号,使用jQuery引用这些字段变得非常困难。

这两个世界最好的解决方案是什么?

5 个答案:

答案 0 :(得分:3)

您可以毫无问题地使用数组,但不要调用字段paymentType[0]paymentAmount[0],...

相反,请将其称为payment[0][type]payment[0][amount]

然后将记录方便地分组到关联数组中,这些数组更易于操作:

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

至于jQuery:遵循David的建议。 JavaScript中的对象实际上只是具有语法糖的关联数组,您可以按如下方式访问其成员:

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

答案 1 :(得分:0)

您可以考虑使用jQuery预处理提交的值。您可以在客户端构建原始表单数据,然后使用JSON将它们传递给服务器,而不是提交原始表单数据,JSON可以很容易地转换为PHP对象。

答案 2 :(得分:0)

使用带方括号的名称,以便PHP的表单处理库将它们转换为数组。

然后,如果您需要使用JavaScript引用它们 - 请使用square bracket notation

答案 3 :(得分:-1)

我同意n3rd,如果您在通过变量时遇到问题,请在您的数据上预先格式化数据。

关于这个想法的一个简单的推断意味着将数据存储在一个JSON对象中,当用户输入值然后在提交时将JSON对象发送到下一页,而不是担心每个变量名称是什么。< / p>

如果不是这样,那么还有另一种可能的解决方案,虽然我不确定它是否能解决您的特定问题:

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

(从谷歌上搜索“php form names jquery array”)

答案 4 :(得分:-1)

您可以随时尝试以下代码:

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

然而,这个审议是不好的,因为你可以POST变量,如PHP_SELF等,所以你想检查那些。