使用PHP将动态表单数据导出至CSV文件
用PHP foreach循环把表单数组写入CSV的完整方案
没问题!我一步步给你讲清楚,保证编程新手也能看懂~
第一步:先修正你的表单HTML
首先要注意:如果想让PHP接收到多行的oldc、newc、skey数组,你的表单输入框name属性必须加上[],否则PHP只会拿到最后一行的输入值。修改后的表单片段大概是这样:
<form class="form-inline" id="main-form" action="process.php" method="post"> <!-- 第一行输入 --> <div class="input-group mb-3"> <input required name="oldc[]" type="text" placeholder="旧内容" class="form-control" /> <input required name="newc[]" type="text" placeholder="新内容" class="form-control" /> <input required name="skey[]" type="text" placeholder="关键词" class="form-control" /> </div> <!-- 可以复制上面的div添加更多行,比如第二行、第三行... --> <div class="input-group mb-3"> <input required name="oldc[]" type="text" placeholder="旧内容" class="form-control" /> <input required name="newc[]" type="text" placeholder="新内容" class="form-control" /> <input required name="skey[]" type="text" placeholder="关键词" class="form-control" /> </div> <button type="submit" class="btn btn-primary">提交写入CSV</button> </form>
第二步:编写处理数据的process.php文件
这部分是核心,我写了详细的注释,你直接复制就能用:
<?php // 先判断是不是表单POST提交,并且三个数组都存在 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['oldc'], $_POST['newc'], $_POST['skey'])) { // 从POST里取出三个数组 $oldcList = $_POST['oldc']; $newcList = $_POST['newc']; $skeyList = $_POST['skey']; // 打开CSV文件: // 'a' = 追加模式(新数据加在文件末尾,不会覆盖旧内容) // 'w' = 覆盖模式(每次提交都会清空旧内容,写新数据) // 如果文件不存在,PHP会自动创建它 $csvHandle = fopen('data.csv', 'a'); // 可选:写入CSV表头(如果是第一次创建文件,或者需要表头的话) // 不需要的话就把下面这行注释掉 fputcsv($csvHandle, ['旧内容', '新内容', '关键词']); // 用foreach循环遍历数组,把每行数据写入CSV // 这里遍历oldcList的索引,对应取newc和skey的同索引值 foreach ($oldcList as $rowIndex => $oldContent) { // 保险起见,先判断对应索引的newc和skey是否存在,避免报错 $newContent = isset($newcList[$rowIndex]) ? $newcList[$rowIndex] : ''; $keyword = isset($skeyList[$rowIndex]) ? $skeyList[$rowIndex] : ''; // 把三个值拼成一行,用fputcsv写入(自动处理CSV格式问题,比如逗号、引号) fputcsv($csvHandle, [$oldContent, $newContent, $keyword]); } // 写完一定要关闭文件 fclose($csvHandle); // 给用户一个成功提示 echo "<p style='color:green;'>数据已成功写入CSV!<a href='index.html'>返回继续添加</a></p>"; } else { // 如果不是POST提交或者数据不全,提示错误 echo "<p style='color:red;'>请通过表单提交完整数据!</p>"; } ?>
关键知识点解释
- 表单name加[]:这是让PHP把多个同name的输入转成数组的关键,没有[]的话,PHP只会保留最后一个输入的值,循环自然无法运行。
- fputcsv函数:比你自己手动拼接字符串靠谱,它会自动处理CSV的格式规则(比如内容里有逗号的话,会自动用引号包裹)。
- 数组索引判断:防止因为某行漏填了某个字段,导致数组长度不一致而报错。
- 文件模式选择:如果是要累计数据就用
a,如果每次提交都是全新数据就用w。
内容的提问来源于stack exchange,提问作者BIll Cosby
相关产品推荐
相关产品推荐

