如何将来自复选框输入的html表单中的数据粘贴到mysql表中

Posted

技术标签:

【中文标题】如何将来自复选框输入的html表单中的数据粘贴到mysql表中【英文标题】:how to paste data from html form from checkbox input into mysql table 【发布时间】:2019-11-10 12:29:25 【问题描述】:

我的问题是从元素<input type = checkbox>html表单插入新数据,其他输入字段html表单php脚本正确插入mysql表,没有错误。

第一个 html 表单 sn-p - 这是我当前的复选框(有更多选项):

<input  id="element_5" type="checkbox"  name= "skupiny_rp[]" value="C" checked> C <br>
<input  id="element_5" type="checkbox"  name= "skupiny_rp[]" value="CE" > CE <br>
<input  id="element_5" type="checkbox"  name= "skupiny_rp[]" value="D"> D <br>
<input  id="element_5" type="checkbox"  name= "skupiny_rp[]" value="DE"> DE <br>

我使用数组来存储复选框中的更多值。 我的想法如下: 我想使用在将这些值插入 csv 文件时使用的过程 - 这个过程有效,在这里插入 MySQL 表时不起作用。这个数组skupiny_rp[]我用php implode() php函数转换了这个字段,放到csv中。但是从 mysql 的 implode 函数插入 mysql 表是行不通的。

这是一个php和sql sn-p:html表单的所有输入字段在插入mysql表之前使用mysqli_real_escape_string()处理

这里准备sql查询

$query = "INSERT INTO skoleni (jmeno, prijmeni, narozen, ulice_cp,
          mesto, psc, zeme, cislo_rp, skupina_rp,email,telefon, 
          termin_skoleni)
          VALUES ('$jmeno', '$prijmeni', '$narozen', '$ulice_cp', 
                  '$mesto', '$psc','$zeme', '$cislo_rp', '$skupina_rp', 
                  '$email', '$telefon', '$termin')";

这里是查询的执行及其成功验证:

if (mysqli_query($SQLconn,$query)):
    echo "Záznam vytvořen.";
    close($SQLconn);
else:
    echo "Vytvoření záznamu selhalo." ;
endif;

此源代码几乎可以正常工作。但是在我看来,从 html 复选框显示值似乎无法解决,有人可以建议如何在 MySQL 表中显示 mysql 表中来自skupiny_rp[] 的所有选定值。

这是Mysql中的配置表:

CREATE TABLE skoleni (
 id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 registrovan TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 jmeno VARCHAR(10) NOT NULL,
 prijmeni VARCHAR(30) NOT NULL,
 narozen VARCHAR(20) NOT NULL,
 ulice_cp VARCHAR(255) NOT NULL,
 mesto VARCHAR(50) NOT NULL,
 psc VARCHAR(5) NOT NULL,
 zeme VARCHAR(50) NOT NULL,
 cislo_rp VARCHAR(10) NOT NULL,
 skupina_rp VARCHAR(10) NOT NULL,
 email VARCHAR(50) NOT NULL,
 telefon VARCHAR(9) NOT NULL,
 termin_skoleni VARCHAR(50) NOT NULL)

【问题讨论】:

另外,请参阅 sql 注入以及准备和绑定查询的重要性 在将 PHP 变量 $query 放在一起并使用 mysqli_real_escape_string()“保护”它之后,您是否尝试过 echoing?也许结果不完全是你想要的?我还注意到skoleni 表中的skupina_rp 列定义为VARCHAR(10)。如果您选择了许多复选框,这可能太短了。是的,就像@Strawberry 提到的那样:您可能应该考虑使用准备好的语句,请参见此处:php.net/manual/en/mysqli.prepare.php。 How to get the error message in MySQLi? 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough! 【参考方案1】:

假设您的 PHP 脚本中的值已经“到达” - 并且 skupiny_rp[] 复选框的值已与 implode() 组合到 PHP 变量 skupina_rp 中,那么可能使用以下 insert satement “准备声明”对你有帮助吗? (代码未经测试!)

if ($stmt = mysqli_prepare($SQLconn, 
   "INSERT INTO skoleni (jmeno, prijmeni, narozen, ulice_cp,
       mesto, psc, zeme, cislo_rp, skupina_rp,email,telefon, 
       termin_skoleni) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)" )) 
    /* bind parameters for markers */
    mysqli_stmt_bind_param($stmt, "ssssssssssss", $jmeno, $prijmeni,
       $narozen, $ulice_cp, $mesto, $psc, $zeme, $cislo_rp, 
       $skupina_rp, $email, $telefon, $termin);    
    /* execute query */
    mysqli_stmt_execute($stmt);
    if (mysqli_stmt_affected_rows($stmt))  echo "Záznam vytvořen.";
    else  echo "Vytvoření záznamu selhalo.";
    // close($SQLconn);

而且 - 正如我在评论中提到的:您的列 skupina_rp 可能不够宽,无法存储包含所有复选框值的字符串。

我现在已经稍微测试了上面的内容,请参见此处:http://phpfiddle.org/main/code/yywg-c6dz

【讨论】:

【参考方案2】:

我的问题已经解决了。 问题一直是在函数“mysqli()”中错误定义的数据库名称,

$sqlconn = new mysqli($servername, $username, $password, $dbName);

$dbName 中的无效参数导致我的错误,

哪里总是错误的数据库名称。 PHP 脚本现在可以正常工作了。

给所有有同样问题的人的建议,当来自 HTML 表单的数据进入服务器,但数据没有写入表中。

    检查连接初始化参数(在我的例子中是$ sqlconn),重点是访问MySQL服务器的参数。 检查您的 SQL 查询,主要关注 SQL 查询中定义的表名和列名(与直接在 SQL 服务器上的表名和列名进行物理比较)。

【讨论】:

以上是关于如何将来自复选框输入的html表单中的数据粘贴到mysql表中的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 将 JSON 数据放入 html 表单输入复选框

如何判断事件是不是来自 C# 中的用户输入?

HTML表单(来自MDN的总结)

如何将表单中的复选框序列化为Json数据

如何在表单中使用复选框并控制输入字段

如何通过ajax从表单发送POST数据数组?