duanqin9631 2018-01-28 08:23
浏览 80

使用codeigniter将动态添加的表中的多个数据插入到数据库中

I have a table with dynamically added rows. Something like this

enter image description here

User can add rows in each category (Basic, Type Rating, and General) dynamically. And when they click on "Save Record" button, the data will be stored in database.

I will share the code for one category (BASIC) only to represent the other categories.

This is how the table ('t_basic') in database looks like

enter image description here

VIEW (body.php) (only the first category (Basic))

<table id="myTable0" name="myTable0" class="table table-bordered" style="width:100%; margin-bottom: 10px;">
    <h3>Subjects</h3>
    <tr style="font-size:18px; height:30px; color:#4d4d4d">
        <th class="col-md-2" colspan="2" style="text-align:center;">Category</th>
        <th class="col-md-3" style="text-align:center;">Work Scope</th>
        <th><div style="text-align:center">I</div></th>
        <th><div style="text-align:center">E</div></th>
        <th><div style="text-align:center">PI</div></th>
        <th><div style="text-align:center">PA</div></th>
        <th class="col-md-3" style="text-align:center;">ATA Chapters</th>
    </tr>
    <tr style="height:25px; font-size:15px">
        <td class="col-md-1" style="text-align: center; color:#4d4d4d;"><b>Basic</b></td>
        <td class="col-md-1">
            <select style="height:30px" name="basic_category[]" class="form-control">
                <option>-</option>  
                <option>AP</option>
                <option>EA</option>
            </select>
        </td>
        <td class="col-md-3">
            <div>
                <input type="text" class="form-control" name="basic_workscope[]" placeholder="Type the workscope here">
            </div>
        </td>
        <td>
            <div style="text-align: center">
                <input type="checkbox" name="basic_i[]">
            </div>
        </td>
        <td>
            <div style="text-align: center">
                <input type="checkbox" name="basic_e[]">
            </div>
        </td>
        <td>
            <div style="text-align: center">
                <input type="checkbox" name="basic_pi[]">
            </div>
        </td>
        <td>
            <div style="text-align: center">
                <input type="checkbox" name="basic_pa[]">
            </div>
        </td>
        <td class="col-md-3">
            <div>
                <input type="text" class="form-control" name="basic_ata_chapter[]" placeholder="Type the ATA chapters here">
            </div>
        </td>
        <td style="width: 20px;">                                                       
            <button onclick="deleteTable0()" type="button" class="btn btn-danger btn-sm" >
                <span class="glyphicon glyphicon-trash"></span>
            </button>
        </td>
    </tr>
</table>
<div class="row">
    <button onclick="addTable0()" type="button" class="btn btn-success btn-sm" style="float: right; margin-right: 70px;">
                <span class="glyphicon glyphicon-plus"></span> Add
            </button>
</div> 


<script>    
function addTable0()
{

    var table0 = document.getElementById("myTable0");
    var row0 = table0.insertRow(2);
    var cell1_0 = row0.insertCell(0);
    var cell2_0 = row0.insertCell(1);
    var cell3_0 = row0.insertCell(2);
    var cell4_0 = row0.insertCell(3);
    var cell5_0 = row0.insertCell(4);
    var cell6_0 = row0.insertCell(5);
    var cell7_0 = row0.insertCell(6);
    var cell8_0 = row0.insertCell(7);
    var cell9_0 = row0.insertCell(8);
    row0.id = "newRow_0";
    cell1_0.innerHTML = "";
    cell2_0.id = "cell2_0";
    cell3_0.id = "cell3_0";
    cell4_0.id = "cell4_0";
    cell5_0.id = "cell5_0";
    cell6_0.id = "cell6_0";
    cell7_0.id = "cell7_0";
    cell8_0.id = "cell8_0";
    cell9_0.id = "cell9_0";
    $("#cell2_0").append('<select style="height:30px" name="basic_category[]" class="form-control"><option>-</option><option>AP</option><option>EA</option></select>');
    $("#cell3_0").append('<input type="text" class="form-control" name="basic_workscope[]" placeholder="Type the workscope here">');
    $("#cell4_0").append('<div style="text-align: center"><input type="checkbox" name="basic_i[]"></div>');
    $("#cell5_0").append('<div style="text-align: center"><input type="checkbox" name="basic_e[]"></div>');
    $("#cell6_0").append('<div style="text-align: center"><input type="checkbox" name="basic_pi[]"></div>');
    $("#cell7_0").append('<div style="text-align: center"><input type="checkbox" name="basic_pa[]"></div>');    
    $("#cell8_0").append('<input type="text" class="form-control" name="basic_ata_chapter[]" placeholder="Type the ATA chapters here">');
    $("#cell9_0").append('<button onclick="deleteTable0(this)" type="button" class="btn btn-danger btn-sm remove" id="btn_delete" ><span class="glyphicon glyphicon-trash"></span></button>');
}

function deleteTable0(r)
{
    var i = r.parentNode.parentNode.rowIndex;
    document.getElementById("0").deleteRow(i);
}
</script>

CONTROLLER (instructor_con.php)

$basic_data = array();

    $basic_category = $_POST["basic_category"];
    $basic_workscope = $_POST["basic_workscope"];
    $basic_i = $_POST["basic_i"];
    $basic_e = $_POST["basic_e"];
    $basic_pi = $_POST["basic_pi"];
    $basic_pa = $_POST["basic_pa"];
    $basic_ata_chapter = $_POST["basic_ata_chapter"];

    $basic_data[] = array($id_number, $basic_category, $basic_workscope, $basic_i, $basic_e, $basic_pi, $basic_pa, $basic_ata_chapter);

    $this->mod->insert_t_basic($basic_data);

MODEL (mod.php)

public function insert_t_basic($basic_data) {
    if(!empty($basic_data)) {

        foreach($basic_data as $value) {
            $this->db->insert('t_basic', $basic_data);
        }

    }
}

When I run the code above, I got this error message

A PHP Error was encountered

Severity: Notice

Message: Array to string conversion

Filename: database/DB_driver.php

Line Number: 1477

I have been spending 2 days trying to figure out what is the right method to insert each row data to the database. This problem seem compliated to me because I'm still new in codeigniter.

If you know any soultion to my problem, please let me know. Thank you in advance :")

  • 写回答

1条回答 默认 最新

  • duan2477 2018-01-28 09:03
    关注

    $this->db->insert('t_basic', $basic_data); with $basic_data must be an associative array (array with string as element's index key)

    modify your $basic_data array in controller:

       $basic_data = [
          'basic_category' => $this->input->post('basic_category'),
          'basic_workscope' => $this->input->post('basic_workscope'),
          'basic_i' => $this->input->post('basic_i'),
          'basic_e' => $this->input->post('basic_e'),
          'basic_pi' => $this->input->post('basic_pi'),
          'basic_pa' => $this->input->post('basic_pa'),
          'basic_ata_chapter' => $this->input->post('basic_ata_chapter')
         ];
    

    in CodeIgniter, You can use $this->input->post() instead of $_POST[] to retrieve POST data

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题