首頁  >  問答  >  主體

javascript - php 後台如何處理,表單提交過來的同一專案的多個資料? ?

  1. #頁面結構如上圖所示,後台使用php.假如在教育經歷中有三條記錄,點擊保存時同時提交到了後台,該如何處理比較好? ?

  2. 前台頁面要可以動態產生新的一行,該怎麼處理多行間name及其他屬性的問題? ?

可以講一下,大概的思路? ?

高洛峰高洛峰2734 天前607

全部回覆(4)我來回復

  • 習慣沉默

    習慣沉默2017-05-16 13:16:33

    例如有以下欄位

    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可以監控到表單是否修改,只用記錄已經修改過的表單。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-16 13:16:33

    第一個問題

    前端提交時使用陣列的形式:

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

    服務端遍歷資料存到資料庫。

    第二個問題

    name是不衝突的,id才衝突。可以更詳細描述問題嗎?

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 13:16:33

    1、提交到後台的資料直接$_POST接收,然後再循環遍歷,對相應資料進行驗證,透過驗證後存入資料庫就好;
    2、新增的行同一欄位所有屬性相同;

    回覆
    0
  • 某草草

    某草草2017-05-16 13:16:33

    第一種方案:
    點擊提交的時候透過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], ... 组成第一行数据

    回覆
    0
  • 取消回覆