我有一个表单用于接收上传的.csv文件,解析它并将数据插入Apache服务器上的MySQL数据库。页面首先检查是否有上传的文件。如果有,则处理数据,否则显示表格(如下)。
<form enctype="multipart/form-data" action="uploadfaculty.php" method="POST" id="UploadForm">
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
我的问题是,目前用户可以简单地反复浏览浏览器,因为该文件仍在服务器上,并且在$ _FILES数组中,每次都会处理它。
我试过了:
unlink($_FILES['uploadedfile']['tmp_name'])
,
unlink($_FILES['uploadedfile'])
,
unset($_FILES['uploadedfile']['tmp_name'])
和
unset($_FILES['uploadedfile'])`
我甚至通过Javascript重置表单(我知道这不起作用,但它只是为了消除所有疑问)。一切都无济于事。我确信这很简单,我很想念......它几乎总是如此。有什么想法吗?
答案 0 :(得分:4)
这并非令人失望,因为后期操作存储在浏览器的末尾并且在他们点击F5时被重新上传(在很短的时间内,因为它只是一个csv)。这与他们使用表单上传另一个csv基本相同。
你可以这样做:
if (isset($_POST['csv'])){
$DataProcessed = DataProcessingFunction();
}
if (isset($DataProcessed) && $DataProcessed){
header("Location: /path/to/form/page.php");
exit();
}
这将清除先前请求中发送的帖子数据。刷新不会重新提交表单。
答案 1 :(得分:3)
您可以在处理后header
将它们重定向到该上传页面,以防止帖子数据通过刷新持续进入。但是一旦处理完成,就应该清除临时文件。除非您使用move_uploaded_file
函数,否则PHP不会保留该文件。