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

PHP+SQL注册表单无报错但无法写入数据库求助

问题排查与修复方案

兄弟,我仔细看了你的代码,发现了几个关键问题,这就是为什么表单提交后没反应、数据也没写入数据库的原因:


1. HTML表单的语法错误(最根本的触发问题)

你的<form>标签里的method属性写错了:

<form action="" method"post" class="form">

正确的写法应该是**method="post"**(少了个等号)!这个错误会导致浏览器默认用GET方法提交表单,PHP里的$_POST数组根本拿不到任何数据,所以后面的if(isset($_POST['register']))判断永远不会成立,自然不会执行任何数据库操作。

2. 数据库连接的两个小问题

  • 你写的数据库密码是" "(一个空格),如果你的MySQL root账号实际密码不是空格,连接会直接失败。
  • 连接失败时,你用mysqli_connect_errno()输出的是错误码,换成mysqli_connect_error()才能看到具体的错误描述,方便你排查连接问题。

3. 核心问题:SQL语句从未执行

你只是定义了插入的SQL语句,但完全没有调用执行方法!写完$sql之后直接就关闭了数据库连接,数据库根本没收到要插入数据的指令。必须加上执行语句的代码才能让数据库处理请求。

4. 严重安全问题:SQL注入与明文密码

  • 直接把用户输入拼到SQL里是高危操作,很容易被SQL注入攻击,必须用预处理语句来规避风险。
  • 明文存储密码是绝对禁止的,一定要用password_hash()哈希后再存入数据库,验证时用password_verify()匹配。

修正后的完整代码示例

<body>
  <form action="" method="post" class="form">
    <div class="form-group1">
      <label for="">Username :</label>
      <input type="text" class="form-control" name="username" id="tb-username" placeholder="Username">
    </div>
    <div class="form-group2">
      <label for="">Password :</label>
      <input type="password" class="form-control" name="password" id="tb-password" placeholder="Password">
    </div>
    <button type="submit" class="btn btn-primary" id="btn-submit" name="register">Submit</button>
  </form>

  <?php
  if(isset($_POST['register'])) {
    // 先验证输入是否为空
    if(!empty($_POST['username']) && !empty($_POST['password'])) {
      $username = $_POST['username'];
      // 密码哈希处理
      $password = password_hash($_POST['password'], PASSWORD_DEFAULT);

      // 数据库连接(注意修改为你的实际密码)
      $link = mysqli_connect("localhost", "root", "你的实际密码", "vbproject");
      if(mysqli_connect_errno()) {
        printf("数据库连接失败: %s\n", mysqli_connect_error());
        exit();
      }

      // 使用预处理语句避免SQL注入
      $sql = "INSERT INTO users (username, password) VALUES(?, ?)";
      $stmt = mysqli_prepare($link, $sql);
      mysqli_stmt_bind_param($stmt, "ss", $username, $password);
      
      // 执行语句并给出反馈
      if(mysqli_stmt_execute($stmt)) {
        echo "注册成功!";
      } else {
        echo "注册失败: " . mysqli_stmt_error($stmt);
      }

      // 关闭语句和连接
      mysqli_stmt_close($stmt);
      mysqli_close($link);
    } else {
      echo "用户名和密码不能为空!";
    }
  }
  ?>
</body>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:52:03