2011-10-06 67 views
1

我很難讓我的代碼正常工作。我掌握了基本概念,但無法實現。我有多個行的形式:使用implode插入多行

<form action="multiscript.php" method="post" id="form"> 
<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td><input type="text" name="field_PK[]" id="field_PK" /></td> 
<td><input type="text" name="sql_fk[]" id="sql_fk" /></td> 
<td><input type="text" name="account_fk[]" id="account_fk" /></td> 
<td><input type="text" name="field_code[]" id="field_code" /></td> 
<td><input type="text" name="field_name[]" id="field_name" /></td> 
<td><input type="text" name="field_px[]" id="field_px" /></td> 
<td><input type="text" name="field_order[]" id="field_order" /></td> 
</tr> 
<tr> 
<td><input type="text" name="field_PK[]" id="field_PK" /></td> 
<td><input type="text" name="sql_fk[]" id="sql_fk" /></td> 
<td><input type="text" name="account_fk[]" id="account_fk" /></td> 
<td><input type="text" name="field_code[]" id="field_code" /></td> 
<td><input type="text" name="field_name[]" id="field_name" /></td> 
<td><input type="text" name="field_px[]" id="field_px" /></td> 
<td><input type="text" name="field_order[]" id="field_order" /></td> 
</tr> 
</table> 
<input type="submit" name="button" id="button" value="Submit" /> 
</form> 

我然後有一個腳本來處理,我想多行插入我的MySQL數據庫的形式。我的腳本是這樣的:

<?php 
$values = array();?> 
<?php 
foreach($_POST as $row) { 
$values[] = "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")"; 
} 
if(!empty($values)) { 
$query = "INSERT INTO `Table_fields` (field_PK, sql_fk, account_fk, field_code, field_name, field_px, field_order) VALUES ". implode(',',$values); 

mysql_query($query); 
} 
?> 

我知道有一些錯誤的,因爲當我「打印」查詢我得到這個:

INSERT INTO `Table_fields` (field_PK, sql_fk, account_fk, field_code, field_name, field_px, field_order) VALUES (,,,,,,),(,,,,,,),(,,,,,,),(,,,,,,),(,,,,,,),(,,,,,,),(,,,,,,),(S,S,S,S,S,S,S) 

可有人請查看我的表單和腳本,並告訴我我做錯了什麼,以及爲什麼它沒有使用implode方法將多行插入到我的數據庫中。謝謝。

回答

1

$_POST超全局實際上是這樣的:

Array 
(
    [field_PK] => Array 
     (
      [0] => value1 
      [1] => value2 
     ) 
    [sql_fk] => ... 
    [account_fk] => ... 
    [field_code] => ... 
    [field_name] => ... 
    [field_px] => ... 
    [field_order] => ... 
    [button] => Submit 
) 

當你做foreach($_POST as $row)你循環通過每個字段,而不是字段的每一行如你預期。因此,你大部分空白(我猜你提交了一個空白表格來測試它),然後是提交'S'。

您可以按照您的要求進行操作,但您需要首先將您的$_POST值轉置。 This answer has a very simple transpose function.(他稱之爲「flipDiagonally」,但它是一種典型的轉換)。

使用從鏈接答案的功能,你可以這樣做:

$transposed = transpose($_POST); 

foreach($transposed as $index => $row) { 
    $values[] = "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")"; 
} 
+0

我剪下了一個粘貼的函數代碼,並且瘋狂地改變了我的代碼,現在它告訴我了 - Warning:array_map()[function.array-map]:參數#9應該是/ nfs /第5行的c06/h04/mnt/95658/domains/bc.wf-realty.com/html/contacts/multiscript.php 警告:在/ nfs/c06/h04/mnt/95658中爲foreach /domains/bc.wf-realty.com/html/contacts/multiscript.php第11行 – user982853

+0

@ user982853改變你的'foreach'使用鍵值對。更新了答案以反映這一點。 – Farray

0

嘗試

foreach($_POST as $index => $row)

反對

foreach($_POST as $values)

當然,不要忘了SQL注入攻擊和類似一般的故事。

編輯:

看到所有的字段都是文本類型,不管他們是否是空的或不 - 他們會被髮送。他們也有着相同的指標,所以你可以在一個更優雅的方式鍵入:

foreach($_POST['field_pk'] as $index => $values) 
{ 
    $values[] = "(" . $_POST[$index]['field_PK'] . "," . $_POST[$index]['sql_fk'] . "," . $_POST[$index]['account_fk']. "," . $_POST[$index]['field_code']. "," . $_POST[$index]['field_name']. "," . $_POST[$index]['field_px']. "," . $_POST[$index]['field_order'].")"; 

} 

我必須承認,不讀正確領導對我給予了錯誤的答案。應用相同的SQL注入預防規則,確保您的輸入已過濾!

+0

讓我先說謝謝你的迴應開始。我嘗試了您的建議,但仍然無法正常工作。我的代碼現在看起來像這樣: <?php $ values = array(); foreach($ _POST as $ index => $ row){\t $ values [] =「(」。$ row ['field_PK']。「,」。$ row ['sql_fk']。「,」。 $ row ['account_fk']。「,」。$ row ['field_code']。「,」。$ row ['field_name']。「,」。$ row ['field_px']。「,」。$ row [ 'field_order']。「)」;打印$ query =「INSERT INTO Table_fields」(field_PK,sql_fk,account_fk,field_code,field_name,field_px,field_order)VALUES「。內爆( '',$值); mysql_query($ query); } ?> – user982853

+0

@ user982853 - 回答編輯。 – Furicane

+0

我試過以上,但即時通訊不知道如果我做得對嗎?當我打印查詢時,我仍然得到:INSERT INTO'Table_fields'(field_PK,sql_fk,account_fk,field_code,field_name,field_px,field_order)VALUES(,,,,,,),(,,,,,,)。我不提交一個空白表單,當我print_r $ _Post數組時,它有數據。 – user982853

0

您不想迭代所有POST變量。相反,你想遍歷$ _POST [「field_PK」]數組。

+0

感謝您的回覆。我添加了field_PK,但仍然收到相同的錯誤。我的腳本現在看起來像這樣: <?php $ values = array(); foreach($ _POST ['field_PK'] as $ index => $ row){$ row ['sql_fk'] $ row ['field_PK']。「,。$ row ['sql_fk'] 「。」,「。$ row ['account_fk']。」,「。$ row ['field_code']。」,「。$ row ['field_name']。」,「。$ row ['field_px']。」 ,「。$ row ['field_order']。」)「;打印$ query =「INSERT INTO Table_fields」(field_PK,sql_fk,account_fk,field_code,field_name,field_px,field_order)VALUES「。內爆( '',$值); mysql_query($ query); } ?> – user982853