【问题标题】:How to structure HTML form elements so they can be easily translated into a PHP object?如何构造 HTML 表单元素以便可以轻松地将它们转换为 PHP 对象?
【发布时间】:2010-10-29 06:49:43
【问题描述】:

我正在尝试找出命名我的 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 引用这些字段变得非常困难。

什么是“两全其美”的解决方案?

【问题讨论】:

  • 在使用数组时,通过jQuery访问字段变得困难的原因是什么?
  • 这变得很困难,因为 jQuery 使用方括号作为它的属性选择器例如: $('input[@type=text]') 为了引用控件数组,我必须这样做: $( '#payment\\[0\\]\\[type\\]') 这显然不是很好......

标签: php jquery html oop webforms


【解决方案1】:

您可以毫无问题地使用数组,但不要调用字段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】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        我同意 n3rd,如果您在传递变量后遇到问题,请预先格式化您的数据。

        对这个想法的一点推论只是意味着将您的数据存储在一个 JSON 对象中,您在用户输入值时构建该对象,然后在提交时将 JSON 对象发送到下一页,而不用担心每个变量名称是什么。

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

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

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

        【讨论】:

          【解决方案5】:

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

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

          但是这种方法很糟糕,因为您可以 POST PHP_SELF 等变量,所以您想检查一下。

          【讨论】:

            猜你喜欢
            • 2019-11-25
            • 1970-01-01
            • 1970-01-01
            • 2012-06-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多