本地网页POST表单至MySQL服务器遇405/404错误求助
解决表单提交时的405/404错误及相关问题
先从你给出的信息里抓几个核心问题,一步步来解决:
1. 核心问题:Node.js服务器无法处理PHP文件
你的Node.js日志显示"POST /insert.php" Error (404): "Not found",这说明当前你的网站是用Node.js服务器托管的,但Node.js本身不支持解析PHP脚本。PHP需要搭配Apache、Nginx这类支持PHP运行的服务器(比如XAMPP、WAMP套件)。
解决办法:
- 如果你要使用PHP处理表单,需要把网站文件放到PHP服务器的根目录下(比如XAMPP的
htdocs文件夹),然后用Apache/Nginx来启动服务,而不是Node.js。 - 如果你想继续用Node.js,那需要改用Node.js的数据库操作方式(比如用
mysql2包),替换掉PHP脚本。
2. HTML表单的name属性缺失
你的表单里的输入元素只有id,但PHP的$_POST是通过元素的name属性来获取值的,不是id。比如你的昵称输入框:
<input type="text" id="nickname-input" required placeholder="Give your field a nickname for easier reference">
需要添加name属性:
<input type="text" id="nickname-input" name="nickname-input" required placeholder="Give your field a nickname for easier reference">
所有需要提交的输入框、下拉框都要加上对应的name属性,否则PHP拿不到任何POST数据。
3. PHP脚本的语法错误与安全问题
你的PHP代码有两个明显问题:
语法错误
SQL语句里的'$_POST[plant-input], '$_POST[orientation-input]'这里少了一个闭合的单引号,正确的片段应该是:
'$_POST[plant-input]', '$_POST[orientation-input]'
严重的SQL注入风险
直接把$_POST的值拼到SQL语句里,会导致SQL注入攻击,这是非常危险的。必须使用预处理语句来避免这个问题,示例代码如下:
<?php $host = "localhost"; $dbUsername = "root"; $dbPassword = ""; $dbname = "test"; // 建立连接并检查连接状态 $connect = mysqli_connect($host, $dbUsername, $dbPassword, $dbname); if (!$connect) { die("连接失败: " . mysqli_connect_error()); } // 使用预处理语句构建插入操作 $stmt = mysqli_prepare($connect, "INSERT INTO data (nickname, location, crop, rowspacing, plantspacing, orientation) VALUES (?, ?, ?, ?, ?, ?)"); mysqli_stmt_bind_param($stmt, "ssssss", $nickname, $location, $crop, $rowspacing, $plantspacing, $orientation); // 为预处理语句赋值 $nickname = $_POST['nickname-input']; $location = $_POST['location-input']; $crop = $_POST['crop-input']; $rowspacing = $_POST['row-input']; $plantspacing = $_POST['plant-input']; $orientation = $_POST['orientation-input']; // 执行语句并反馈结果 if(mysqli_stmt_execute($stmt)){ echo "数据插入成功"; } else { echo "错误: " . mysqli_error($connect); } // 关闭资源与连接 mysqli_stmt_close($stmt); mysqli_close($connect); ?>
4. 关于405 Method Not Allowed错误
这个错误大概率是因为Node.js返回404后,浏览器的后续处理或者服务器配置导致的。解决了上面的服务器问题(用PHP服务器托管文件),这个错误应该会随之消失。
内容的提问来源于stack exchange,提问作者Jake McClenny
相关产品推荐
相关产品推荐

