2013-08-31 21 views
1

我想獲取輸入到表單中的數據,並使用一個帖子在同一頁面上處理它,這將獲取所有數據並將其插入到表中一個分貝。這是一個存在於.asp頁面上的表單,我試圖將其轉換爲php。該表格用於從商店中輸入缺貨數量。使用foreach從動態數組插入數組

每一行看起來是這樣的:

Number |  Department   | Insp Type | Qty | Memo 
______________________________________________________________ 
1  | Bakery And Deli (OOS)  | OOS | 1 | george 
2  | Produce     | OOS | 6 | apples 

等等....

有用於〜24個部門的行。如果將新行添加到數據庫中,表單將動態更新並顯示新行。唯一的用戶輸入數據是數量和備註。其他的是由表單之前的sql查詢預先填充的。用我現有的代碼,當我回應我的$ sqli(插入查詢),這是我得到:

我也想返回一個計數,如果'項目'輸入到數量在窗體上的字段。

任何幫助將不勝感激。過去幾天我一直在想辦法解決這個問題。我一直在搜索谷歌,試圖弄清楚這一點,但我可以完全陷入困境。預先感謝您的幫助。

+0

編輯3似乎確定。 –

回答

3

這是因爲你在你的foreach循環中創建了你的SQL語句。

我也建議使用輸入數組(如$_POST['txtStoreID'][0]等等)使事情變得更簡單。

就你而言,我假設你的$_POST陣列中的字段被命名爲:txtStoreID_1

// First, create array for all results 
$res_arr = array(); 

// Load array with all results 
foreach ($_POST as $key=>$value) { 
    $tmp_name = explode('_',$key,2); 
    $pri_key = $tmp_name[1]; // number 
    $sec_key = $tmp_name[0]; // name 
    if (!is_array($res_arr[$pri_key])) { 
     $res_arr[$pri_key] = array(); 
    } 
    // This creates for example: $res_arr['1']['txtStoreID'] containing 'Store_31' 
    $res_arr[$pri_key][$sec_key] = $value; 
} 

// Next, create insert statements 
foreach ($res_arr as $data) { // Now you get $data['txtStoreID'] etc. 
    $sqli = "INSERT INTO Inspection_tbl (Store_ID, Dept_ID, Quantity, Memo, User_ID, Date_Time) "; 
    $sqli .= "Values ('".$data['txtStoreID']."', "; 
    $sqli .= "'".$data['txtDeptID']."', "; 
    $sqli .= "'".$data['txtQuantity']."', "; 
    $sqli .= "'".$data['txtMemo']."', "; 
    $sqli .= "'".$data['txtUserID']."', "; 
    $sqli .= "'now()')"; 
    echo $sqli; // Check query 
} 

請注意,這只是對您輸入的字段計算的猜測,雖然。

編輯:

除了從is_array()改變我做了,我的猜測是,你需要的DEPTID,而不是爲部門文本值。

所以,代碼的底部應該是:

// Next, create insert statements 
foreach ($res_arr as $deptID=>$data) { // Now you get $data['txtStoreID'] etc. 
    $sqli = "INSERT INTO Inspection_tbl (Store_ID, Dept_ID, Quantity, Memo, User_ID, Date_Time) "; 
    $sqli .= "Values ('".$data['txtStoreID']."', "; 
    $sqli .= "'".$deptID."', "; 
    $sqli .= "'".$data['txtQuantity']."', "; 
    $sqli .= "'".$data['txtMemo']."', "; 
    $sqli .= "'".$data['txtUserID']."', "; 
    $sqli .= "'now()')"; 
    echo $sqli; // Check query 
} 
+0

是的,這些字段被命名爲諸如txtStoreID_ $ DeptID,txtQuantity_ $ DeptID等。我評論了我的數組部分,並將其放入我的代碼中。我放了一個回聲「測試1」;回聲「測試2」;等等,因爲它沒有處理到顯示sqli回顯的地步。它在!isarray之前停止並停止。所以低於該行的任何內容都沒有被處理。有任何想法嗎? – James

+0

哎呀,必須是'is_array()'!沒注意到那個!檢查更新! –

+0

好的,我做了你所建議的改變。它現在到達SQL查詢回聲。但是這些字段是空的。 SQL查詢如下所示: INSERT INTO Inspection_tbl(Store_ID,Dept_ID,Quantity,Memo,User_ID,Date_Time)值('','','','','now()') – James