如何将来自复选框输入的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()
“保护”它之后,您是否尝试过 echo
ing?也许结果不完全是你想要的?我还注意到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表中的主要内容,如果未能解决你的问题,请参考以下文章