我的多部分表格的流程基本上是答案表格 - >预览表格 - >上传到数据库
现在我在预览步骤中上传文件,因为POST
数据来自实际表单。我的问题是在上传到数据库功能中访问$_FILES
一次,因为var_dump($_FILES)
在array(0) {}
内返回upload_to_database()
。
我想在预览步骤中实际隐藏input[type=file]
只是为了让upload_to_database()
收到$_FILES
,但由于安全原因,这是不可能的。
我该如何解决这个问题?
抱歉,我上面的帖子很模糊。
我实际上想在upload_to_database()
函数中上传一次。我认为在预览阶段上传用户文件是不好的做法,不像上传到数据库,他们确信他们的答案。
上传目前在预览中,因为现在它只能在其中运行。一旦我们转到$_FILES
,upload_to_database()
就会为空。
如何从预览到$_FILES
获得完整且有用的upload_to_database()
?
答案 0 :(得分:1)
您可以在第一步中上传文件(转到预览表单;就像您现在所做的那样),将它们移动到特定的preview
目录,并在上传到目标时将它们移动到最终目的地数据库中。
我想您使用类似会话的内容来跟踪发布的数据,以便您可以以相同的方式添加preview
文件路径。
然后设置一个简单的cron作业,每隔xx小时删除preview
目录中xx小时以上的所有文件。
编辑:另一种方法是在javascript中完全在客户端进行预览,例如在SO上预览问题和答案。
答案 1 :(得分:0)
不可能做这样的事情:
PREVIEW:
upload_to_database($_FILES['userfile']['tmp_name']);
DB:
function upload_to_database($file)
{
// work with file here
}
我的意思是提供$ _FILES作为upload_to_database函数的参数