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