2011-08-23 67 views
0

我目前有一个查询提交表单,只能由注册用户完成。

表格的一部分允许用户上传要附加到他们的查询的文件。

我所试图做的是$_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

变量总是变量。你发现了什么确切的问题? –

+0

已更新的问题与更多的信息:) – lethalMango

+0

你可以检查文件是否仍然存在tmp文件夹? – Sleeperson

回答

2

当您的脚本结束时,上传tmp文件将被删除。只要它没有完成,文件仍然存在。

但是,如果您移动它们或者如果表单跨多个请求(例如多步骤表单,需要重新提交的验证),则需要构建自己的tmp文件。

0

你只需要预先提交值的文件名:

foreach($_FILES as $file){ 
    $file['name']=$_POST['enquiryID'].'_'.$_POST['userID'].'_'.$file['name']; 
} 

// do upload 

如果你只有几$ _ POST投入,将其保存为消毒变量,分别送他们通过你的函数作为参数(正如菲尔所说)。