PHP Multiple File Array

前端 未结 6 1192
陌清茗
陌清茗 2020-12-03 09:29

I have the following code which works and uploads but it will not cycle through the array to upload every file, just the first file.

相关标签:
6条回答
  • 2020-12-03 09:34

    it's easy to upload multiple files, follow these steps.

    1. use array notation means square brackets with the name of the input like this
    2. <input type="file" id="indtbl_logo[]" name="indtbl_logo[]" multiple />
    3. you can loop throught this using $_FILES Global Variable
        foreach ($_FILES['indtbl_logo']['tmp_name'] as $key => $tmp_name) {
            $file_name = $key . $_FILES['indtbl_logo']['name'][$key];
            $file_size = $_FILES['indtbl_logo']['size'][$key];
            $file_tmp = $_FILES['indtbl_logo']['tmp_name'][$key];
            $file_type = $_FILES['indtbl_logo']['type'][$key]; 
    
            echo $file_name;
            echo "<br>"; 
        }
    
    0 讨论(0)
  • 2020-12-03 09:37

    File upload using multiple input fields.

    HTML

    <form action="" method="post" enctype="multipart/form-data">
              <p><input type="file" name="file_array[]"></p>
              <p><input type="file" name="file_array[]"></p>
              <p><input type="file" name="file_array[]"></p>
              <input type="submit" value="Upload all files">
            </form>
    

    PHP

    <?php
    if(isset($_FILES['file_array'])){
        $name_array = $_FILES['file_array']['name'];
        $tmp_name_array = $_FILES['file_array']['tmp_name'];
        $type_array = $_FILES['file_array']['type'];
        $size_array = $_FILES['file_array']['size'];
        $error_array = $_FILES['file_array']['error'];
        for($i = 0; $i < count($tmp_name_array); $i++){
            if(move_uploaded_file($tmp_name_array[$i], "test_uploads/".$name_array[$i])){
                echo $name_array[$i]." upload is complete<br>";
            } else {
                echo "move_uploaded_file function failed for ".$name_array[$i]."<br>";
            }
        }
    }
    ?>
    
    0 讨论(0)
  • 2020-12-03 09:42

    you can use my updated code and as per my demo it is working perfect for multiple file upload

     <?php
    if(isset($_FILES['documents'])){
    
    foreach($_FILES['documents']['tmp_name'] as $key => $tmp_name)
    {
        $file_name = $key.$_FILES['documents']['name'][$key];
        $file_size =$_FILES['documents']['size'][$key];
        $file_tmp =$_FILES['documents']['tmp_name'][$key];
        $file_type=$_FILES['documents']['type'][$key];  
        move_uploaded_file($file_tmp,"galleries/".time().$file_name);
    }
    }else{
    echo "<form enctype='multipart/form-data' action='test1.php' method='POST'>";
     echo "File:<input name='documents[]' multiple='multiple' type='file'/><input type='submit' value='Upload'/>";
    
     echo "</form>";
    }
    ?>
    
    0 讨论(0)
  • 2020-12-03 09:52

    Try with this code for multifile upload

    <form method="post" action="upload-page.php" enctype="multipart/form-data">
     <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" />
    </form>
    

    In PHP

    if(count($_FILES['uploads']['filesToUpload'])) {
    foreach ($_FILES['uploads']['filesToUpload'] as $file) {
    
        //do your upload stuff here
        echo $file;
    
    }
    }
    

    To show the file name using javascript

    //get the input and UL list
    var input = document.getElementById('filesToUpload');
    var list = document.getElementById('fileList');
    
    //empty list for now...
    while (list.hasChildNodes()) {
    list.removeChild(ul.firstChild);
    }
    
    //for every file...
    for (var x = 0; x < input.files.length; x++) {
    //add to list
    var li = document.createElement('li');
    li.innerHTML = 'File ' + (x + 1) + ':  ' + input.files[x].name;
    list.append(li);
    }
    
    0 讨论(0)
  • 2020-12-03 09:54

    For anyone trying to do it with a single file php function (i`m using classes, but you can change to a function):

    html:

                            <input type="file" name="foto[]" />
                            <input type="file" name="foto[]" />
                            <input type="file" name="foto[]" />
                            <input type="file" name="foto[]" />
                            <input type="file" name="foto[]" />
    

    php:

    if (isset($_FILES['foto'])) {
    
          $arquivo = array();
        foreach ($_FILES['foto']["name"] as $file=>$key) {
    
                        // the empty input files create an array index too, so we need to
                        // check if the name exits. It means the file exists.
            if (!empty($_FILES['foto']["name"][$file])) {
              $arquivo ["name"] = $_FILES['foto']["name"][$file];
              $arquivo ["type"] = $_FILES['foto']["type"][$file];
              $arquivo ["tmp_name"] = $_FILES['foto']["tmp_name"][$file];
              $arquivo ["error"] = $_FILES['foto']["error"][$file];
              $arquivo ["size"] = $_FILES['foto']["size"][$file];
    
    $foto = new foto(); // create an obj foto
        // $arquivo means file, it`s our file format as a single $_file['file']
    if ($foto -> upload($arquivo)) { // if its uploaded than save
        $foto -> save();
    }
    
    
        }
    
        } 
    
    }
    

    on my foto class:

    public function upload($foto) {
    
        $upload_dir = "D:/xampp/htdocs/prova/fotos/";
        $file_dir = $upload_dir . $foto["name"];
    
        $move = move_uploaded_file($foto["tmp_name"], $file_dir);
        $this -> arquivo = $foto["name"]; // use this to save to db later
    
        // this serves to return true if the file is uploaded
        $retorno = ($move) ? 1 : 0; 
        return $retorno;
    
    }
    
    0 讨论(0)
  • 2020-12-03 09:59

    Try this way of loop your documents array()

    <?php 
    
    foreach($_FILES['documents']['tmp_name'] as $key => $tmpName) {
    
      $file_name = $_FILES['documents']['name'][$key];
      $file_type = $_FILES['documents']['type'][$key];
      $file_size = $_FILES['documents']['size'][$key];
      $file_tmp  = $_FILES['documents']['tmp_name'][$key];
    
      move_uploaded_file($file_tmp,"files/".time().$file_name);
    }
    
    ?>
    
    0 讨论(0)
提交回复
热议问题