javascript - Bagaimanakah latar belakang php memproses beberapa keping data untuk item yang sama yang dihantar melalui borang? ?
高洛峰
高洛峰 2017-05-16 13:14:33
0
4
625

  1. Struktur halaman adalah seperti yang ditunjukkan dalam gambar di atas, dan PHP digunakan di bahagian belakang Jika terdapat tiga rekod dalam pengalaman pendidikan, dan ia diserahkan kepada bahagian belakang apabila anda mengklik Simpan, apakah cara terbaik untuk. mengendalikannya? ?

  2. Jika halaman depan boleh menjana baris baharu secara dinamik, bagaimana untuk menangani masalah nama dan atribut lain antara berbilang baris? ?

Bolehkah anda memberitahu saya idea umum? ?

高洛峰
高洛峰

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

membalas semua(4)
習慣沉默

Sebagai contoh, terdapat medan berikut

scholl_name
education
address

Ubah suai yang asal

Sebagai contoh, IDnya ialah 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>

Baru ditambah

Tetapkan pembolehubah createdIndex = 0
Baharu

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

Padamkan

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

Pemprosesan latar belakang

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

Ini adalah cara yang paling serasi Jika anda menggunakan Vue atau sebagainya, anda juga boleh menggunakan penyerahan JSON, kerana Vue boleh memantau sama ada borang telah diubah suai dan hanya merekodkan borang yang diubah suai.

大家讲道理
Soalan pertama

Gunakan borang tatasusunan apabila menyerahkan pada bahagian hadapan:

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

Pelayan merentasi data dan menyimpannya ke pangkalan data.

Soalan kedua

nama tidak bercanggah, hanya konflik id. Bolehkah anda menerangkan masalah dengan lebih terperinci?

给我你的怀抱

1. Data yang diserahkan ke latar belakang diterima secara langsung oleh $_POST, dan kemudian dilalui dalam gelung untuk mengesahkan data yang sepadan Setelah lulus pengesahan, ia disimpan dalam pangkalan data
2 baris yang baru ditambah adalah sama

某草草

Pilihan pertama:
Apabila anda mengklik hantar, proses data yang anda mahu melalui js (contohnya, formatkannya ke dalam tatasusunan) dan letakkannya ke dalam medan tersembunyi sebelum menyerahkan borang
Pilihan kedua:
Lakukan pemprosesan pada borang nama unsur Ia telah dinyatakan dengan jelas di atas:
Pilihan ketiga: (serupa dengan yang kedua)

  1. Tentukan dahulu templat untuk menambah baris baharu

<script type="text/template" id="tpl_xxx">
//html元素
<tr>
    <input name="school[]" />
    <input name="remark[]" />
</tr>
</script>
  1. Apabila menambah baris baharu, klon tpl_xxx dan letakkan di tempat yang sepadan (seperti baris terakhir jadual)

  2. Pemprosesan PHP selepas penyerahan

$schools = $_POST['schools'];
$remarks = $_POST['remarks'];
//$schools[0], $remarks[0], ... 组成第一行数据
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan