Bootstrap模态框表单无法向MySQL插入数据问题求助
问题分析与解决方案
首先,你的表单明明设置了method="post"但提交时却自动用了GET,核心原因是HTML标签解析错误,同时PHP代码里还有SQL语法错误,下面一步步来解决:
一、修复表单提交方式异常
你的提交按钮标签没有闭合,导致浏览器无法正确识别表单结构,进而忽略method="post"的设置,默认走GET提交。看这段代码:
<button type="submit" name="submit" id="submit" class="btn btn-primary" value="Enviar">
这里缺少了</button>闭合标签,浏览器解析时会把表单结构打乱。
修复后的提交按钮代码:
<button type="submit" name="submit" id="submit" class="btn btn-primary" value="Enviar">Enviar</button>
另外,建议给表单明确指定action属性(即使是当前页面),避免浏览器默认行为的歧义:
<form class="route" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
二、修复PHP中的SQL语法错误
你的INSERT语句有明显的语法问题,$_SESSION['id']后面少了逗号,字符串拼接也不正确,这会直接导致MySQL执行失败:
原错误代码:
$query = "INSERT INTO routes (name, city, length, start_point, difficulty, user_id, date, description) VALUES ('$name','$city',$length,'$start_point','$difficulty',".$_SESSION['id']."'$date','$description')";
修复后的SQL语句:
$query = "INSERT INTO routes (name, city, length, start_point, difficulty, user_id, date, description) VALUES ('$name','$city','$length','$start_point','$difficulty',".$_SESSION['id'].",'$date','$description')";
注意:
- 给
$length加上单引号(如果length是数字类型可以不加,但统一加单引号更安全) - 在
$_SESSION['id']后面补了逗号,分隔开后续的$date字段 - 建议开启PHP错误提示,方便快速排查问题:
error_reporting(E_ALL); ini_set('display_errors', 1);
三、其他关键检查点
- 确保你已经启动了会话:在PHP代码开头必须调用
session_start();,否则$_SESSION['id']会为空,进而导致SQL报错。 - 检查数据库表
routes的字段是否匹配:比如user_id字段是否存在,date字段是否为DATE类型等。 - 建议使用预处理语句避免SQL注入:你当前用了
mysqli_real_escape_string,但预处理语句更安全可靠,示例如下:
// 预处理语句示例 session_start(); include('db/db.php'); if(isset($_POST['submit'])) { // 接收并处理表单数据 $name = trim($_POST['name']); $city = trim($_POST['city']); $length = trim($_POST['length']); $start_point = trim($_POST['start_point']); $difficulty = trim($_POST['difficulty']); $date = trim($_POST['date']); $description = trim($_POST['description']); $user_id = $_SESSION['id']; // 预处理SQL $stmt = $conn->prepare("INSERT INTO routes (name, city, length, start_point, difficulty, user_id, date, description) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("sssssiss", $name, $city, $length, $start_point, $difficulty, $user_id, $date, $description); if($stmt->execute()){ header("Location: routes.php"); exit; // 跳转后必须终止后续代码执行 }else{ echo '<script>alert("ERROR: '.$conn->error.'");</script>'; } $stmt->close(); }
另外,你原来代码里header("Location: routes.php");后面的echo语句不会执行,因为页面已经重定向了,记得跳转后加exit。
总结
先修复HTML中未闭合的<button>标签,再修正SQL语句的语法错误,同时确保会话已启动,这样就能解决表单提交方式异常和数据插入失败的问题了。
内容的提问来源于stack exchange,提问作者Jessie
相关产品推荐
相关产品推荐

