javascript - Wie verarbeitet der PHP-Hintergrund mehrere Daten für denselben Artikel, der über das Formular übermittelt wird? ?
高洛峰
高洛峰 2017-05-16 13:14:33
0
4
630

  1. Die Seitenstruktur ist wie im Bild oben dargestellt, und PHP wird im Backend verwendet. Wenn es drei Datensätze in der Bildungserfahrung gibt und diese an das Backend gesendet werden, wenn Sie auf Speichern klicken, was sollte der beste Weg sein damit umgehen? ?

  2. Wenn die Startseite dynamisch eine neue Zeile generieren kann, wie geht man dann mit dem Problem des Namens und anderer Attribute zwischen mehreren Zeilen um? ?

Können Sie mir die allgemeine Idee verraten? ?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen(4)
習慣沉默

比如有如下字段

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可以监控到表单是否修改,只用记录已经修改过的表单。

大家讲道理
第一个问题

前端提交时使用数组的形式:

[{
    "school": "中山大学"
    ...
}, {
    "school": "华南理工大学"
    ...
}]

服务端遍历数据存到数据库。

第二个问题

name是不冲突的,id才冲突。可以更详细地描述问题吗?

给我你的怀抱

1、提交到后台的数据直接$_POST接收,然后再循环遍历,对相应数据进行验证,通过验证后存入数据库就好;
2、新增的行同一字段所有属性相同;

某草草

第一种方案:
点击提交的时候通过js将你要的数据统一处理好后(比如格式化成数组)放入隐藏域中再提交表单
第二种方案:
表单元素name上做处理楼上已说得很清楚:
第三种方案:(和第二种类似)

  1. 先定义新增一行的模板

<script type="text/template" id="tpl_xxx">
//html元素
<tr>
    <input name="school[]" />
    <input name="remark[]" />
</tr>
</script>
  1. 新增行的时候clone一下tpl_xxx,放入对应的地方(比如表格最后一行)

  2. 提交后PHP处理

$schools = $_POST['schools'];
$remarks = $_POST['remarks'];
//$schools[0], $remarks[0], ... 组成第一行数据
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage