2014-02-28 63 views
0

我有一個帶有動態(用戶確定)行數的html表單,每個行都有幾個輸入;我試圖實現一個MySQL查詢,它會將行 插入到數據庫表中,或多或少地按行進行行(儘管此表的外部還有一個$ _POSTing值,我也將其添加到INSERT中)。從php foreach插入多行

我檢索這些值是這樣的:

<?php 
    if (isset($_POST['submit'])) { 

     $lineItems = array(); 
     foreach ($_POST['date'] as $i => $value) { 
      $customer = $_POST['customer'][$i]; // this value is from *outside* the line items table 
      $date = $_POST['date'][$i]; 
      $time = $_POST['time'][$i]; 
      $fee = $_POST['fee'][$i]; 

      $lineItems[] = "('$customer', '$date', '$time', '$fee')"; 

     // I realize the query should be outside the loop, but what I'm trying to do is something like this (pseudo-code): 
      $query = "INSERT INTO Line_Items (CUSTOMER, DATE, TIME, FEE) VALUES ". implode(", ", $lineItems) 
      . "ON DUPLICATE KEY UPDATE 
      CUSTOMER = VALUES(CUSTOMER), 
      DATE  = VALUES(DATE), 
      TIME  = VALUES(TIME), 
      FEE  = VALUES(FEE) 
      "; 

     } 
    } 
?> 

與此查詢 - 內或外循環 - 我只插入從輸入的最後一個行值;有人可以請示例如何構造一個查詢插入多個行項目和適當的查詢如何 ?非常感謝。

+2

請你寫之前** **任何更多SQL接口代碼,您必須閱讀[適當的SQL轉義](http://bobby-tables.com/php)以避免嚴​​重的[SQL注入漏洞](http://bobby-tables.com/)你在這裏。 **從不**將'$ _POST'數據直接放入查詢中。 – tadman

+0

它似乎工作正常,如果你把插入語句的循環之外... – avisheks

+0

謝謝@tadman。我只是想把這件事情聯繫起來,我向你保證我會重新考慮注射預防。 – user1613163

回答

0

在循環內部,您會在後面的每一行中獲得一行 - 在循環外部,您只會插入最後一行。

如果你只需要最後一行 - 那麼就不需要遍歷整個集合來實現它。

你可以指望的行 - 然後直接針對最後一排 - 看到PHP

count() 
+0

謝謝。我當然想要所有的行,而不是最後一行。 – user1613163

+0

謝謝。我當然想要所有的行,而不是最後一行。修改後的查詢仍然在循環中,我得到一個mysql錯誤,與ON DUPLICATE KEY部分相關的問題。甩掉我的頭髮 – user1613163

0

行更改
$lineItems[] = "('$customer', '$date', '$time', '$fee')";
$lineItems[] = "(".$customer.",".$date.",".$time.",".$fee.")";

+0

謝謝@ user2340218。現在,使用這個: $ lineItems [] =「(」。$ customer。「,」。$ date。「,」。$ time。「,」。$ fee。「)」; $ queryx =「INSERT INTO Invoice_Hours(CUSTOMER,DATE,TIME,FEE)VALUES」。 implode(「,」,$ lineItems)。 「ON DUPLICATE密鑰更新 CUSTOMER = VALUES(客戶), DATE = VALUES(DATE), TIME = VALUES(TIME), FEE = VALUES(FEE) 」; 我收到一個mysql錯誤,重新:ON DUPLICATE。任何建議? – user1613163

+0

「Line_items」表中的唯一鍵是什麼?如果「customer」是唯一鍵或主鍵,則使用以下內容:「INSERT INTO Line_Items(客戶,日期,時間,費用)值」。 implode(「,」,$ lineItems)。 「ON DUPLICATE KEY UPDATE DATE = VALUES(DATE), TIME = VALUES(TIME), FEE = VALUES(FEE);」 – ahPo