javascript - Comment l'arrière-plan PHP traite-t-il plusieurs éléments de données pour le même élément soumis via le formulaire? ?
高洛峰
高洛峰 2017-05-16 13:14:33
0
4
632

  1. La structure de la page est celle indiquée dans l'image ci-dessus et PHP est utilisé dans le backend S'il y a trois enregistrements dans l'expérience éducative et qu'ils sont soumis au backend lorsque vous cliquez sur Enregistrer, quelle devrait être la meilleure façon de le faire. gérer ça ? ?

  2. Si la page d'accueil peut générer dynamiquement une nouvelle ligne, comment gérer le problème du nom et des autres attributs entre plusieurs lignes ? ?

Pouvez-vous me donner l'idée générale ? ?

高洛峰
高洛峰

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

répondre à tous(4)
習慣沉默

Par exemple, il y a les champs suivants

scholl_name
education
address

Modifier l'original

Par exemple, son identifiant est 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>

Nouvellement ajouté

Définir une variable createdIndex = 0
Nouveau

//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++;

Supprimer

function delete(id)
{
    if (id.indexOf('new_') < 0) //不是新增的, 新增一条删除记录到form
       $('<input name="deleted[]" value="'+id+'">').appendTo('#this-form');
    //删除本行
    $('#' + id).remove();
}

Traitement en arrière-plan

$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;
}

C'est le moyen le plus compatible. Si vous utilisez Vue ou similaire, vous pouvez également utiliser la soumission JSON, car Vue peut surveiller si le formulaire a été modifié et enregistrer uniquement le formulaire modifié.

大家讲道理
Première question

Utilisez le formulaire de tableau lors de la soumission sur le front-end :

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

Le serveur parcourt les données et les enregistre dans la base de données.

Deuxième question

le nom n'est pas en conflit, seulement les conflits d'identité. Pouvez-vous décrire le problème plus en détail ?

给我你的怀抱

1. Les données soumises en arrière-plan sont reçues directement par $_POST, puis parcourues en boucle pour vérifier les données correspondantes, elles sont stockées dans la base de données
2. la ligne nouvellement ajoutée est la même ;

某草草

La première option :
Lorsque vous cliquez sur Soumettre, traitez les données souhaitées via js (par exemple, formatez-les dans un tableau) et placez-les dans un champ masqué avant de soumettre le formulaire
La deuxième option :
Effectuez le traitement sur le formulaire nom de l'élément Cela a été clairement indiqué ci-dessus :
La troisième option : (similaire à la deuxième)

  1. Définissez d'abord le modèle pour ajouter une nouvelle ligne

<script type="text/template" id="tpl_xxx">
//html元素
<tr>
    <input name="school[]" />
    <input name="remark[]" />
</tr>
</script>
  1. Lors de l'ajout d'une nouvelle ligne, clonez tpl_xxx et placez-la à l'endroit correspondant (comme la dernière ligne du tableau)

  2. Traitement PHP post-soumission

$schools = $_POST['schools'];
$remarks = $_POST['remarks'];
//$schools[0], $remarks[0], ... 组成第一行数据
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal