Jak wysłać zserializowany plik?

0

Witam, mam formularz w którym są pola tekstowe i pole z uploadem plików. Wszystko działało zanim dodałem ajaxa, żeby działało bez przeładowywania strony.
Wszystkie zmienne zapisują się do bazy mysql oprócz tej z nazwą wgrywanego pliku $filename_hash.$file_name[$key] - wartość jest pusta

Ajaxa sobie wziełem z gotowca formularza, więc nie wiem co tam wszystko oznacza. Bez ajaxa wszystko hula

Form:

<form enctype="multipart/form-data" id="contactForm" role="form" method="post" action="inquiry.php">

Input:

<input type="file" class="custom-file-input"  name="image[]" multiple="">

Submit:

<input class="btn btn-block btn-round btn-d" id="cfsubmit" type="submit" value="Wyślij zapytanie"></button>
</div>
</form>
<div class="ajax-response font-alt" id="contactFormResponse"></div>
</div>/

Kod ajax na przycisk wysyłania:

$("#contactForm").submit(function (e) {
  e.preventDefault();
  var $ = jQuery;

  var postData = $(this).serializeArray(),
      formURL = $(this).attr("action"),
      $cfResponse = $('#contactFormResponse'),
      $cfsubmit = $("#cfsubmit"),
      cfsubmitText = $cfsubmit.text();

  $cfsubmit.text("Wysyłanie...");

  $.ajax({
      url: formURL,
      type: "POST",
      data: postData,
      success: function (data) {
          $cfResponse.html(data);
          $cfsubmit.text(cfsubmitText);

          $('#contactForm input[name=name]').val('');
          $('#contactForm input[name=email]').val('');
          $('#contactForm textarea[name=message]').val('');
      },
      error: function (data) {
          alert("Error occurd! Please try again");
      }
  });

  return false;
});

Kod inquiry.php

if(isset($_FILES['image'])){
     $errors= array();
     $file_name = $_FILES['image']['name'];
     $file_size =$_FILES['image']['size'];
     $file_tmp =$_FILES['image']['tmp_name']; 
     $file_type=$_FILES['image']['type'];
     $extensions= array("jpeg","jpg","png", "webp", "pdf"); 
     foreach($file_name as $key => $value){ 
         $tmp = explode('.',$_FILES['image']['name'][$key]);
         $file_ext = strtolower(end($tmp));
         if(in_array($file_ext,$extensions)=== false){
             $errors[]="Rozszerzenie niedozwolone.";
         } 
         if($file_size[$key] > 2097152){
             $errors[]='Plik nie może być większy niż 2 MB.';
         } 
     }  
     if(empty($errors)==true){        
         foreach($file_name as $key => $value){ 
             $filename_hash = bin2hex(random_bytes(16));
              move_uploaded_file($file_tmp[$key],"uploads/".$filename_hash.$file_name[$key]);
             echo "Pliki poprawnie wysłane!";
         } 
     }
     else{
     print_r($errors);
     }
    		$sql = "insert into zlecenia(imie,email,nazwa,nrelementu,gruboscblachy,gatunekblachy,szerokosc,dlugosc,ilosc,jakosc,rysunek,uwagi,uploadslink) values('$imie','$email','$nazwa','$nrelementu','$gruboscblachy','$gatunekblachy','$szerokosc','$dlugosc','$ilosc','$jakosc','$rysunek','$uwagi','$filename_hash.$file_name[$key]')"; 
1

serializeArray() pomija pliki afair - spróbuj w miejsce tego wstawić new FormData(this);.

0
Patryk27 napisał(a):

serializeArray() pomija pliki afair - spróbuj w miejsce tego wstawić new FormData(this);

Mógłbyś napisać, jak to zastąpić? Cały żywot robiłem frontend aż w końcu zaszła potrzeba zrobienia formularza z wpisem do bazy i jestem zielony całkowicie ;/

0

var postData = new FormData(this),

0
Patryk27 napisał(a):

var postData = new FormData(this),

Zamieniłem to i nadal pusta zmienna, dobrze rozumiem, żę mam zamiast var postData = $(this).serializeArray(), wstawić var postData = new FormData(this), bez dodawania niczego?

1 użytkowników online, w tym zalogowanych: 0, gości: 1