我有多个字段,其名称看起来像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());
};
?>"
答案 0 :(得分:2)
只需调用字段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
上面的逻辑实际上是不正确的,但它应该让你知道我的意思。
您的SQL语法不正确,插入MySQL数据库的正确语法是:
INSERT INTO `table` (`field_1`, `field_2`)
VALUES ('value_1', 'value_2')
请注意
由于即将弃用,我们极力阻止使用mysql_
函数。相反,大多数PHP程序员现在都在使用PDO / SQLite类。虽然这些看起来很复杂,但它们实际上非常简单,并且提供了一种更安全的SQL语句执行方式。
答案 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。我发布了这个评论,但它更适合作为答案。