我目前有一份查询提交表格,只能由注册用户填写。
表单的一部分允许用户上传要附加到他们查询的文件。
我尝试做的是将$_FILES
变量传递给类文件进行处理(使用class.upload.php),因为我希望文件名采用以下格式:
enquiryID_userID_fileName.ext
是否可以将表单$_POST
数据与$_FILES
数据一起传递给某个类?
我试图实现的目标如下:
if (isset($_POST['submit_enquiry'])) {
$enquiry = new Enquiry();
$enquiry->newEnquiry($_POST, $_FILES);
}
然后在咨询班:
class Enquiry {
private function _processFiles($_FILES, $caseID) {
...
}
private function _processForm($_POST) {
...
}
public function newEnquiry($_POST, $_FILES) {
$caseID = $this->_processForm($_POST); // returns caseID
$this->_processFiles($_FILES, $caseID);
}
}
$_FILES
的印刷品给出了以下内容:
Array
(
[file] => Array
(
[name] => Array
(
[0] => Blue hills.jpg
[1] => Sunset.jpg
[2] =>
)
[type] => Array
(
[0] => image/jpeg
[1] => image/jpeg
[2] =>
)
[tmp_name] => Array
(
[0] => /tmp/phpwyLp86
[1] => /tmp/phpKJa4iw
[2] =>
)
[error] => Array
(
[0] => 0
[1] => 0
[2] => 4
)
[size] => Array
(
[0] => 28521
[1] => 71189
[2] => 0
)
)
)
尝试处理文件时,几乎就像tmp文件已丢失一样,因为它无法处理要上载的文件。我试图实施这个解决方案是否有任何明显的问题?
答案 0 :(得分:2)
脚本完成后,将删除上传tmp文件。只要它没有完成,文件仍然存在。
但是,如果您移动它们或者表单符合多个请求(例如,多步骤表单,需要重新提交的验证),则需要构建自己的tmp文件。
答案 1 :(得分:0)
您只需将post值添加到文件名:
foreach($_FILES as $file){
$file['name']=$_POST['enquiryID'].'_'.$_POST['userID'].'_'.$file['name'];
}
// do upload
如果您只有几个$ _POST输入,请将它们保存为已清理的变量,并将它们作为参数单独发送到您的函数中(如Phil所说)。