PHP多复选框值插入数据库问题及修正($param_keyword拼写错误)
问题解决:复选框值无法插入数据库
更新说明
问题已解决,原因是**$param_keyword**存在拼写错误
问题描述
我制作了一个可接收多复选框值的表单,用于将数据插入数据库。数据库连接正常,能够插入name字段的值,但无法插入复选框的值。我不确定问题出在哪里,因为没有报错信息,且能看到复选框值拼接成的字符串。
点击提交按钮后,我打印keywordArr查看值:
housekeeping,chemical and dangerous material Something went wrong. Please try again later.
问题分析
仔细看你的PHP代码,在绑定数据库参数时出现了一个很容易忽略的拼写错误:你定义的变量是$parm_keyword(少了一个字母a),但绑定语句里用的是$param_keyword,这就导致数据库根本接收不到复选框拼接后的值,最终执行插入操作失败。
修正后的PHP代码
<?php require_once("includes/dbConfig.php"); // get input when form is submitted, using the clean functon to clean inputs if ($_SERVER["REQUEST_METHOD"] == "POST") { //name validation if (empty(clean($_POST["name"]))) { $nameErr = "Name is required"; } else { $name = clean($_POST["name"]); // check if name only contains letters and whitespace if (!preg_match("/^[a-zA-Z ]*$", $name)) { $nameErr = "Only letters and white space allowed"; } } $keyword = $_POST["keyword"]; echo $keywordArr = implode(",", $keyword); // check input erros before inserting in database if (empty($nameErr)) { // Prepare a INSERT statement $sql = "INSERT INTO site (name,keyword) VALUES (?,?)"; if ($stmt = mysqli_prepare($conn, $sql)) { // Bind variables to the prepared statement as parameters mysqli_stmt_bind_param($stmt, "ss", $param_name, $param_keyword); // Set parameters $param_name = $name; $param_keyword = $keywordArr; // 修正了变量拼写错误 if (mysqli_stmt_execute($stmt)) { // Alert to redirect echo ("<SCRIPT LANGUAGE='JavaScript'> window.alert('Successfully Sent!') window.location.href='index.php'; </SCRIPT>"); } else { echo "Something went wrong. Please try again later."; } } // Close statement mysqli_stmt_close($stmt); } // Close connection mysqli_close($conn); } ?>
补充建议
- 这类拼写错误很难靠肉眼排查,建议开发时开启PHP的错误提示,比如在代码开头加上:
error_reporting(E_ALL); ini_set('display_errors', 1);,这样变量未定义的错误会直接显示出来,能帮你快速定位问题。 - 你的HTML表单写法是完全正确的,
name="keyword[]"的格式可以正确接收多个复选框的选中值,不需要修改。
内容的提问来源于stack exchange,提问作者user3111115
相关产品推荐
相关产品推荐

