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

时间:2012-12-11 13:35:30

标签: php mysql

我有多个字段,其名称看起来像name_ $ i,我正在尝试找到一种方法“on submit”,将它们全部发送到数据库。问题是表单是循环的,插入必须能够适应表单中的字段数。有没有办法做到这一点?

<?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());


};
?>"

4 个答案:

答案 0 :(得分:2)

HTML和PHP

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

<input name="name[]" />

然后您可以使用PHP循环遍历这样的字段:

foreach($_POST['name'] as $key=>$value){
    // Insert the value of the form field into a string or query
    // i.e. build the query
    $query .= $value;
}

// Then execute the query for each set of fields

上面的逻辑实际上是不正确的,但它应该让你知道我的意思。

的MySQL

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

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

请注意

由于即将弃用,我们极力阻止使用mysql_函数。相反,大多数PHP程序员现在都在使用PDO / SQLite类。虽然这些看起来很复杂,但它们实际上非常简单,并且提供了一种更安全的SQL语句执行方式。

  1. PDO
  2. SQLite

答案 1 :(得分:0)

INSERT语句的语法应该是这样的,

 INSERT INTO registration (NAME , AGE , ADDRESS, TELEPHONE, EMAIL)
 VALUES ('$NAME', '$AGE', '$ADDRESS','$TELEPHONE', '$EMAIL')

但上面的hte查询容易被SQL INJECTION攻击,请阅读下面的文章,了解如何保护它,

答案 2 :(得分:0)

如果要保留代码的结构,则需要使用双引号而不是撇号

$NAME = $_POST["name_$i"];

将变量输出

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

答案 3 :(得分:0)

使用数组是执行此操作的最佳方法。但是,如果您仍然想要使用计数器,那么您可以使用

for($i = 0;isset($_POST["name_{$i}"]);$i++)
{
 // name found
}

请注意,如果name_xx字段来自复选框,则此代码可能不是最佳的,其中用户选择了项目并跳过了其中的一些。

PS。我发布了这个评论,但它更适合作为答案。