如何重置表单输入数据?解决PHP表单刷新重复提交CSV问题
解决CSV重复写入问题
问题根源是刷新页面时浏览器会重新发送之前的POST请求,导致重复写入CSV。以下是具体修复方案:
1. 核心解决思路:采用Post/Redirect/Get(PRG)模式
处理完POST表单数据后,立即重定向到当前页面,这样刷新时浏览器只会发送GET请求,不会重复执行写入逻辑。
2. 修正后的完整代码
<?php session_start(); // 仅在POST请求时处理数据 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 安全获取POST参数,避免未定义索引报错 $ISBN = $_POST['ISBN'] ?? ''; $Title = $_POST['Title'] ?? ''; $Description = $_POST['Description'] ?? ''; // 验证字段非空 if (!empty($ISBN) && !empty($Title) && !empty($Description)) { $books = fopen("Books.csv", "a"); // 使用fputcsv自动处理CSV格式,避免手动拼接的引号/逗号错误 fputcsv($books, [$ISBN, $Title, $Description]); fclose($books); } // 重定向到当前页面,阻断重复提交 header("Location: " . $_SERVER['PHP_SELF']); exit(); } ?>
3. 关键优化点说明
- 用
$_SERVER['REQUEST_METHOD']判断请求类型,确保只有表单提交时才执行写入逻辑,直接访问页面不会触发操作 - 替换手动拼接CSV字符串的方式,使用
fputcsv自动处理内容中的逗号、引号等特殊字符,生成标准CSV格式 - 重定向操作会清空POST数据,刷新页面时不会重复发送提交请求
内容的提问来源于stack exchange,提问作者Rookus
相关产品推荐
相关产品推荐

