HTML表单连接数据库故障:mysqli错误排查求助
解决你的MySQLi连接失败与表单提交问题
看起来你遇到的核心问题很明确,我帮你拆解并逐个解决:
1. 最关键的错误:未引入数据库连接文件
你的order.php里直接使用了$conn变量,但这个变量是在connect.php中定义的——你根本没把连接文件引入到表单处理代码里!这就导致$conn未定义,mysqli自然会抛出错误。
修复方法:在order.php的PHP代码块最顶部,添加连接文件的引入(确保两个文件在同一目录下,路径不对的话要调整):
<?php if(isset($_POST['submit'])) { // 先引入数据库连接文件 require_once('connect.php'); $FirstName=$_POST['FirstName']; $Surname=$_POST['Surname']; // ... 后续代码 } ?>
2. 修复严重的SQL注入漏洞
你现在直接把用户输入拼到SQL语句里,这是极高风险的操作,很容易被SQL注入攻击。必须用MySQLi的预处理语句来处理:
修改后的表单提交代码:
<?php if(isset($_POST['submit'])) { require_once('connect.php'); // 先判断参数是否存在,避免未定义变量警告 $FirstName = isset($_POST['FirstName']) ? trim($_POST['FirstName']) : ''; $Surname = isset($_POST['Surname']) ? trim($_POST['Surname']) : ''; // 使用预处理语句安全插入数据 $stmt = $conn->prepare("INSERT INTO users (FirstName, Surname) VALUES (?, ?)"); $stmt->bind_param("ss", $FirstName, $Surname); // "ss"表示两个参数都是字符串类型 if($stmt->execute()){ echo "注册成功!"; } else { // 输出具体错误信息,方便排查问题 echo "插入失败: " . $stmt->error; } // 关闭语句和连接 $stmt->close(); $conn->close(); } ?>
3. 修正connect.php的语法小问题
你的connect.php里有个语法错误:$conn -> connect_error中间的空格要去掉,应该写成$conn->connect_error,否则可能导致解析失败。修改后的完整代码:
<?php $user = 'root'; $pass =''; $host = 'localhost'; $db = 'webassignment'; $conn = new mysqli($host, $user, $pass, $db); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } ?>
4. 额外排查要点
- 确认
webassignment数据库已创建,且users表存在,FirstName和Surname字段的类型正确(比如VARCHAR)。 - 检查本地MySQL服务是否正常启动(localhost的MySQL进程要在运行状态)。
- 确认root用户的密码确实为空,如果你的MySQL设置了密码,要把
$pass改成对应的密码。
这样调整后,应该就能解决连接失败和mysqli错误的问题,同时也提升了代码的安全性。
内容的提问来源于stack exchange,提问作者Bleach101
相关产品推荐
相关产品推荐

