не удается получить доступ к 2 или более файлам из ajax в php

#javascript #php #ajax

#javascript #php #ajax

Вопрос:

это мой PHP-код

 for($x=0; $x<count($_FILES['image1']['name']); $x   ) {

        // echo "Hello";
        $file_name = $_FILES['image1']['name'][$x];

        $file_size = $_FILES['image1']['size'][$x];
        $file_tmp  = $_FILES['image1']['tmp_name'][$x];
        $lclLocation1 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][0];
        $lclLocation2 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][1];


        $t = explode(".", $file_name);
        $t1 = end($t);
        $file_ext = strtolower(end($t));

        $ext_boleh = array("jpg", "jpeg", "png", "gif", "bmp");

        if(in_array($file_ext, $ext_boleh)) {
            $sumber = $file_tmp;
            $tujuan = "../images/" . $file_name;
            // echo "Image got";
            move_uploaded_file($sumber, $tujuan);

        }
        else  {
            echo "Only Images can be store!";
        }
    } // end for
  

и это мой запрос ajax

   // this contains two images
var lclImage1 = document.getElementById("txtImage1");

    lclImage2 = lclImage1.files[0];

    var formData = new FormData();

    formData.append("image1", lclImage2);
  

После этого мы отправляем с помощью ajax на PHP.

 $.ajax({
        url: "user.php",
        type: "POST",
        data: formData,
        processData: false,
        contentType: false

});
  

Приведенный выше PHP-код работает нормально для прямого вызова действия с именем файла, я получаю несколько значений, но если я использую ajax, то он не работает

ниже приведен HTML-код

 <form name="imgupload" enctype="multipart/form-data" method="post">
     <td rowspan="1">
        <input type="file" id="image1" name="image1[]" multiple>
    </td>
     <input type='submit' name='submit'><br/>
</form>
  

Комментарии:

1. где находится вызов ajax???

2. буквально на секунду я поделюсь

3. вы объявили FormData, используя ключевое слово var ? это должно быть похоже на => var FormData = new FormData();

4. Нет, следующим образом FormData = new FormData();

5. пожалуйста, объявите переменную перед ее использованием

Ответ №1:

Для работы ajax вам потребуется событие отправки формы следующим образом,

 <form id="imgupload" name="imgupload" enctype="multipart/form-data" method="post">
    <td rowspan="1">
        <input type="file" id="txtImage1" name="images1[]" multiple>
    </td>
    <input type='submit' name='submit'><br/>
</form>
<script
    src="http://code.jquery.com/jquery-3.3.1.min.js"
    integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>

    $('#imgupload').on('submit', function () {

        var formData = new FormData();            
        var count = document.getElementById('txtImage1').files.length;
        for (var x = 0; x < count; x  ) {
            formData.append("image1[]", document.getElementById('txtImage1').files[x]);
        }

        $.ajax({
            url: "user.php",
            type: "POST",
            data: formData,
            processData: false,
            contentType: false

        });
        return false;
    });


</script>
  

user.php

 for($x=0; $x<count($_FILES['image1']['name']); $x   ) {

    // echo "Hello";
    $file_name = $_FILES['image1']['name'][$x];

    $file_size = $_FILES['image1']['size'][$x];
    $file_tmp  = $_FILES['image1']['tmp_name'][$x];
    $lclLocation1 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][0];
    $lclLocation2 = "http://$_SERVER[HTTP_HOST]/images/".$_FILES["image1"]["name"][1];


    if(($_FILES["image1"]["type"][$x] == "image/gif") || ($_FILES["image1"]["type"][$x] == "image/jpeg") || ($_FILES["image1"]["type"][$x] == "image/png") || ($_FILES["image1"]["type"][$x] == "image/pjpeg")){
        $sumber = $file_tmp;
        $tujuan = "../images/" . $file_name;
        // echo "Image got";
        move_uploaded_file($sumber, $tujuan);

    }
    else  {
        echo "Only Images can be stored!";
    }
} // end for
  

Также я отредактировал условие расширения изображения. Поскольку имя файла может содержать точку в своем имени, добавление в имя точки приведет к ошибке.

Комментарии:

1. Это не проблема.

2. доступ к файлам возможен только при вводе файла, и это «upload», а не «txtImage1», где элемент с идентификатором «txtImage1» element ?

3. теперь вы изменили его на «image1», и у вас есть «txtImage1» в javascript, что вы делаете?

4. Ошибка ввода, братан.

5. У меня есть 2 программы, написанные для отладки, которые я разместил здесь со старой программой.