【问题标题】:File upload with foreach from a generated form使用 foreach 从生成的表单上传文件
【发布时间】:2014-02-16 08:07:10
【问题描述】:

html端

<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端

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

    }
}

好像!empty返回false,而$_FILE['param_file']总是空的。

名称是暂时生成的,以后可能会有更多的文件输入。

有人可以帮助我吗?谢谢

【问题讨论】:

    标签: php mysql arrays file foreach


    【解决方案1】:

    试试这个:

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

    其实$_FILE是一个数组,你需要用empty()检查它是否为空。

    【讨论】:

    • 尝试检查empty($_FILE['param_file'])
    • !empty($_FILE['param_file']) 什么都不做
    • 我的意思是检查$_FILE['param_file'] 是否为空。
    【解决方案2】:

    也许,您不了解 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 开发工具)。此外,网络服务器可能会禁止您的文件;因此,请先尝试发布小图片,并学习如何在网络服务器上配置文件上传。

    【讨论】:

    • 所以我可能不明白...我知道如何上传文件,谢谢。但是您似乎没有阅读我所有的问题。所有文件输入都是自动生成的。所以我不知道会有多少输入,也不知道他们的名字
    • 无论输入是如何生成的。 var_dump() 始终有效。与我们分享它的示例输出。
    • 要打印文件名,你必须遍历$_FILE['param_file']['name']。遍历$_FILE['param_file'] 绝对没有意义。 foreach($_FILE['param_file']['name'] as $inputName =&gt; $fileName) echo $fileName, PHP_EOL;
    【解决方案3】:
    $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..
                }
    
         }
    

    【讨论】:

      【解决方案4】:

      啊哈,没人注意到我写的是 FILE 而不是 FILES....该死的,我应该停下来复制过去。

      谢谢大家。

      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
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 2015-06-20
        • 1970-01-01
        相关资源
        最近更新 更多