Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Po stronie przeglądarki _ Wgrywanie plików ajax pusta zmienna nazwy pliku

Napisany przez: Glowasz 15.08.2022, 11:19:58

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 - wartość jest pusta

Kod
$filename_hash.$file_name[$key]


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

Zmieniłem
Kod
var postData = $(this).serializeArray(),
na
Kod
var postData = new FormData(this),
bez skutku

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


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


Submit:
Kod
<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:
Kod
$("#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 php inquiry.php
Kod
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,il
osc,jakosc,rysunek,uwagi,uploadslink) values('$imie','$email','$nazwa','$nrelementu','$gruboscblachy','$gatunekblachy','$szerokosc','$dlugosc','$ilosc','$jakosc','$rysunek','$uwagi','$filename_hash.$file_name[$key]')";

Napisany przez: nospor 15.08.2022, 11:50:30

Tylko czemu to jest w dziale php? Przenosze.

Ajaxem od tak nie wyslesz pliku, musisz troche pokombinowac. FormData dziala, ale tam musisz fizycznie dodac plik. tutaj masz przyklad:
https://makitweb.com/how-to-upload-image-file-using-ajax-and-jquery/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)