我正在尝试使用HTML表中的数据将完整表导出到SQL中。我知道如何导出一行,但不了解如何导出多行。有什么建议吗?
<?php while ($row = $result->fetch_assoc()) :?>
<tr>
<form action="insertorder.php" method="post">
<td name="Item_ID[]"><?=$row["item_id"]?></td>
<td name="name[]"><?=$row["ITEM_NAME"]?></td>
<td name="suggested_qty"><?=$row["suggested_qty"]?></td>
<td name="price" class="pricetd"><?=$row["Price_item"]?></td>
<td>
<input type="text" name="editedvalues[]" class="qtyinput" value="<?=$row["suggested_qty"]?>" />
</td>
<td><input name='result[]' class="resultinput" /></td>
</tr>
<?php endwhile?>
<input type="submit" class="btn btn-dark" value="Submit">
</table>
</form>
导出脚本:
$sql = "INSERT INTO ms_order VALUES (item_id, item_name, order_quantity, total)";
for ($i=0; $i<count($_POST['Item_ID']); $i++) {
$sql .= '(\'' . $_POST['Item_ID'][$i] . '\', \'' . $_POST['name'][$i] . '\', \'' . $_POST['editedvalues'][$i] . '\', \'' . $_POST['result'][$i] . '\')';
if ($i<count($_POST['Item_ID']) - 1) {
$sql .= ',';
}
echo $sql;
}
答案 0 :(得分:0)
代码上的问题是,您正在为while循环中的每个获取的行创建一个新表单。这样,每当提交表单时,您仅发送一行。为了解决这个问题,您应该将form标记放在while循环之外。另外,让我与您分享一种更干净的方法来完成您的工作:
$sql = "INSERT INTO ms_order (item_id, item_name, order_quantity, total) VALUES ";
$sql .= implode(',', array_map(function($item_id, $name, $editedvalues, $result) {
return <<<SQL
({$item_id}, {$name}, {$editedvalues}, {$result})
SQL;
}, $_POST['Item_ID'], $_POST['name'], $_POST['editedvalues'], $_POST['result']));
这就是它的作用:
array_map
函数获取给定数组的每个索引,您可以根据需要传递任意数量的数组作为参数,它将遍历每个索引,因此您将能够使用每个值来操纵它并返回它。
array_map
的每次迭代都会创建一个新数组,因此最终您将获得一个包含返回结果的数组数组。最后,当您想制作多个INSERT
时,您可以使用implode
函数将每个数组与冒号连接起来。
请注意,您应该清理$ _POST值,因为它可能容易受到SQL注入和其他安全性问题的影响。有关更多信息,请查看here。
问候,
马特