PHP过程化创建681题表单 WAMP下提交成功但数据未入库问题
核心问题:HTML结构错误导致表单参数丢失
你的主页面代码将<form>标签放在了</body></html>闭合标签之后,属于完全非法的HTML结构,浏览器会判定表单与页面内的输入框无关,提交时不会携带输入的question_1参数。同时代码中没有补充</form>闭合标签,进一步加剧了解析异常。
修复方式:将<form>标签移动到<body>标签内部、题目输出代码的前面,在提交按钮的代码后面补充</form>闭合标签。动态生成输入框的name属性配置错误
你需要实现681道题的表单,但当前循环输出的所有输入框name都固定为question_1,如果查询返回多行题目,提交时后面的输入框值会直接覆盖前面的,最终PHP只能拿到最后一个输入框的内容。
修复方式:将输入框的name修改为数组格式,例如name="question[<?php echo $row['id']; ?>]",后续PHP接收时用$_POST['question']就能拿到所有题目的答案,键对应题目ID,值对应用户输入的答案。参数传递验证
先在tact1.php的最开头添加代码var_dump($_POST);exit;,提交表单后查看是否能正常打印出question_1的参数值,确认参数传递链路正常,再进行后续入库逻辑排查。数据库侧问题检查
- 确认数据库中
test0表真实存在,且存在question_1字段,字段类型与你要存储的内容匹配(例如字段为int类型时无法存储字符串内容,会导致插入失败) - 确认
test0表没有其他非空必填字段未设置默认值,如果有未赋值的必填字段,插入操作会直接报错失败 - 你的数据库名带有空格,虽然MySQL支持带空格的库名,但很容易引发解析异常,建议将库名修改为不带空格的格式,例如
bilan_carbone,同步修改代码中的数据库连接参数。
- 确认数据库中
代码结构优化建议
tact1.php中将</body></html>写在PHP入库逻辑之前,虽然不影响功能执行,但不符合HTML规范,建议将PHP入库逻辑移动到HTML代码的最前面,调整后HTML输出和逻辑处理分离,更方便排查问题。
内容的提问来源于stack exchange,提问作者Laventure Estivene

