如何通过 PHP 将未知数量的 HTML 表单字段插入 MySQL?

Posted

技术标签:

【中文标题】如何通过 PHP 将未知数量的 HTML 表单字段插入 MySQL?【英文标题】:How to Insert unknown amount of HTML form fields into MySQL via PHP? 【发布时间】:2019-05-21 02:09:09 【问题描述】:

我有一个功能性的 html 表单,我正在通过 php 将它的内容插入 SQL 数据库。我需要找到一种方法,只需单击即可插入多行(客户将根据需要动态添加更多表单字段)。

这是 HTML 字段(表单的一部分):

<label for="code">Súťažný kód</label>
<input type="text" name="code" id="code">

然后我使用 jQuery 将字段值传递给外部 .php 文件:

jQuery.ajax(
  url:"insert.php",
  method:"POST",
  data:form_data,
  success:function(data) 
    console.log(data);
  
);

在 insert.php 中,我连接到我的 mysql 数据库,并得到如下形式的值:

$code = $_REQUEST['code'];

然后,我能够运行必要的 SQL 查询来插入行,以及所有必要的值(包括“代码”)。

此表格将用作比赛的提交表格。在“代码”表单字段旁边会有一个加号图标(或类似的东西),通过单击该图标,将出现另一个代码字段。用户最多可以向 20 个不同的字段添加 20 个代码。

我的问题是,如何将所有表单(或所有代码)传递给 .php 文件,并将它们作为单独的行插入到我的 MySQL 数据库中?

示例:

用户发送一个插入了 3 个代码的表单。生成的表单如下所示:

[firstName]
[lastName]
[code]
[code]
[code]

发送表单后,这三行应该添加到数据库中:

#  | firstName | lastName | code
----------------------------------
1  | John      | Doe      | 12345
2  | John      | Doe      | ABCDE
3  | John      | Doe      | 55555

【问题讨论】:

【参考方案1】:

将字段更改为数组,例如:

<input type="text" name="code[]" id="code1">
<input type="text" name="code[]" id="code2">

然后你可以在 PHP 中访问它:

foreach ($_REQUEST['code'] as $key => $val) 
   sql_insert_function($_REQUEST['firstName'], $_REQUEST['lastName'], $val);

作为一般建议,请记住验证并转义您要插入数据库的所有数据。

【讨论】:

从表单的角度来看,这是正确的方法。但是mysql_insert() 是什么? 想象一下它是用于插入 sql 的任何函数的伪代码。将在名称中澄清这一点。 这很有帮助,我不知道字段可以是数组。是的,我正在使用准备好的语句和其他一些安全方法。

以上是关于如何通过 PHP 将未知数量的 HTML 表单字段插入 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core MVC 如何针对强类型模型发布未知数量的字段

具有未知数量的复选框字段和多个操作的 Django 表单

用户通过PHP填写表单后如何自动生成页面?

如何在html表单中隐藏文本字段

PHP 表单验证

如何计算 php 中未知数量数组的交集?