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

表单已填写却仍抛出错误?PHP注册页表单校验异常问题求助

问题排查

  • 缺少POST参数赋值步骤:脚本中直接使用的$fname、$lname、$email等变量未从$_POST超全局中取值,属于未定义变量,即使表单提交成功也无法拿到实际内容。
  • 预处理参数绑定错误:
    1. 类型声明长度不匹配:5个待绑定参数仅声明了"ss"2个字符串类型,和参数数量不符。
    2. 参数顺序错位:INSERT语句的字段顺序为fname、lname、email、mobile_number、password,绑定的参数顺序完全不匹配,即使执行成功也会出现字段存错数据的问题。
  • 逻辑缺失:未校验password和confirm_password的一致性,会导致用户两次输入密码不一致也能注册的问题。
  • 语法错误:PHP代码末尾有孤立的*/注释结束符,无对应开头注释会触发语法报错。
  • 校验逻辑缺陷:isset仅判断参数是否存在,空字符串也会返回true,前端required属性可被绕过,建议补充内容非空校验。

修正后的PHP代码

<?php
session_start();

require_once "config.php";

// 校验表单参数是否存在且非空
if (
    empty($_POST['fname']) || empty($_POST['lname']) || empty($_POST['email']) || 
    empty($_POST['mobile_number']) || empty($_POST['password']) || empty($_POST['confirm_password'])
) {
    exit ('Please fill in all fields.');
}

// 赋值变量
$fname = trim($_POST['fname']);
$lname = trim($_POST['lname']);
$email = trim($_POST['email']);
$mobile_number = trim($_POST['mobile_number']);
$password = $_POST['password'];
$confirm_password = $_POST['confirm_password'];

// 校验两次密码是否一致
if ($password !== $confirm_password) {
    exit ('两次输入的密码不一致,请重新输入');
}

// 预处理SQL
if ($stmt = $db->prepare('INSERT INTO accounts (fname, lname, email, mobile_number, password) VALUES (?, ?, ?, ?, ?)')) {
    // 5个参数均为字符串,类型声明为sssss,参数顺序和字段顺序保持一致
    mysqli_stmt_bind_param($stmt, "sssss", $fname, $lname, $email, $mobile_number, password_hash($password, PASSWORD_DEFAULT));

    if(mysqli_stmt_execute($stmt)) {
        // 重定向到登录页
        header ("Location: index.php");
        exit();
    } else {
        echo "Oops! Something went wrong! Please try again later.";
    }
    mysqli_stmt_close($stmt);
}
?>

内容的提问来源于stack exchange,提问作者monkeyduo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:15:05