允许用户在运行时向表单添加字段

时间:2011-10-10 05:18:40

标签: php javascript forms

我正在修改作为Web应用程序一部分的表单组件,以支持用户在运行时添加和删除多余的表单字段。

表单提交时,表单中的数据被设置为php对象:

<?php
   class users {
     public function setName($name){
         (...)
     }

     public function getName(){
         (...)
     }

     public function setSomeAttribute($name){
         (...)
     }

     public function getSomeAttribute(){
         (...)
     }
   }

表单生成如下:

$form = new Form();
$form->addField('Text', 'Name', (... some other parameters...))
->addField('Address', 'SomeAttribute', (... some other parameters...));

生成一个视图,其中包含表示每个字段的对象树(某些“字段”,例如地址,可以包含子字段,如文本输入。

鉴于我们知道对象属性的名称,表单组件可以使用getter和setter轻松地将该表单字段的结果绑定到相应的对象属性。

我现在面临的问题是:我需要允许用户在运行时添加字段。这将使用Jquery,也可以为没有javascript的用户提供后备。

假设我们有一个页面,用户可以编辑他的个人资料并添加多个送货地址。他将有一个显示“添加地址”的按钮。单击此按钮将执行以下操作:

  • 对于启用了javascript的用户,用户将立即看到一个新的“地址字段”,其中包含一些下拉菜单和添加的文本字段。
  • 对于未启用javascript的用户,页面将刷新,并添加包含一些下拉列表和文本字段的新“地址字段”。

让PHP方知道这些新字段存在且我们需要从中获取发布数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

所有表单元素都将在请求中提交并可供PHP使用。因此,您只需要使用表单中指定元素的任何名称来引用元素。

对于2个地址的国家/地区,您要为“addr_1_country”,“addr_2_country”或“addr_country []”等元素命名,以使数值中的值可用。如果你使用前者,你可以循环通过名称“addr_ $ i_country”,直到你发现它们未设置(或让JQuery更新一个也被提交的计数值,比如“addr_count”告诉你循环多长时间。) / p>

无论哪种方式,你只需要知道名字。但是,如果您只能指定“地址”和/或子字段的名称是您无法自行分配的,那么您可能会遇到问题。也许你的“ - &gt; addField()”非常聪明,可以为你命名。否则请自动更新“表格”或接受“姓名”参数。

答案 1 :(得分:1)

无论哪种方式,提交表单都会在$ _REQUEST($ _GET和$ _POST)中填充一个数组,其中包含所有表单字段及其必需值。你可以有一个setter函数,它接受这个数组,找到新的,并动态设置它们。

我假设你有一定数量的新字段,你可以只为它们制作getters和setter,然后在php端提交循环$ _REQUEST并调用setter来获取正确的字段。

foreach ($_REQUEST[] as $field){ // IF STATEMENT TO DETERMINE WHAT FIELD THIS IS BASED ON FIELD NAME }