扫码关注官方订阅号
84669人学习
65727人学习
82984人学习
467778人学习
498837人学习
471966人学习
256484人学习
152542人学习
224170人学习
139536人学习
81804人学习
85022人学习
11944人学习
20001人学习
60816人学习
5487人学习
15007人学习
2150人学习
6980人学习
194925人学习
359900人学习
1142人学习
19058人学习
3206人学习
180550人学习
48569人学习
17603人学习
40936人学习
1049人学习
750人学习
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], ... 组成第一行数据
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
精品班
技术支持
技术咨询
学习群
会员优惠
返回顶部
比如有如下字段
修改原有的
比如它的ID是 123
新增的
设置一个变量
createdIndex = 0
新增
删除
后台处理
第一个问题
前端提交时使用数组的形式:
服务端遍历数据存到数据库。
第二个问题
name是不冲突的,id才冲突。可以更详细地描述问题吗?
1、提交到后台的数据直接$_POST接收,然后再循环遍历,对相应数据进行验证,通过验证后存入数据库就好;
2、新增的行同一字段所有属性相同;
第一种方案:
点击提交的时候通过js将你要的数据统一处理好后(比如格式化成数组)放入隐藏域中再提交表单
第二种方案:
表单元素name上做处理楼上已说得很清楚:
第三种方案:(和第二种类似)
先定义新增一行的模板
新增行的时候clone一下tpl_xxx,放入对应的地方(比如表格最后一行)
提交后PHP处理