2016-04-17 16 views
0

存儲從一個網站6個invoce項目,我用幾個輸入元素這樣PDO/mysql如何通過<code>form method="post"</code>綁定多個值來存儲多行

<input name="item[]" value="6 hour service"/> 
    <input name="item[]" value="1 days travel"/> 
.... 

Serverside集團我複製$ _ POST [「項目」 ]以這樣

item[]= $_POST['Item']; 

陣列然後我可以訪問項[]和它看起來像這樣

[item] => Array 
    ( 
     [0] => 6 hour service 
     [1] => 1 days travel 
     [2] => .... 
    ) 

然後這個SQL語句如下

try { 
    $obj = $this->dbcon->prepare('INSERT INTO invoice_item 
       (ID, item) 
      VALUES(:ID,:item)'); 

      for ($i=0;$i<6;$i++) { 

      if (!empty($item[0][$i])) { 
       $obj->bindValue(':ID', $this->dbcon->lastInsertId(), PDO::PARAM_INT); 
       $obj->bindValue(':item', $item[0][$i], PDO::PARAM_STR); 
       $succ = $obj->execute(); 
       } 
      } 
    } 

    catch(PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 

這適用於固定數量的項目。
但訪問$ _POST的正確方法是什麼?綁定它並在物品數量未知時進行存儲?

編輯:

如何循環$ _ POST [ 「項目」]直接?

+0

- > lastInsertId()來自我以後需要參考的以前的表格 – Ben

回答

0

檢查$i是否小於項目數量而不是小於固定值。

 for ($i=0;$i<count($item[0]);$i++) { 

     if (!empty($item[0][$i])) { 

或者你可以使用foreach

所有的
 foreach ($item[0] as $value) { 

     if (!empty($value)) { 
+0

好 - 是否也可以直接訪問$ _POST [item]而不是使用temp item []副本? – Ben

+0

是的,你應該可以直接遍歷'$ _POST [「Item」]''。 – Chris

0

首先,你不必一定綁定ID,因爲它是從數據庫本身成了。然後,您可以使用唯一的查詢。

獲取ID:

$id = $this->dbcon->lastInsertId(); 

過濾$_POST['Item']丟棄空值:

$items = array_values(array_filter($_POST['Item'])); 

創建您的查詢字符串:

$query = substr("INSERT INTO invoice_item (ID, item) VALUES " . str_repeat("($id, ?),", count($items)), 0, -1); 

假設$_POST['Items']有三個不可─空值和id = 3,現在$query是:

INSERT INTO invoice_item (ID, item) VALUES (3, ?),(3, ?),(3, ?) 

現在可以準備查詢並執行它一次結合所有參數(如->execute參數使用陣列,參數綁定字符串):

$obj = $this->dbcon->prepare($query); 
$obj->execute($items); 
+0

嗯,這對我來說是新的,我必須檢查並回來;-) – Ben

+0

偉大的工作,看起來有效。用'收費'和'日期'有兩個colums。如何整合它們? – Ben