从单个表单向数据库添加多个记录?

时间:2011-10-21 21:11:53

标签: php mysql sql

我有一个表单,我可以在库存中添加商品。目前,我一次只能添加一个项目。这是表单截图:http://i.imgur.com/SdFBv.png。但我想完成这个:http://i.imgur.com/PoUpV.png(< just a sketch),它使用一个表单向数据库添加多个记录。这些是我目前的形式:

add.html:

<form action="add.php" method="POST">
    <select name="category" id="category">
      <option value="1">Caviar In Canned Jars</option>
    </select>
    <input id="name" name="name" type="text">
    <input id="size" name="size" type="text">
    <input id="sku" name="sku" type="text">
    <input id="price" name="price" type="text">
    <input value="Add" type="submit">
</form>

add.php:

$result = mysql_query("
    INSERT INTO `items` (name, size, sku, price, category_id)
    VALUES ('$_POST[name]', '$_POST[size]', '$_POST[sku]', '$_POST[price]', '$_POST[category]');");
    if (!$result) {
        echo "Something went wrong!";
    } else {
    echo '<script type="text/javascript">
                <!--
                    window.location = "add.html"
                //-->
          </script>';
}

如何使用PHP和SQL(http://i.imgur.com/PoUpV.png)在第二个屏幕截图中实现该功能?

P.S。:我知道它很容易被SQL注入,但它只在本地Web服务器上运行

1 个答案:

答案 0 :(得分:3)

步骤1.通过在输入名称后添加括号,将html位更改为数据数组。

<form action="add.php" method="POST">
    <!-- row 1 -->
    <select name="category[]" id="category">
      <option value="1">Caviar In Canned Jars</option>
    </select>
    <input id="name" name="name[]" type="text">
    <input id="size" name="size[]" type="text">
    <input id="sku" name="sku[]" type="text">
    <input id="price" name="price[]" type="text">
    <!-- row 2 -->
    <select name="category[]" id="category">
      <option value="1">Caviar In Canned Jars</option>
    </select>
    <input id="name" name="name[]" type="text">
    <input id="size" name="size[]" type="text">
    <input id="sku" name="sku[]" type="text">
    <input id="price" name="price[]" type="text">
    <!-- submit at bottom -->
    <input value="Add" type="submit">
</form>

只会提交一份。帖子将把所有数据保存在数组中。

步骤2.循环访问数据,执行单个插入或构建大型查询。

在这个例子中有5行数据。

for($i = 0; $i < 5; $i++)
{
    $name = $_POST['name'][$i];
    $size = $_POST['size'][$i];
    ...

    /* verify data, do sql escaping */

    $result = mysql_query("
        INSERT INTO `items` (name, size, sku, price, category_id)
        VALUES ('$name', '$size', '$sku', '$price', '$category');
    ");

   /* do result handling */
}