SQL插入多行,foreach来自一个提交

时间:2016-10-31 13:53:09

标签: php mysql pdo

this image explain what i need我在使用PDO将多个输入记录插入数据库时​​遇到问题。 foreach的这段代码成功添加但只有表中一行的单个记录,它没有添加所有记录行。这是我的代码:

Html代码:

<table border="0" cellspacing="0" class="table table-bordered table-hover" data-name="cont-table">

      <tr>


        <th class="text-center"> م </th>



        <th class="text-center"> اسم الصنف </th>



        <th class="text-center"> الوحدة </th>




        <th class="text-center"> الكمية </th>



        <th class="text-center"> سعر الوحدة </th>



        <th class="text-center"> العام المالي </th>



        <th class="text-center"> إجمالي قيمة الصنف </th>



      </tr>



    </thead>



    <tr>



      <td></td>



      <td><span id="snum">1.</span></td>



      <td><!--<input type="text" id="first_name" name="first_name[]"/>!-->




        <select class="select" id="first_name" name="items[]">
   查询(&#34; SELECT first_name6 FROM item&#34;); // $ stmt = $ pdo-&gt; execute(); while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){ 回声&#34;&#34; 。 $ row [&#39; first_name6&#39;]。 &#34;&#34 ;; } ?&GT;
        </select></td>



      <td><!--<input type="text" id="last_name" name="last_name[]"/>!-->




        <select class="select" id="last_name" name="units[]">
 查询(&#34; SELECT first_name7 FROM unit&#34;); // $ stmt = $ pdo-&gt; execute(); while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){ 回声&#34;&#34; 。 $ row [&#39; first_name7&#39;]。 &#34;&#34 ;; } ?&GT;                                ! - &GT;               查询(&#34; SELECT first_name8 FROM financial&#34;); // $ stmt = $ pdo-&gt; execute(); while($ row = $ stmt-&gt; fetch(PDO :: FETCH_ASSOC)){ 回声&#34;&#34; 。 $ row [&#39; first_name8&#39;]。 &#34;&#34 ;; } ?&GT;
        </select></td>
      <td><input type="text" id="total" name="totals[]" class="amount" value="" /></td>
    </tr>
  </table>
  <button id="add_row"  type="button" class="delete btn btn-default pull-right">مسح</button>
  <button id="add_row" style="margin-right:5px;" type="button" class="addmore btn btn-default pull-right">اضاف صنف</button>

</form>

php代码:

    if(isset($_POST['set-cont'])) {



   foreach ($_POST['items'] as $key => $value)  {



            $items = $_POST["items"][$key];



            $units = $_POST["units"][$key];



            $qtys = $_POST["qtys"][$key];



            $unitno = $_POST["unitno"][$key];



            $financials = $_POST["financials"][$key];



            $totals = $_POST["totals"][$key];



        try {



            $db = DB();



            $query = $db->prepare("INSERT INTO table_contract (items, units, 

qtys,unitno,financials,totals)

VALUES(:项:单位,:qtys,:unitno,:财务,:总计)&#34);

            $query->bindParam("items", $items, PDO::PARAM_STR);



            $query->bindParam("units", $units, PDO::PARAM_STR);



            $query->bindParam("qtys", $qtys, PDO::PARAM_STR);



            $query->bindParam("unitno", $unitno, PDO::PARAM_STR);



            $query->bindParam("financials", $financials, PDO::PARAM_STR);



            $query->bindParam("totals", $totals, PDO::PARAM_STR);



            $query->execute();



        } catch (PDOException $e) {



           exit($e->getMessage());



        }


    }



}

1 个答案:

答案 0 :(得分:0)

return $db->lastInsertId();阻止中移除foreach

一次迭代后它将返回值。这就是原因,只有一个值插入而休息不是。

看,我发现了一些错误,我在下面说明了这些错误。跟着它,它会起作用。

<强> 更改

1)在此复选框中输入名称。 <td><input type="checkbox" class="case" name="checkedCheckBox[]"/></td>。并且,名称必须是数组类型。因为,仅基于此复选框,您将在表中插入值。正确?

2)然后,ID不能相同。您提供了4个输入ID first_name,这是不正确的。将所有ID更改为唯一ID。 ID必须是唯一的。

3) new-contract.php 页面中,找到通过此行检查的复选框。 foreach ($_POST['checkedCheckBox'] as $key => $value) {。在这里,checkedCheckBox是我在 Point-1 中提到的名称。

4) new-contract.php 页面中,从return $db->lastInsertId();语句中删除foreach。否则,在Ist Iteration之后,代码将退出并返回Last Inserted ID。

更新代码

<强>的index.php

<form action="new-contract.php" method="post">
    <table border="0" cellspacing="0" class="table table-bordered table-hover">
        <thead style="">
            <tr>
                <th class="check-this">
                    <input class="check_all" type="checkbox"  onclick="select_all()"/>
                </th>
                <th class="text-center"> م </th>
                <th class="text-center"> اسم الصنف </th>
                <th class="text-center"> الوحدة </th>
                <th class="text-center"> الكمية </th>
                <th class="text-center"> سعر الوحدة </th>
                <th class="text-center"> العام المالي </th>
                <th class="text-center"> إجمالي قيمة الصنف </th>
            </tr>
        </thead>
        <tr>
            <td><input type="checkbox" class="case" name="checkedCheckBox[]"/></td>
            <td><span id="snum">1.</span></td>
            <td>
                <select class="select" id="first_name1" name="items[]">
                </select>
            </td>
            <td>
                <select class="select" id="first_name2" name="units[]">
                </select>
            </td>
            <td><input class="select qty" type="number" id="tamil" name="qtys[]"/></td>
            <td><input class="select unit" type="number" id="english" name="unitno[]" /></td>
            <td>
                <select class="select " id="first_name3" name="financials[]">
                </select>
            </td>
            <td><input type="text" id="total" name="totals[]" class="amount" value="" /></td>
        </tr>
    </table>
    <input name="set-cont" type="submit" class="sb-btn center" value="حفظ"/>
</form>

新-contract.php

if(isset($_POST['set-cont'])) {
    foreach ($_POST['checkedCheckBox'] as $key => $value)  {
        $items = $_POST["items"][$key];
        $units = $_POST["units"][$key];
        $qtys = $_POST["qtys"][$key];
        $unitno = $_POST["unitno"][$key];
        $financials = $_POST["financials"][$key];
        $totals = $_POST["totals"][$key];
        try {
            $db = DB();
            $query = $db->prepare("INSERT INTO table_contract (items, units, qtys, unitno, financials, totals) VALUES(:items,:units,:qtys,:unitno,:financials,:totals)");
            $query->bindParam("items", $items, PDO::PARAM_STR);
            $query->bindParam("units", $units, PDO::PARAM_STR);
            $query->bindParam("qtys", $qtys, PDO::PARAM_STR);
            $query->bindParam("unitno", $unitno, PDO::PARAM_STR);
            $query->bindParam("financials", $financials, PDO::PARAM_STR);
            $qQuery->bindParam("totals", $totals, PDO::PARAM_STR);
            $query->execute();
        } catch (PDOException $e) {
           exit($e->getMessage());
        }
    }
}