使用PHP将多个同名字段插入MySQL数据库

使用PHP将多个同名字段插入MySQL数据库,php,mysql,Php,Mysql,我有多个字段,它们的名称看起来像name_$I,我正试图找到一种方法,在提交时将它们全部发送到数据库。问题是表单是循环的,插入必须能够适应表单中字段的数量。有办法做到这一点吗 <?php $fldcnt = $_POST['fldcnt']; $i = $_POST['i']; for ($i = 0; $i < $fldcnt; $i++){ $NAME = $_POST['name_$i']; $AGE = $_POST['age_$i']; $ADDRESS = $_POS

我有多个字段,它们的名称看起来像name_$I,我正试图找到一种方法,在提交时将它们全部发送到数据库。问题是表单是循环的,插入必须能够适应表单中字段的数量。有办法做到这一点吗

<?php

$fldcnt = $_POST['fldcnt'];
$i = $_POST['i'];

for ($i = 0; $i < $fldcnt; $i++){
$NAME = $_POST['name_$i'];
$AGE = $_POST['age_$i'];
$ADDRESS = $_POST['address_$i'];
$TELEPHONE = $_POST['telephone_$i'];
$EMAIL = $_POST['email_$i'];



$q_register_new_users = "insert into registration set
        NAME = '$NAME',
        AGE = '$AGE',
        ADDRESS = '$ADDRESS',
        TELEPHONE = '$TELEPHONE',
        EMAIL = '$EMAIL'";

    mysql_query($q_new_products,$connection) or die(mysql_error());


};
?>"

插入语句的语法应该如下所示

 INSERT INTO registration (NAME , AGE , ADDRESS, TELEPHONE, EMAIL)
 VALUES ('$NAME', '$AGE', '$ADDRESS','$TELEPHONE', '$EMAIL')
但是上面的查询在
SQL注入中易受攻击,请阅读下面的文章以了解如何保护它

HTML和PHP 只需调用字段
name[]
,即可将输入字段输入数组。像这样:

<input name="name[]" />
上面的逻辑实际上是不正确的,但它应该让你明白我的意思

MySQL 您的SQL语法不正确,插入MySQL数据库的正确语法为:

INSERT INTO `table` (`field_1`, `field_2`)
VALUES ('value_1', 'value_2')
请注意

由于不赞成使用
mysql\uu
函数,因此非常不鼓励使用这些函数。相反,大多数PHP程序员现在都在使用PDO/SQLite类。虽然这些看起来很复杂,但实际上非常简单,并提供了一种更安全的执行SQL语句的方法


  • 若要保持代码的结构,需要使用双引号,而不是撇号

    $NAME = $_POST["name_$i"];
    
    将变量输出

    $NAME = $_POST['name_'.$i];
    

    使用数组是最好的方法。但如果你还想直接用柜台,你可以用

    for($i = 0;isset($_POST["name_{$i}"]);$i++)
    {
     // name found
    }
    
    请注意,如果name_xx字段来自复选框,则此代码可能不是最佳的,用户在复选框中选择了项目并跳过了其中的一些项目


    另外,我发表了这篇评论,但它更适合作为一个答案

    使用数组作为名称字段,而不是
    name\u$1
    ,这样您就可以轻松地遍历它们您正在构建的变量,这些不是字段名称吗?您是否有任何错误?使用数组是最好的方法。但是,如果您仍然想使用计数器,那么您可以使用($i=0;isset($\u POST[“name”{$i}]);$i++){…}这将更容易使用一些计数器html@shawndreck不要将答案作为评论发布。将答案作为答案发布…$i=1;回音“name_u$i”;回显“名称”\uu$i;>>你的回答不太清楚,似乎你在说他不应该做上面的事,他应该做第二件事。我已经取消了否决票,因为现在你的意图更加明确了。我试图改进这篇文章,希望它现在更加清晰。无论如何,我同意使用数组是一种更好的方法,但我的想法似乎是推荐PDO的一个很好的快速修复+1。mysql_*的消亡需要很长时间:(@Cylindric确实如此,我仍在努力鼓励尽可能多的人迁移到它。一旦迁移完成,它会变得更好、更容易。:-)
    for($i = 0;isset($_POST["name_{$i}"]);$i++)
    {
     // name found
    }