使用foreach从生成的表单上传文件

时间:2014-01-25 07:08:27

标签: php mysql arrays file foreach

html side

<form method="POST" action="" enctype="multipart/form-data">
  <input type="file" id="site_header_picture" name="param_file[site_header_picture]" />
  <input type="file" id="site_logo" name="param_file[site_logo]" />
  <input type="submit" value="Save change" />
</form>

php side

if(!empty($_FILE)) {
   foreach($_FILE['param_file'] as $key => $value)
    {
    //do stuff

    }
}

似乎!empty返回 false ,而$_FILE['param_file']始终为空。

名称会暂时生成,将来可能会有更多文件输入。

任何人都可以帮助我吗?谢谢

4 个答案:

答案 0 :(得分:0)

试试这个:

if(!empty($_FILE)) {
   foreach($_FILE['param_file'] as $key => $value)
    {
    //do stuff

    }
}

实际上$_FILE是一个数组,您需要使用empty()检查它是否为空。

答案 1 :(得分:0)

也许,当提交带括号的名称时,您不理解PHP如何构造您的$_FILES数组。出于某种原因,PHP以不明显的方式做到了。

使用var_dump($_FILES)。以下是您发布的表单的示例输出。

array (size=1)
  'param_file' => 
    array (size=5)
      'name' => 
        array (size=2)
          'site_header_picture' => string 'tests.png' (length=9)
          'site_logo' => string 'Untitled.png' (length=12)
      'type' => 
        array (size=2)
          'site_header_picture' => string 'image/png' (length=9)
          'site_logo' => string 'image/png' (length=9)
      'tmp_name' => 
        array (size=2)
          'site_header_picture' => string 'C:\Windows\Temp\php2432.tmp' (length=27)
          'site_logo' => string 'C:\Windows\Temp\php2443.tmp' (length=27)
      'error' => 
        array (size=2)
          'site_header_picture' => int 0
          'site_logo' => int 0
      'size' => 
        array (size=2)
          'site_header_picture' => int 219168
          'site_logo' => int 178288

有些人编写辅助函数来重新排序$_FILES数组。尽管如此,强烈建议您使用现代PHP框架,它们具有处理此问题的内置类和方法。

如果$_FILES为空,请检查文件是否真正传输到服务器(使用 Microsoft网络监视器 Chrome开发者工具)。此外,Web服务器可能会禁止您的文件;因此,首先尝试发布微小图像,并学习如何在Web服务器上配置文件上载。

答案 2 :(得分:0)

啊哈,没有人注意到我写了文件而不是文件....该死的,我应该停止复制并过去。

感谢所有人。

if(!empty($_FILES['param_file'])) {

    $uploaddir = '../uploads/parameters/';
    $all_file_array = $_FILES['param_file'];

foreach($all_file_array['name'] as $key => $value)
    {
        $param_name = $key;
        $param_value =  $value;
        //do stuff

    }

}

答案 3 :(得分:-1)

$filename=$_FILES['param_file[site_logo]']['name'];
$filename1=$_FILES['param_file[site_header_picture]['name'];

if(empty($filename) || empty($filename1))
{
echo "Please Select Your files first";
exit();
}
else{
 foreach($_FILES['param_file']['tmp_name'] as $key =>$tmp_name)
     {

    if(!(is_uploaded_file($_FILES['param_file']['tmp_name'][$key])))
    {
      die("unable to upload file");
      exit();   
    }

           if(move_uploaded_file($_FILES['param_file']['tmp_name'][$key],$path))

            {   
              //$path=path where you wanna upload your files
             //your data base query goes here..
            }

     }