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

时间:2018-01-28 08:23:25

标签: php mysql database codeigniter

我有一个动态添加行的表。像这样的东西

enter image description here

用户可以动态地在每个类别(基本,类型评级和常规)中添加行。当他们点击"保存记录"按钮,数据将存储在数据库中。

我将分享一个类别(BASIC)的代码,仅代表其他类别。

这就是数据库中表格(' t_basic')的样子

enter image description here

VIEW(body.php)(仅限第一类(基本))

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

    }
}

当我运行上面的代码时,我收到了此错误消息

  

遇到PHP错误

     

严重性:注意

     

消息:数组到字符串转换

     

文件名:database / DB_driver.php

     

行号:1477

我花了两天的时间试图找出将每个行数据插入数据库的正确方法。这个问题似乎与我有关,因为我在codeigniter中仍然是新手。

如果您对我的问题有所了解,请告诉我。提前谢谢:&#34;)

1 个答案:

答案 0 :(得分:1)

带有 $this->db->insert('t_basic', $basic_data);

$basic_data必须是关联数组(将字符串作为元素的索引键的数组)

修改控制器中的$basic_data数组:

   $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')
     ];
CodeIgniter中的

,您可以使用$this->input->post()代替$_POST[]来检索POST数据