2011-10-06 23 views
1

私のコードをうまく動作させるのに苦労しています。私は基本的な考え方を理解していますが、それを働かせることはできません。爆縮を使用して複数の行を挿入する

<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データベースに複数の行を挿入したいフォームを処理するためのスクリプトを持っている:私は、複数の行を持つフォームを持っています。

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) 

誰かが私のフォームとスクリプトの上に見て、私に教えてくださいすることができ:私はときに私「印刷」私はこれを取得するクエリがあるため何か問題がある知っている

<?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); 
} 
?> 

:私のスクリプトは次のようになります私が間違ってやっていること、なぜimplodeメソッドを使ってデータベースに複数の行を挿入していないのか。ありがとうございました。

答えて

1

あなた$_POSTスーパーグローバルは、実際にこのようになります:あなたがforeach($_POST as $row)を行うと、あなたが期待どおりに、各フィールドの代わりに、各フィールドの行をループしている

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

。そのようなものとして、あなたは大部分が空白(私はそれをテストするために空白のフォームを提出したと思います)を取得し、次にSubmitから '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

警告:array_map()[function.array-map]:引数9は、/ nfs /にある配列でなければなりません。 c06/h04/mnt/95658/domains/bc.wf-realty.com/html/contacts/multiscript.php on line 5 警告:/ nfs/c06/h04/mnt/95658のforeach()に無効な引数が指定されています。 /domains/bc.wf-realty.com/html/contacts/multiscript.php on line 11 – user982853

+0

@ user982853「foreach」を変更して、キーと値のペアを使用します。これを反映する答えを更新しました。 – Farray

0

はもちろん

foreach($_POST as $values)

に反対

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

を試してみてください、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を$ index => $行){\t $ values [] = "("。$ row ['field_PK']。、 "。$ row ['sql_fk']。 $ row ['field_px']。 "、"。$ row ['field_code']。 "、" $ row ['account_fk']。 ['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); } ?> – 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']を$ index => $行){\t $ values [] = "("。$ row ['field_PK']。 "、"。$ row ['sql_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); } ?> – user982853

関連する問題