2012-07-26 54 views
1

我需要製作一個表單,管理部門的人員可以添加客戶信息。在第一個表單頁面上,可輸入客戶姓名,地址和聯繫方式等信息,以及客戶是否有子女。在PHP中驗證表單元素的動態數量

表單經過PHP驗證。如果客戶沒有孩子,數據將被保存到數據庫中。如果客戶確實有孩子,表單數據將被保存在隱藏的表單域中,並且會顯示第二個表單頁面,最多可以添加10個子項。

但是,在初始頁面視圖中,只有一個文本輸入可見。使用javascript按鈕,可以動態添加更多文本輸入字段(直到達到10的限制)。

問題是PHP中的驗證。如果其中一個文本輸入包含無效字符串,則應該使用正確數量的字段重新顯示錶單,以及包含特殊HTML類中的錯誤的表單(在CSS中,出於可用性原因,爲該類提供了一個紅色邊框,因此用戶可以立即看到錯誤所在的位置)。但是,由於字段的添加發生在Javascript中,因此只有一個字段會重新顯示錶單。

任何有關如何解決這個問題的想法都非常受歡迎。我精通PHP,但JavaScript對我來說是非常新的,所以我無法對我發現的動態添加字段的腳本進行大的更改。

回答

0

我已經處理過類似的事情。有幾個選項可以想到。

既然你有JS代碼來點擊按鈕來生成新的字段,爲什麼不擴展那個JS函數,所以它也可以通過傳遞一些參數來調用。如果有參數,它將使用現有數據填充字段。

然後,如果窗體被再次顯示,由於錯誤或編輯,從PHP,傳遞一些信息的Javascript,以便在頁面加載時,您創建的字段和填充數據。

爲了說明這一點,我想你有這樣的事情:

<a href="#" onclick="addNewFormField(); return false">Add Another Child</a> 

而且你具備的功能:

function addNewFormField() { 
    // create new HTML element to contain the field 
    // create new input, append to element container 
    // add container to DOM 
} 

更改它,所以它是這樣的:

function addNewFormField(data) { 
    // create new HTML element to contain the field 
    // create new input, append to element container 
    // add container to DOM 

    if (data != undefined) { 
     newFormElement.value = data.value; 
     newContainerElement.class = 'error'; 
    } 
} 

並從PHP中,添加一些運行onload的代碼:

<script type="text/javascript"> 
window.onload = function() { // replace me with jQuery ready() or something proper 
    <?php foreach($childInList as $child): ?> 
     addNewFormField({ value: '<?php echo $child['name'] ?>' }); 
    <?php endforeach; ?> 
} 
</script> 

希望幫助,其高級別的例子,而不知道你的表單如何工作,但我過去曾用類似的方法重新填充JS創建的字段與服務器端的數據。

編輯:你可以使用的另一種方法是在PHP端創建HTML元素,並從那裏預先填充它們,但這可能會導致重複代碼,從JS和HTML生成HTML代同樣的東西來自PHP。只要JS方面足夠聰明,可以識別PHP添加的最初字段,就可以使用最容易實現的方式。就個人而言,我只是擴展你的JS代碼來處理可選的數據,如上圖所示。