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

PHP向MySQL保存用户输入时页面加载即插入空行问题排查

问题排查与修复方案

嘿,我一眼就看出问题所在了——你的PHP插入逻辑没有判断表单是否提交,所以每次页面加载(包括第一次打开页面的时候)都会执行INSERT语句,这时候$_POST['username']和$_POST['password']是空的,自然就插入空行到数据库里了。除此之外,代码还有几个可以优化的地方,我一步步给你说:

核心问题分析

  • 当用户第一次访问页面时,是GET请求,$_POST数组里没有任何表单数据,但你的代码直接执行了INSERT操作,导致空值插入。
  • 你重复创建了3次数据库连接(mysqli_connect调用了3次),这完全是多余的,既浪费资源又没必要。
  • 虽然用了mysqli_real_escape_string,但直接拼接SQL语句还是有SQL注入风险,更安全的方式是用预处理语句。

修复后的完整代码

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";

// 只创建一次数据库连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// 关键:只在表单提交时执行插入逻辑
if (isset($_POST['submit'])) {
    // 获取并过滤表单数据
    $uName = trim($_POST['username']);
    $pass = trim($_POST['password']);

    // 先简单验证数据不为空
    if (!empty($uName) && !empty($pass)) {
        // 使用预处理语句,避免SQL注入
        $sql = "INSERT INTO users (username, password) VALUES (?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ss", $uName, $pass);

        if ($stmt->execute()) {
            echo "New record created successfully";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
        $stmt->close();
    } else {
        echo "请输入用户名和密码!";
    }
}

$conn->close();
?>

<!DOCTYPE html>
<html>
<body>
<form action="index.php" method="post">
    <input type="text" name="username" placeholder="用户名">
    <br><br>
    <input type="password" name="password" placeholder="密码">
    <br><br>
    <input type="submit" name="submit" value="提交">
</form>
</body>
</html>

修复要点说明

  • 判断表单提交:用isset($_POST['submit'])来检测用户是否点击了提交按钮,只有此时才执行插入逻辑。
  • 复用数据库连接:只创建一次连接,全程使用这个连接对象。
  • 预处理语句:用prepare()和bind_param()来绑定参数,彻底避免SQL注入,比单纯转义字符串更安全。
  • 数据验证:增加了简单的非空验证,避免用户提交空内容。

这样修改后,只有当用户填写表单并点击提交按钮时,才会执行插入操作,不会再出现页面加载就插入空行的问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:22:50