84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
#頁面結構如上圖所示,後台使用php.假如在教育經歷中有三條記錄,點擊保存時同時提交到了後台,該如何處理比較好? ?
前台頁面要可以動態產生新的一行,該怎麼處理多行間name及其他屬性的問題? ?
可以講一下,大概的思路? ?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
例如有以下欄位
scholl_name education address
例如它的ID是 123
<p> <input name="old[123][scholl_name]" value="...."> <input name="old[123][education]" value="...."> <input name="old[123][address]" value="...."> <a href="javascript:delete(123)">删除</a> </p>
設定一個變數 createdIndex = 0新增
createdIndex = 0
//createdIndex 使用js输出 <p id="new_createdIndex"> <input name="create[new_createdIndex][scholl_name]" value=""> <input name="create[new_createdIndex][education]" value=""> <input name="create[new_createdIndex][address]" value=""> <a href="javascript:delete('new_createdIndex')">删除</a> </p> //每次新增后都累加 createdIndex++;
function delete(id) { if (id.indexOf('new_') < 0) //不是新增的, 新增一条删除记录到form $('<input name="deleted[]" value="'+id+'">').appendTo('#this-form'); //删除本行 $('#' + id).remove(); }
$deleted = $_POST['deleted']; foreach($deleted as $id) { 数据库删除对应的$id } $create = $_POST['create']; //如果需要排序 可以用sort或rsort foreach($create as $v) { /* 结构是: $v = [ 'school' => 'Your value', 'education' => '...', 'address' => '' ]; */ insert into table } $old = $_POST['old']; foreach($old as $id => $v) { //结构同上 update table set .... where id = $id; }
這個是最相容的方式了,如果使用Vue之類的,還可以使用JSON提交,因為vue可以監控到表單是否修改,只用記錄已經修改過的表單。
前端提交時使用陣列的形式:
[{ "school": "中山大学" ... }, { "school": "华南理工大学" ... }]
服務端遍歷資料存到資料庫。
name是不衝突的,id才衝突。可以更詳細描述問題嗎?
1、提交到後台的資料直接$_POST接收,然後再循環遍歷,對相應資料進行驗證,透過驗證後存入資料庫就好;2、新增的行同一欄位所有屬性相同;
第一種方案:點擊提交的時候透過js將你要的資料統一處理好後(比如格式化成數組)放入隱藏域中再提交表單第二種方案:表單元素name上做處理樓上已說得很清楚:第三種方案:(和第二種類似)
先定義新增一行的範本
<script type="text/template" id="tpl_xxx"> //html元素 <tr> <input name="school[]" /> <input name="remark[]" /> </tr> </script>
新增行的時候clone一下tpl_xxx,放入對應的地方(例如表格最後一行)
提交後PHP處理
$schools = $_POST['schools']; $remarks = $_POST['remarks']; //$schools[0], $remarks[0], ... 组成第一行数据
例如有以下欄位
修改原有的
例如它的ID是 123
新增的
設定一個變數
createdIndex = 0
新增
刪除
後台處理
第一個問題
前端提交時使用陣列的形式:
服務端遍歷資料存到資料庫。
第二個問題
name是不衝突的,id才衝突。可以更詳細描述問題嗎?
1、提交到後台的資料直接$_POST接收,然後再循環遍歷,對相應資料進行驗證,透過驗證後存入資料庫就好;
2、新增的行同一欄位所有屬性相同;
第一種方案:
點擊提交的時候透過js將你要的資料統一處理好後(比如格式化成數組)放入隱藏域中再提交表單
第二種方案:
表單元素name上做處理樓上已說得很清楚:
第三種方案:(和第二種類似)
先定義新增一行的範本
新增行的時候clone一下tpl_xxx,放入對應的地方(例如表格最後一行)
提交後PHP處理