页面结构如上图所示,后台使用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处理