我有大約15個表單字段(fieldset),它也有一個大的textarea(限制4000個字符)。點擊按鈕時,我必須動態生成這些字段。我必須適應創建這些領域n次(無限制)。此設計是否在將數據保存到MySQL數據庫時產生任何問題?另外什麼是最好的方法來動態生成字段並驗證它們?我很欣賞任何輸入。動態生成的字段並保存數據
謝謝。
我有大約15個表單字段(fieldset),它也有一個大的textarea(限制4000個字符)。點擊按鈕時,我必須動態生成這些字段。我必須適應創建這些領域n次(無限制)。此設計是否在將數據保存到MySQL數據庫時產生任何問題?另外什麼是最好的方法來動態生成字段並驗證它們?我很欣賞任何輸入。動態生成的字段並保存數據
謝謝。
就我個人而言,我發現更實際的生成完全在js/jquery中顯示信息。這樣,您不必在兩種語言中處理顯示。 PHP發送一個「空」的外殼,包含圖塊和一些靜態文本以及一個js文件。頁面js立即從php返回數據,並對其進行格式化。如果你仔細做事,你可以輕鬆地重複使用該程序。我已經儘可能爲每個表字段創建類型,它告訴如何顯示字段(id:「hidden」,name:「text」,county:「select」,active:「checkbox」等)。此外,我不使用任何形式,只有按鈕和jQuery $ .post()函數。這允許使用類似的東西很容易地建立後數據:
$('table.VirtualFormTable').delegate('.update, .create', 'click', function() { // .update and .create are button's class on each row.
var $this = $(this);
var $row = $this.closest('tr');
params = {};
$('input, select', $row).each(function() {
if (this.type == 'checkbox') params[this.name] = this.checked;
params[this.name] = this.value;
});
if (validateParams(params)) {
$.post(url, params, function (data) { $row.removeClass('updatePending'); });
}
});
它很容易循環,已經改變了每一行,並建立一個則params的「陣列」,它看起來像這樣:
{[
0: {param1: '...', param2: '...'},
1: {param1: '...', param2: '...'}
]}
然後在PHP中,你可以做這樣的事情:
$fields = str_replace(array('true', 'false'), array('1', '0'), $_POST); // transform checkboxes
$whereArray = array_slice($fields, 0, 1); // table_index in first position
myDbTools::insertOrUpdate('table', $fields, $whereArray);
有了這樣的3部分模板,你需要寫兩行,以創建一個基於表的完整形式。
對於jQuery解決方案,我做了一次類似的事情。如果你有一些fieldset,你可以使用$('#yourfieldset')。html()並將它追加到最後一個現有的(最初是第一個)。然後,您可以刪除這些字段集中的數據,例如$('#yourfieldset input')。val(「」)。 所以你得到了重複,你也可以創建一個小函數來複制它幾次。
爲了保存,您可以更改要複製的字段集的名稱屬性。例如:
$('#yourfieldset input').each(function() {
$(this).attr("name", $(this).attr("name") + "_" + counter);
});
您需要將該計數器當作全局變量來計算字段集。要刪除一個字段集,也可以只給這個計數器的函數或者叫它rownumber。所以你可以使用$('#yourfieldset [「id $ = _ 15」]')。remove()來刪除它,因爲它查找具有特定數字的id屬性並刪除該字段集。
在PHP中,您可以遍歷POST變量,這應該很容易。對數據進行一些print_r()查看,看起來如何。
我已經使用JQuery克隆方法來生成這些字段。但我不確定如何在客戶端和服務器端驗證它們。 – nav100
克隆也是可能的。一個驗證器,你可以在這裏找到:http://docs.jquery.com/Plugins/validation 如果你給這些輸入字段正確的類,並複製它們,它沒有問題。而在服務器端,無論如何您都必須遍歷數組,因此您可以再次檢查每個值。 –
表格的結構是什麼,你將數據保存到? –
有兩張桌子。一個是保存客戶數據,另一個保存客戶信息的詳細信息。一對多的關係。 – nav100
是否可以將每個textarea保存爲詳細信息表中的單個行,或者可以使用僅包含textareas的表對鏈接表創建詳細信息ID? –