我正在尝试将SELECT查询的结果作为表单中的隐藏输入元素传递。实际上,我正在为结果中的每一行创建一个表单。
我知道可以在表单中传递一个隐藏数组,所以我认为它也可以传递一行表格。
这是处理它的代码片段:
$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
)
我的错误必须显而易见,但我无法找到它的位置。
答案 0 :(得分:2)
您显然使用PDO
正如您从manual看到的那样 - PDO fetch
方法将fetch_style
作为第一个可选参数。
默认情况下,PDO::FETCH_BOTH
返回由结果集中返回的列名和0索引列号索引的数组
因此,您需要将参数传递给fetch
PDO::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.'">';
}
// ...
}