PHP中INSERT INTO无法写入MySQL users表,提交跳转异常求助
问题:PHP注册表单无法写入MySQL,提交后跳转空白页面而非login.php
使用PHP的INSERT INTO语句无法将数据写入MySQL Workbench的users表,点击提交按钮后页面跳转到空白的submit.php,而非预期的login.php页面。以下是注册页面(landingTwo.php)和处理页面(submit.php)的代码:
landingTwo.php 代码
<!DOCTYPE html> <?php require_once('db-include/config.php'); require_once('db-include/session.php'); if (!isset($_SESSION['needs'])) header("location: /index.php"); ?> <html lang="en"> <body> <form action="db-include/submit.php" method="POST"> <input class="form-control form-control-lg" name="first_name" type="text" style=" width: 300px; height: 53px; text-align: center; margin-top: 20px; margin-bottom: 10px; " placeholder="First Name" required /> <input class="form-control form-control-lg" name="last_name" type="text" style=" width: 300px; height: 53px; text-align: center; margin-top: 10px; margin-bottom: 10px; " placeholder="Last Name" required /> <input class="form-control form-control-lg" name="email" type="email" style=" width: 300px; height: 53px; text-align: center; margin-top: 10px; margin-bottom: 10px; " placeholder="Email Address" required /> <input class="form-control form-control-lg" name="city" type="text" style=" width: 300px; height: 53px; text-align: center; margin-top: 10px; margin-bottom: 10px; " placeholder="City" required /> <select class="bg-light form-select" name="state_name" value="state" style=" width: 300px; height: 53px; font-size: 20px; text-align: center; color: var(--bs-gray); "> <optgroup label="State"> <option value="AK">AK</option> <option value="AL">AL</option> <option value="AR">AR</option> <option value="AZ">AZ</option> <option value="CA">CA</option> <option value="CO">CO</option> <option value="CT">CT</option> <option value="DC">DC</option> <option value="DE">DE</option> <option value="FL">FL</option> <option value="GA">GA</option> <option value="HI">HI</option> <option value="IA">IA</option> <option value="ID">ID</option> <option value="IL">IL</option> <option value="IN">IN</option> <option value="KS">KS</option> <option value="KY">KY</option> <option value="LA">LA</option> <option value="MA">MA</option> <option value="MD">MD</option> <option value="ME">ME</option> <option value="MI">MI</option> <option value="MN">MN</option> <option value="MO">MO</option> <option value="MS">MS</option> <option value="MT">MT</option> <option value="NC">NC</option> <option value="ND">ND</option> <option value="NE">NE</option> <option value="NH">NH</option> <option value="NJ">NJ</option> <option value="NM">NM</option> <option value="NV">NV</option> <option value="NY">NY</option> <option value="OH">OH</option> <option value="OK">OK</option> <option value="OR">OR</option> <option value="PA">PA</option> <option value="RI">RI</option> <option value="SC">SC</option> <option value="SD">SD</option> <option value="TN">TN</option> <option value="TX">TX</option> <option value="UT">UT</option> <option value="VA">VA</option> <option value="VT">VT</option> <option value="WA">WA</option> <option value="WI">WI</option> <option value="WV">WV</option> <option value="WY">WY</option> </optgroup> </select> <input class="form-control form-control-lg" name="passwd" type="password" style=" width: 300px; height: 53px; margin-top: 10px; margin-bottom: 10px; text-align: center; " placeholder="Create Password" required="" minlength="6" maxlength="20" /> <input class="btn btn-lg btn-primary" type="submit" style=" width: 300px; height: 55px; background: var(--bs-orange); margin-top: 25px; margin-bottom: 10px; " value="Find Match" /> </form> </div> <div class="col"></div> <div class="col-md-4"></div> </div> </div> </body> </html>
submit.php 代码
<?php require_once('config.php'); require_once('session.php'); $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $email = $_POST['email']; $city = $_POST['city']; $state_name = $_POST['state_name']; $passwd = $_POST['passwd']; // Hash the password for security $hashed_password = password_hash($passwd, PASSWORD_DEFAULT); $sql = "INSERT INTO users (first_name, last_name, email, city, state_name, passwd, date_added) VALUES (?, ?, ?, ?, ?, ?, NOW())"; $stmt = $conn->prepare($sql); $stmt->bind_param("ssssss", $first_name, $last_name, $email, $city, $state_name, $hashed_password); if ($stmt->execute()) { header("Location: /login.php"); // Redirect to the login page after successful registration } else { echo "Error: " . $sql . "<br>" . $conn->error; } $stmt->close(); $conn->close(); ?>
期望表单提交成功并写入users数据库后,跳转到login.php页面。
排查与修复步骤
1. 开启错误显示定位问题
空白页面通常是PHP错误被屏蔽导致,在submit.php最顶部添加以下代码,直接显示错误信息:
<?php error_reporting(E_ALL); ini_set('display_errors', 1);
2. 修复重定向逻辑
执行header("Location: /login.php")后必须立即终止脚本,否则后续代码输出会破坏重定向响应:
if ($stmt->execute()) { header("Location: /login.php"); exit; // 添加exit终止脚本执行 } else { echo "Error: " . $sql . "<br>" . $conn->error; }
3. 验证数据库连接有效性
检查config.php中的数据库连接配置,确保$conn成功初始化,可在submit.php中添加连接检查:
require_once('config.php'); if (!$conn) { die("数据库连接失败: " . mysqli_connect_error()); }
4. 匹配数据库表字段
确认users表的字段设置:
passwd字段长度至少设置为60位(password_hash生成的哈希值固定为60位)date_added字段需为DATETIME类型,允许自动填充或接受NOW()值- 所有字符串字段(如first_name、email)长度需足够容纳用户输入内容
5. 安全获取POST参数
直接使用$_POST变量若字段未提交会触发错误,添加参数存在性检查:
if (!isset($_POST['first_name'], $_POST['last_name'], $_POST['email'], $_POST['city'], $_POST['state_name'], $_POST['passwd'])) { die("缺少必填字段,请返回表单重新提交"); }
6. 手动测试SQL语句
在MySQL Workbench中执行手动构造的INSERT语句,验证表结构是否正常:
INSERT INTO users (first_name, last_name, email, city, state_name, passwd, date_added) VALUES ('Test', 'User', 'test@example.com', 'TestCity', 'CA', '$2y$10$examplehash', NOW());
内容的提问来源于stack exchange,提问作者A Knight
相关产品推荐
相关产品推荐

