#頁(yè)面結(jié)構(gòu)如上圖所示,後臺(tái)使用php.假如在教育經(jīng)歷中有三條記錄,點(diǎn)擊保存時(shí)同時(shí)提交到了後臺(tái),該如何處理比較好? ?
前臺(tái)頁(yè)面要可以動(dòng)態(tài)產(chǎn)生新的一行,該怎麼處理多行間name及其他屬性的問題? ?
可以講一下,大概的思路? ?
擁有18年軟件開發(fā)和IT教學(xué)經(jīng)驗(yàn)。曾任多家上市公司技術(shù)總監(jiān)、架構(gòu)師、項(xiàng)目經(jīng)理、高級(jí)軟件工程師等職務(wù)。 網(wǎng)絡(luò)人氣名人講師,...
例如有以下欄位
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>
設(shè)定一個(gè)變數(shù) 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)
{
數(shù)據(jù)庫(kù)刪除對(duì)應(yīng)的$id
}
$create = $_POST['create'];
//如果需要排序 可以用sort或rsort
foreach($create as $v)
{
/*
結(jié)構(gòu)是:
$v = [
'school' => 'Your value',
'education' => '...',
'address' => ''
];
*/
insert into table
}
$old = $_POST['old'];
foreach($old as $id => $v)
{
//結(jié)構(gòu)同上
update table set .... where id = $id;
}
這個(gè)是最相容的方式了,如果使用Vue之類的,還可以使用JSON提交,因?yàn)関ue可以監(jiān)控到表單是否修改,只用記錄已經(jīng)修改過的表單。
前端提交時(shí)使用陣列的形式:
[{
"school": "中山大學(xué)"
...
}, {
"school": "華南理工大學(xué)"
...
}]
服務(wù)端遍歷資料存到資料庫(kù)。
name是不衝突的,id才衝突??梢愿敿?xì)描述問題嗎?
1、提交到後臺(tái)的資料直接$_POST接收,然後再循環(huán)遍歷,對(duì)相應(yīng)資料進(jìn)行驗(yàn)證,透過驗(yàn)證後存入資料庫(kù)就好;
2、新增的行同一欄位所有屬性相同;
第一種方案:
點(diǎn)擊提交的時(shí)候透過js將你要的資料統(tǒng)一處理好後(比如格式化成數(shù)組)放入隱藏域中再提交表單
第二種方案:
表單元素name上做處理樓上已說得很清楚:
第三種方案:(和第二種類似)
先定義新增一行的範(fàn)本
<script type="text/template" id="tpl_xxx">
//html元素
<tr>
<input name="school[]" />
<input name="remark[]" />
</tr>
</script>
新增行的時(shí)候clone一下tpl_xxx,放入對(duì)應(yīng)的地方(例如表格最後一行)
提交後PHP處理
$schools = $_POST['schools'];
$remarks = $_POST['remarks'];
//$schools[0], $remarks[0], ... 組成第一行數(shù)據(jù)