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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:38:07