Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][jQuery][AJAX] Wysyłanie obrazka poprzez AJAX i przetwarzanie go w PHP
Forum PHP.pl > Forum > Przedszkole
Lethys
Wysyłam kilka danych z formularza przez Ajaxa, wszystko działa dobrze oprócz przesyłanego pliku (obrazka). Nie wiem jak sformułować kod abym mógł pracować nad wgranym obrazkiem w kodzie PHP.

chodzi mi o pracę w PHP na przesłanym obrazku przez Ajaxa.

Podejścia w jQuery

Miałem wiele podejść, ale żadne nie działało w kodzie:
  1. //podejście I
  2. var prize_img = $(this).closest('form').find('#file_img').val();
  3.  
  4. //podejście II
  5. var prize_img = $("#file_img").prop("files")[0];
  6.  
  7. //podejście III
  8. var file = $('#file_img').files[0];
  9. var formData = new FormData();
  10. formData.append('prize_img', file);


CAŁY KOD

Formularz:

  1. <form id="conversion_form" method="post" action="#" enctype="multipart/form-data">
  2. <input type="text" id="prize_name" size="25" value="">
  3. <input id="file_img" type="file" name="image">
  4. <div id="uploadPreview"></div>
  5. </div>
  6. <p><input id="button_draw" class="btn btn-lg btn-success" type="submit" value="Losowanie" /></p>
  7. </form>


AJAX:

Przesyłanie wartości prize_name działa, obrazka już nie.

  1. $('#button_draw').click(function(e) {
  2. e.preventDefault();
  3.  
  4.  
  5. // This is how I get to name val but how about IMG?
  6. var prize_name = $(this).closest('form').find('#prize_name').val();
  7.  
  8. //TUTAJ PRZESYŁANIE OBRAZKA NIE DZIAŁA
  9. var prize_img = $(this).closest('form').find('#file_img').val();
  10.  
  11.  
  12.  
  13.  
  14. $.ajax({
  15. context: this,
  16. url: './inc/new_draw.php',
  17. data: {'prize_name': prize_name, 'prize_img': prize_img},
  18. type: 'POST',
  19. success: function(response){
  20. //odpowiedź serwera
  21.  
  22. //Trzeba sparsować zwrot
  23. var json = JSON.parse(response);
  24.  
  25. if(json.odp == 1){
  26.  
  27. }
  28.  
  29. if(response == 2){
  30.  
  31. }
  32.  
  33. },
  34. error: function(x,n,o){
  35. }
  36. });
  37.  
  38.  
  39.  
  40. });


PHP:

  1. <?php
  2.  
  3. include ("config.php");
  4.  
  5. $prize_name = mysqli_real_escape_string($con, $prize_name);
  6. $prize_img = mysqli_real_escape_string($con, $prize_img);
  7.  
  8. //JAK MOGĘ PRACOWAĆ W PHP NA PRZESŁANYM OBRAZKU POPRZEZ AJAXA?
  9.  
  10. $file_size = $prize_img['size'];
  11. $file_name = $prize_img['name'];
  12. $file_type = $prize_img['type'];
  13.  
  14. echo $file_size;
  15.  
  16. if ($prize_name == NULL) {
  17. $problem = TRUE;
  18. $problem_code = 1;
  19. echo json_encode($dodano);
  20. }
  21.  
  22. ?>
Forti
Ciężko ajaxem przesłać obrazek wink.gif

poczytaj o uploadifive. Ja z ajaxem męczyłem się pół dnia i odpuściłem - zrobiłem zwykły get a potem właśnie tą biblioteką. Jest płatna - bodajże 5$.

edit: problemem nie jest php tylko właśnie js, jquery, ajax i http.

edit2:

http://stackoverflow.com/questions/2320069...jax-file-upload

