代码之家  ›  专栏  ›  技术社区  ›  geocoin

如何构造HTML表单元素,以便能够轻松地将其转换为PHP对象?

  •  2
  • geocoin  · 技术社区  · 15 年前

    我正在尝试找出命名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 回复  |  直到 15 年前
        1
  •  3
  •   rix0rrr    15 年前

    您可以使用数组,但不能调用字段。 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
    
        2
  •  0
  •   n3rd    15 年前

    您可以考虑使用jquery预处理提交的值。与提交原始表单数据不同,您可以在客户端对其进行结构化,并使用JSON将其传递给服务器,JSON可以轻松地转换为PHP对象。

        3
  •  0
  •   Quentin    15 年前

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

    然后,如果需要使用javascript引用它们-使用 square bracket notation .

        4
  •  -1
  •   Organiccat    15 年前

    我同意n3rd的观点,如果在传递变量时遇到问题,可以在末尾预先格式化数据。

    对这个想法进行少量的推断仅仅意味着将数据存储在一个JSON对象中,当用户输入值时构造该对象,然后在提交时将JSON对象发送到下一页,而不必担心每个变量名是什么。

    如果不是这样,还有另一个可能的解决方案,尽管我不确定它是否能解决您的特定问题:

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

    (从“php表单名称jquery数组”的谷歌搜索中获取)

        5
  •  -1
  •   Pavels    15 年前

    您可以尝试以下代码:

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

    然而,这种方法是不好的,因为您可以发布诸如php_self等变量,所以您希望检查这些变量。