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

页面刷新时SQLite重复插入空数据问题求助

解决页面刷新插入空记录的问题

核心原因

你的PHP代码没有判断请求是否来自表单的POST提交,只要页面加载(包括刷新)就会执行插入逻辑,而刷新时没有POST数据,所以插入空记录。另外代码里还有几处细节错误会导致功能异常,一起修正。

具体修复步骤

1. 给PHP代码添加POST请求判断

只有当表单通过POST提交时,才执行数据库插入操作,同时优化代码安全性:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 仅处理表单提交的POST请求
    try {
        // 打开数据库并开启错误调试模式
        $db = new PDO('sqlite:db/users.db');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // 校验必填字段(和前端required对应)
        if (empty($_POST["firstname"]) || empty($_POST["country"])) {
            die("必填字段不能为空");
        }

        // 注意:表单里textarea的name是Adress,这里要对应拼写
        $firstname = $_POST["firstname"];
        $Address = $_POST["Adress"];
        $country = $_POST["country"];

        // 使用预处理语句避免SQL注入风险
        $stmt = $db->prepare("INSERT INTO details (firstname, Address, country) VALUES (:firstname, :address, :country)");
        $stmt->bindParam(':firstname', $firstname);
        $stmt->bindParam(':address', $Address);
        $stmt->bindParam(':country', $country);
        $stmt->execute();

        $db = NULL;
        // 提交后重定向,彻底避免刷新重复提交
        header("Location: " . $_SERVER['PHP_SELF']);
        exit();
    } catch(PDOException $e) {
        print 'Exception : ' .$e->getMessage();
    }
}
?>

2. 修正表单中的错误

  • 输入框的name"firstname"改为name="firstname",否则PHP无法获取该字段值
  • 下拉选择框的默认选项Choose添加value="",确保required属性能正确触发校验

修正后的表单代码:

<form id="register_form" method="post" role="form" action="">
    <input autofocus="" id="firstname" name="firstname" placeholder="First Name" type="text" required />
    <textarea id="Address" name="Adress" placeholder="No Address" rows="3" cols="30"></textarea>
    <select id="country" name="country" required>
            <option selected value="">Choose</option>
            <option value="10">Germany</option>
            <option value="11">Poland</option>
            <option value="12">United Kingdom</option>
    </select>
    <button type="submit">Submit My New Entry</button>
</form>

3. 关键优化说明

  • POST请求校验:通过$_SERVER['REQUEST_METHOD'] === 'POST'确保只有表单提交时才执行插入,页面刷新(GET请求)不会触发逻辑
  • 重定向防重复提交:插入成功后跳转到当前页面,刷新时只会加载GET请求,不会重复插入
  • 预处理语句:避免直接拼接SQL变量带来的注入风险,同时兼容特殊字符输入
  • 表单细节修正:修复name属性拼写和下拉选项值,保证前端校验和后端取值一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:55:33