#頁面結構如上圖所示,後台使用php.假如在教育經歷中有三條記錄,點擊保存時同時提交到了後台,該如何處理比較好? ?
前台頁面要可以動態產生新的一行,該怎麼處理多行間name及其他屬性的問題? ?
可以講一下,大概的思路? ?
習慣沉默2017-05-16 13:16:33
例如有以下欄位
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 使用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可以監控到表單是否修改,只用記錄已經修改過的表單。
大家讲道理2017-05-16 13:16:33
前端提交時使用陣列的形式:
[{
"school": "中山大学"
...
}, {
"school": "华南理工大学"
...
}]
服務端遍歷資料存到資料庫。
name是不衝突的,id才衝突。可以更詳細描述問題嗎?
某草草2017-05-16 13:16:33
第一種方案:
點擊提交的時候透過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], ... 组成第一行数据