You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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')";

注意:

  1. 给$length加上单引号(如果length是数字类型可以不加,但统一加单引号更安全)
  2. 在$_SESSION['id']后面补了逗号,分隔开后续的$date字段
  3. 建议开启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:17:18