【问题标题】:PHP POST multiple rows into MySQLPHP POST 多行到 MySQL
【发布时间】:2011-01-26 20:21:03
【问题描述】:

我有一张名为 fruits 的桌子:

id 水果
1 苹果
1 香蕉
2 苹果
2 苹果
2梨

我希望能够使用 PHP 一次添加多行。

我尝试有两组两个文本框(用于 id 和水果),但只插入 1 行,使用最后一组文本框。

编辑:

如果我有这样的表怎么办:

id 水果口味
1苹果好
1 香蕉 好的
2苹果好
2苹果坏
2梨好

【问题讨论】:

    标签: php mysql rows


    【解决方案1】:

    您需要使用方括号[] 正确命名您的文本框以形成一个数组,然后循环遍历您的 POST 数组以插入数据。在使用 mysql_real_escape_string 或准备好的查询运行查询之前,请确保您正在转义数据。

    编辑:更新示例,因为 OP 将信息附加到问题中。

    在您提供的扩展示例中,taste 似乎只有几个选择。在这种情况下,我会在文本框上使用 <select> 元素。查看我的示例,了解我个人将如何做到这一点。

    表格
    显着变化:使用 PHP 中的简单循环,您可以指定要显示的字段数,并轻松地将其他选项添加到口味选择框。我在[] 中放置了一个任意数字,以确保我们在处理表单时将水果与味道联系起来。

    <?php
    $n = 5; //Number of fields to show
    $tastes = array('Great', 'Good', 'Okay', 'Bad', 'Horrible');
    
    for($i=0;$i<$n;$i++) {
      echo '<p>';
      echo '<input type="text" name="fruit['.$i.']" /> ';
      echo '<select name="taste['.$i.']">';
      foreach($tastes as $t) {
        echo '<option value="'.htmlentities($t).'">'.$t.'</option>';
      }
      echo '</select>';
      echo '</p>';
    }
    echo '<input type="submit" name="submit" value="Submit" />';
    ?>
    

    流程代码
    显着变化:我正在检查以确保水果具有价值,否则它不会插入。我正在使用该任意值(即数组键$k)来选择与水果相匹配的味道。

    <?php
    if($_POST['submit']) {
      foreach($_POST['fruit'] as $k => $v) {
        if(!empty($v)) {
          $query = "INSERT INTO fruits (fruit, taste) VALUE ('".mysql_real_escape_string($v)."', '".mysql_real_escape_string($_POST['taste'][$k])."')";
          mysql_query($query);
        }
      }
    }
    ?>
    

    【讨论】:

    • 就性能而言,一次插入具有多个值会更好。
    • 我已更新我的帖子以(希望)回答您修改后的问题。
    【解决方案2】:

    使用 implode 函数进行单次插入。

    你的 HTML

    <input type="text" name="fruit[]" />
    <input type="text" name="fruit[]" />
    <input type="text" name="fruit[]" />
    

    你的 PHP

    foreach($_POST['fruit'] as $fruit) $values[] = "('".mysql_real_escape_string($fruit)."')";
    if(count($values) > 0) mysql_query("INSERT INTO fruits (fruitName) VALUES " . implode(',', $values));
    

    【讨论】:

      【解决方案3】:

      MySQL 支持在单个查询中进行多次插入:

      INSERT INTO table (field1, field2) VALUES (values1a, values2a), (values1b, values2b), etc...
      

      【讨论】:

        【解决方案4】:

        例如,您可以制作一个 html 元素数组

        在html中

        <form action='save.php' method='post'/>
        <input name='fruits[]' value='' />
        <input name='fruits[]' value='' />
        <input name='fruits[]' value='' />
        </form>
        

        然后在save.php中

        $fruits = '';
        foreach($_POST['fruits'] as $fruit) {
         $fruits .= "({$fruit}),"
        }
        
         $fruits = rtrim($fruits,',');
        
        $sql = "INSERT INTO fruits(fruit) VALUES {$fruits}";
        

        【讨论】:

          【解决方案5】:

          在您的插入语句中添加值,如下所示:

          INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

          你的例子,

          INSERT INTO fruits (fruit) VALUES ('Orange'),('Lemon'),('Lime');

          应该可以。

          http://dev.mysql.com/doc/refman/5.5/en/insert.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-11-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-09
            • 1970-01-01
            相关资源
            最近更新 更多