PHP表单提交MySQL数据库出现空白行问题求助
解决PHP表单提交MySQL空白行问题
核心问题排查
你的代码存在几个关键错误,直接导致数据无法正确存入数据库:
- 初始代码的布尔值赋值错误:
isset()返回的是布尔值(true/false),存入数据库时会被转成字符串"1"/"",这就是之前出现"1"和现在空白的原因。 - HTML表单提交按钮无效:按钮
type="button"不会触发表单提交,必须改为type="submit"。 - 修改后PHP的键名不匹配:
$_POST的键名和HTML表单的name属性不一致(比如HTML是phonenum,PHP里用了phone),导致无法获取表单值。 - 预处理语句调用错误:错误使用
mysqli_query($conn, $stmt),预处理语句执行只需要$stmt->execute()即可,且成功判断的变量$ds未定义。
修正后的完整代码
1. HTML表单代码
<!DOCTYPE html> <html> <head> <title> GS Entry Form </title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css"> <style> h1 {text-align: center;} h2 {text-align: center;} </style> </head> <body> <h1>Customer Entry Form</h1> <h2>Please Input Contact Information</h2> <form action="database.php" method="POST"> First Name:<br /> <input type="text" name="firstname" /> <br /><br /> Last Name:<br /> <input type="text" name="lastname" /> <br /><br /> Email:<br /> <input type="text" name="email" /> <br /><br /> Phone Number:<br /> <input type="text" name="phonenum"/> <br /><br /> Address:<br /> <input type="text" name="address"/> <br /><br /> City:<br /> <input type="text" name="city"/> <br /><br /> State:<br /> <input type="text" name="state"/> <br /><br /> Zip Code:<br /> <input type="text" name="zipcode"/> <br /><br /> <button type="submit" name="submit" value="submit">提交</button> </form> </body> </html>
修正说明:
- 补全
DOCTYPE开头的<符号,修复语法错误 - 修复
<link>标签的闭合问题 - 将按钮类型改为
submit,确保能触发表单提交
2. PHP处理代码(database.php)
<?php include("connection.php"); // 仅在POST提交时处理数据 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 匹配HTML表单name属性,获取数据 $fname = $_POST['firstname'] ?? die("Firstname is missing"); $lname = $_POST['lastname'] ?? die("Lastname is missing"); $email = $_POST['email'] ?? die("Email is missing"); $phone = $_POST['phonenum'] ?? die("Phone Number is missing"); $addr = $_POST['address'] ?? die("Address is missing"); $city = $_POST['city'] ?? die("City is missing"); $state = $_POST['state'] ?? die("State is missing"); $zip = $_POST['zipcode'] ?? die("Zip Code is missing"); // 启用MySQLi错误报告,方便排查问题 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // 预处理语句,防止SQL注入 $stmt = $conn->prepare("INSERT INTO CustomerInfo(FirstName, LastName, Email, PhoneNum, Address, City, State, ZipCode) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); // 绑定参数,确保变量顺序和字段顺序一致 $stmt->bind_param('ssssssss', $fname, $lname, $email, $phone, $addr, $city, $state, $zip); $stmt->execute(); echo 'Row Inserted! Response Recorded!'; $stmt->close(); } $conn->close(); ?>
修正说明:
- 用
$_SERVER['REQUEST_METHOD']判断提交方式,避免非POST请求触发逻辑 - 使用
??运算符简化存在性判断,且确保$_POST键名和HTML完全匹配 - 移除错误的
mysqli_query调用,预处理语句通过execute()执行 - 确保成功提示能正常输出
3. connection.php(仅建议优化)
<?php $servername = "xxx"; $username = "xxx"; $password = "xxx"; $dbname = "xxx"; // 创建连接 $conn = mysqli_connect("$servername:3306",$username,$password,$dbname); // 检查连接 if ($conn->connect_error) { die("Connection failed: " .$conn->connect_error); } // 建议移除连接成功的echo,避免干扰提交后的页面输出 // else echo "Connection successful! " ?>
内容的提问来源于stack exchange,提问作者SpaceBroom
相关产品推荐
相关产品推荐