tu masz troche wyjaśnień.
com
Skorzystaj z tego https://blueimp.github.io/jQuery-File-Upload/
Lethys
Generalnie już jestem bliski rozwiązania tego problemu. Na stackoverflow mi pomógł jeden user, ale kod nadal nie działa, chociaż powienien.

Kod:

  1. $('#button_draw').click(function(e) {
  2. e.preventDefault();
  3.  
  4. var formData = new FormData();
  5. // let's just take the first image
  6. var file = $('#file_img').files[0];
  7.  
  8. // but you also need to add the other fields to formData
  9. var lista = $(this).closest('form').find('#lista_losowanie').val();
  10. var prize_name = $(this).closest('form').find('#prizename').val();
  11.  
  12. formData.append('prize_img', file);
  13. formData.append('lista', lista);
  14. formData.append('prize_name', prize_name);
  15.  
  16.  
  17. $.ajax({
  18. context: this,
  19. url: './inc/new_draw.php',
  20. data: formData,
  21. type: 'POST',
  22. success: function(response){
  23. //odpowiedź serwera
  24.  
  25. //Trzeba sparsować zwrot
  26. var json = JSON.parse(response);
  27.  
  28. if(json.odp == 1){
  29.  
  30.  
  31. }
  32.  
  33. if(response == 2){
  34.  
  35. }
  36.  
  37. },
  38. error: function(x,n,o){
  39. }
  40. });
  41.  
  42.  
  43.  
  44. });


Cały skrypt nie działa, nie zostaje wysłane nic (w konsoli 0 błędów, 0 akcji).
com
No a jakich akcji sie spodziewales skoro w kodzie zadnej z nich nie masz naposanej, nie ma zapisu obrazkow, nie ma nawet odpowiedzi z serwera
ShaggyAG
  1. function avatar_add(input)
  2. {
  3. var file = input.files[0];
  4. var name = file.name;
  5. var size = file.size;
  6. var type = file.type;
  7.  
  8. var re = /(\.jpg|\.jpeg|\.bmp|\.gif|\.png)$/i;
  9. var ret = /(jpg|jpeg|bmp|gif|png)$/i;
  10. if(!re.exec(name))
  11. {
  12. $('#avatar_dialog').empty();
  13. $('#avatar_dialog').append('<div class="err_msg"><div>Niedozwolone rozszerzenie pliku.</div></div>');
  14. return false;
  15. }
  16. if(!ret.exec(type))
  17. {
  18. $('#avatar_dialog').empty();
  19. $('#avatar_dialog').append('<div class="err_msg"><div>Niedozwolone rozszerzenie pliku.</div></div>');
  20. return false;
  21. }
  22. if(size > 500000)
  23. {
  24. $('#avatar_dialog').empty();
  25. $('#avatar_dialog').append('<div class="err_msg"><div>Zbyt duży rozmiar pliku.</div></div>');
  26. return false;
  27. }
  28.  
  29. var formData = new FormData($('#form_av')[0]);
  30.  
  31. $.ajax({
  32. url: 'profiles.php',
  33. type: 'POST',
  34. data: formData,
  35.  
  36. success : function(msg) {
  37. if(msg.search('err_msg')>0)
  38. {
  39. $('#avatar_dialog').empty();
  40. $('#avatar_dialog').append(msg);
  41. } else
  42. {
  43. $('#av_add').css({'background' : 'url(avatars/'+msg+')','background-size' : '200px 200px','background-repeat' : 'no-repeat'});
  44. $('#avatar').css({'background' : 'url(avatars/'+msg+')','background-size' : '299px 299px','background-repeat' : 'no-repeat'});
  45. }
  46. },
  47. cache: false,
  48. contentType: false,
  49. processData: false
  50. });
  51. return false;
  52. }


tak wyglada u mnie

  1. <div class="av_buttom">Dodaj<form id="form_av" enctype="multipart/form-data"><input type="file" name="avatar" onChange="avatar_add(this)"></input></form></div>'
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.