2016-11-14 18 views
0

フォームの隠れた入力要素としてSELECTクエリの結果を渡そうとしています。実際には、結果のすべての行に対してフォームを作成しています。PHP:テーブル行をフォームの隠れ要素として渡します

隠し配列をフォームに渡すことができるので、テーブルの行を渡すこともできます。

これは、それを処理するコードの抜粋である:

$res = $conn->query($query); 
while($row = $res->fetch()) { 

    echo '<form action="action.php" method="post">'; 

    foreach ($row as $element) { 
     echo '<input type="hidden" name="row[]" value="'.$element.'">'; 
    } 

    echo '<input type="submit" name="delete" value="Delete">'; 
    echo "</form>"; 
} 

すぐ、action.phpスクリプトが受信したばかりの行印刷:

<?php 
    echo "<pre>"; print_r($_POST['row']); echo "</pre>"; 
?> 

をMySQLでクエリの結果であります

+--------+-------------+-----------+----------+------------+ 
| numero | id_producto | id_tienda | cantidad | f_pedido | 
+--------+-------------+-----------+----------+------------+ 
|  7 | IXUS115HSAZ |   3 |  2 | 2015-10-01 | 
+--------+-------------+-----------+----------+------------+ 
1 row in set (0.01 sec) 

しかしaction.php内の行のますprint_rは、すべてのフィールドを倍増:

Array 
(
    [0] => 7 
    [1] => 7 
    [2] => IXUS115HSAZ 
    [3] => IXUS115HSAZ 
    [4] => 3 
    [5] => 3 
    [6] => 2 
    [7] => 2 
    [8] => 2015-10-01 
    [9] => 2015-10-01 
) 

私の間違いは何らかの形で明らかにする必要がありますが、どこにあるのかわかりません。 PDO fetch方法は、最初のオプションパラメータfetch_styleとして取る -

+2

キーは 'PDO :: FETCH_ASSOC'です –

+1

これを見てください(http://php.net/manual/en/mysqli-result.fetch-array.php)。デフォルトでは、数値と結合の両方をフェッチしています – cmorrissey

+0

assoc配列のインデックスをアクションスクリプトの名前として取得する方法は?フォームでfetch(PDO :: FETCH_ASSOC)を使用しても、print_r()は数値インデックスのみを表示します。 – rodrunner

答えて

2

あなたは明らかPDO

そして、あなたがmanualから見ることができるように使用します。

、デフォルトでは

をインデックスとする配列を返すPDO::FETCH_BOTHある列名との両方0インデックスあなたの結果で返される列番号だから

を設定し、以下を行う必要があり引数 fetchPDO::FETCH_ASSOCまたは PDO::FETCH_NUMのいずれかを渡します。

while($row = $res->fetch(PDO::FETCH_ASSOC)) { 

    // ... 

    // use `$field_name` to use database field name 
    foreach ($row as $field_name => $element) { 
     echo '<input type="hidden" name="row[' . $field_name . ']" value="'.$element.'">'; 
    } 

    // ... 
} 
+0

が動作しますが、PDO :: FETCH_ASSOCを使用しても、アクションスクリプトのprint_r($ _ POST ['row'])は常に数値インデックスを表示します。 assocインデックス(つまり、$ _POST ['row'] [1])の代わりに$ _POST ['row'] ['id_producto']を使用する方法はありますか? – rodrunner

+0

確かに、更新を参照してください。 –

関連する問題