• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Upload obrazu na serwer bez wysłania formularza

0 głosów
697 wizyt
pytanie zadane 3 kwietnia 2017 w JavaScript przez imie_nazwisko Nowicjusz (180 p.)

Witam po raz pierwszy!
Utworzyłem prosty formularz z możliwością załączania plików bez przeładowania strony (ajax). Jeśli pole imie lub nazwisko NIE jest wypełnione, to po wskazaniu pliku i kliknieciu "Załaduj obraz" skrypt umieszcza plik na serwerze. Problem pojawia się, gdy wypelnimy pole imie i nazwisko, nastepnie wskazemy plik i klikniemy "Załaduj obraz". Formularz zostaje wysłany, bez załadowania pliku na serwer. Demo: http://test8560.futurehost.pl/abc/

Kod w HTML:

<form method="post" >
Podaj swoje imię<br><input name="Imię" ><br>
Podaj swoje nazwisko<br><input name="Nazwisko"><br>
<input id="sortpicture" type="file" name="sortpic" >
<button id="upload">Załaduj obraz</button>
<input type="submit" value="Wyślij formularz" >
</form>

 

Kod w JS (jquey):


$('#upload').on('click', function() {
    var file_data = $('#sortpicture').prop('files')[0];   
    var form_data = new FormData();                  
    form_data.append('file', file_data);
    alert(form_data);                             
    $.ajax({
                url: 'upload.php', // point to server-side PHP script 
                dataType: 'text',  // what to expect back from the PHP script, if anything
                cache: false,
                contentType: false,
                processData: false,
                data: form_data,                         
                type: 'post',
                success: function(php_script_response){
                    alert(php_script_response); // display response from the PHP script, if any
                }
     });
});

Kod upload.php

<?php

    if ( 0 < $_FILES['file']['error'] ) {
        echo 'Error: ' . $_FILES['file']['error'] . '<br>';
    }
    else {
        move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);
    }

?>

 

2 odpowiedzi

0 głosów
odpowiedź 3 kwietnia 2017 przez hoktaur Pasjonat (22,250 p.)
edycja 3 kwietnia 2017 przez hoktaur
a może tak:

http://www.developphp.com/video/JavaScript/File-Upload-Progress-Bar-Meter-Tutorial-Ajax-PHP

 

p.s. nie wiem czy widziałeś kiedyś jak to robią z załącznikami przy wysyłaniu maila ze strony. Klikasz napisz wiadomość potem wrzucasz pliki na serwer a potem zatwierdzasz maila gdzie wsio jest składane do kupy... i wysyłane
0 głosów
odpowiedź 3 kwietnia 2017 przez Assasz Nałogowiec (30,460 p.)

Dodaj do forma enctype="multipart/form-data". Method nie potrzebujesz w tym przypadku.

data: new FormData($('#id_formularza')[0])

Ta linijka wystarczy przy data w Ajaxie.

Podobne pytania

0 głosów
2 odpowiedzi 588 wizyt
pytanie zadane 5 marca 2017 w PHP przez prymex Obywatel (1,250 p.)
–1 głos
2 odpowiedzi 3,350 wizyt
0 głosów
4 odpowiedzi 931 wizyt

93,605 zapytań

142,530 odpowiedzi

322,999 komentarzy

63,095 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...