PHP将多组表单数组字段记录写入外部文件失败,求排查错误
PHP表单数据写入文件失败的错误排查
提供的表单隐藏字段
<input type='hidden' name='col12[]'> <input type='hidden' name='col13[]'> <input type='hidden' name='col14[]'> <input type='hidden' name='col15[]'>
问题代码
<?php if (isset($_POST["buttonSave"])) { $colFile = fopen("estimasi.txt", "w") or die(); $colItems = $_POST['col12']; $colQty = $_POST['col13']; $colUnit = $_POST['col14']; $colPrice = $_POST['col15']; for($i=0;$i<sizeof($colPrice);$i++) { ?> <?php echo $colItems[$i]; echo $colQty[$i]; echo $colUnit[$i]; echo $colPrice[$i]; ?> <?php fwrite($colFile, $colItems[$i], $colQty[$i], $colUnit[$i], $colPrice[$i]); echo '<meta http-equiv="refresh" content="0;url='.dirname($_SERVER['SCRIPT_NAME']).'" />'; } } ?>
代码中的错误点
- fwrite函数参数错误:fwrite仅接受最多3个参数(文件句柄、要写入的字符串、可选的长度),直接传入5个变量会触发函数调用错误,必须先把多个字段拼接成一个完整字符串再传入,比如
$line = $colItems[$i] . ' ' . $colQty[$i] . ' ' . $colUnit[$i] . ' ' . $colPrice[$i] . "\n";。 - 页面刷新语句位置错误:
<meta>刷新标签放在循环内部,第一次循环执行就会跳转页面,导致后续循环无法运行,只能处理第一条数据,应该将该语句移到for循环结束之后。 - 未校验数组一致性:直接用
sizeof($colPrice)作为循环条件,若col12/col13/col14数组长度与col15不一致,会触发Undefined offset错误;若数组为空,循环根本无法执行。需要先判断所有数组长度相同且不为空。 - 未关闭文件句柄:打开文件后未调用
fclose($colFile),可能导致数据写入不完整或资源泄漏,建议在循环结束后关闭文件。 - 冗余的PHP标签切换:循环内反复使用
?>和<?php完全没必要,直接在PHP代码块内执行echo即可,无需切换到HTML模式。
内容的提问来源于stack exchange,提问作者Juniantoじゅにあんと
相关产品推荐
相关产品推荐

