如何使用php将html中的表导出到数据库?

时间:2019-04-22 22:59:07

标签: php

我正在尝试使用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;
}

1 个答案:

答案 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

问候,

马特