2011-10-10 49 views
1

我正在修改作爲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...)); 

含有的樹生成的圖代表每個字段的對象(某些「字段」,例如地址可以包含子字段,如文本輸入

由於我們知道對象屬性的名稱,因此表單c然後,omponent可以使用getter和setter將表單字段的結果輕鬆地綁定到相應的對象屬性。

我現在面臨的問題是:我需要允許用戶在運行時添加字段。這將工作使用Jquery,也爲沒有javascript的用戶提供備用服務。

假設我們有一個頁面,用戶可以在其中編輯他的個人資料並添加多個送貨地址。他將會有一個按鈕「添加地址」。點擊這個按鈕會出現以下結果:

  • 對於啓用了javascript的用戶,用戶將立即看到一個新的「地址字段」,它包含幾個下拉菜單和添加的文本字段。
  • 對於未啓用javascript的用戶,頁面將刷新,並添加由幾個下拉列表和文本字段組成的新「地址字段」。

讓PHP方知道這些新字段存在並且我們需要從他們發佈的數據的最佳方式是什麼?

回答

1

所有表單元素都將在請求中提交併提供給PHP。所以您只需使用表單中指定元素的任何名稱來引用元素。

爲國家的2個地址你想要命名元素像「addr_1_country」,「addr_2_country」,或者交替地「addr_country []」爲使這些值在數組中可用。如果你使用前者,你可以通過名稱「addr_ $ i_country」循環,直到你找到它們爲止(或者讓JQuery更新一個也被提交的計數值,比如說「addr_count」,它告訴你循環多久)。

無論哪種方式,你只需要知道名稱。但如果只能指定「地址」和/或給子域賦予你不能指定的名字,那麼你可能會遇到問題。也許你的「 - > addField()」足夠聰明,可以爲你命名它們。否則更新「Form」以自動命名或接受'name'參數。

1

無論哪種方式,您提交的表單都會在$ _REQUEST(它是$ _GET和$ _POST)中填充所有表單字段及其必需值。你可以有一個setter函數來接受這個數組,找到新的東西,並動態地設置它們。

我假設你有一個SET數量的新字段,你可以只是PRE爲它們設置getter和setter,然後通過$ _REQUEST在PHP端提交併調用setter來獲得適當的字段。

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