Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Multiple upload
Forum PHP.pl > Forum > Przedszkole
OneCode
Witam,

Chciałbym poprosić Was o pomoc w rozwiązaniu jednego problemu.
Napisałem sobie kawałek kodu do uploadu kilku plików na serwer.
Generalnie wszystko działa, jeżeli zdjęcia przejdą walidację rozmiaru i formatu to się wysyłają na serwer, jeżeli nie to nie.
Ale teraz nie mogę sobie poradzić z takim problemem, jeżeli użytkownik wysyła 4 obrazki, i któryś nie przejdzie walidacji, to żaden obrazek nie powinien się wysłać na serwer.

Będę bardzo wdzięczny za pomoc.

Oto mój kod smile.gif

  1. <?php
  2. if(!empty ($_POST['wyslij']))
  3. {
  4. while(list($key,$value) = each($_FILES[images][name]))
  5. {
  6. if(!empty($value))
  7. {
  8. $filename = $value;
  9. $error = false;
  10. $plik_ext = pathinfo($filename);
  11. $ext = $plik_ext['extension'];
  12. if ($ext !="JPG" && $ext !="PJPG" && $ext !="JPEG" && $ext !="jpg" && $ext !="pjpeg" && $ext !="jpeg" && $ext !="gif" && $ext !="GIF" && $ext !="png" && $ext !="PNG")
  13. {
  14. $error = true;
  15. $errorMsg .= '<p class="info">Niedozwolone rozszerzenie pliku '.$filename.'<br />Dozwolone pliki to: JPG lub GIF.</p>';
  16. echo $errorMsg;
  17. $file_upload = false;
  18. }
  19. elseif ($_FILES[images][size][$key] > 102400)
  20. {
  21. $error = true;
  22. $errorMsg .= '<p class="info">Plik '.$filename.' jest większy niż 100KB.</p>';
  23. echo $errorMsg
  24. $file_upload = false;
  25. }
  26. elseif ($error == false)
  27. {
  28. $useruploads = "img/$filename";
  29. copy($_FILES[images][tmp_name][$key], $useruploads);
  30. $errorMsg .= '<p class="info">Plik '.$filename.' wyslany na serwer.</p>';
  31. }
  32. }
  33. else
  34. {
  35. $errorMsg .= '<p class="info">Pliki sa puste.</p>';
  36. }
  37. }
  38. }
  39.  
  40. $form .= '<form enctype="multipart/form-data" action="up.php" method="post" id="FormAd">';
  41. $form .= '<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />';
  42. $form .= ' <fieldset>';
  43. $form .= ' <h2>dodaj ogłoszenie</h2>';
  44. $form .= ' <label for="FormAdPhoto1">zdjęcie 1 (to zdjęcie będzie widoczne jako miniaturka)</label>';
  45. $form .= ' <input type="file" name="images[]" id="FormAdPhoto1" class="iphoto" />';
  46. $form .= ' <label for="FormAdPhoto2">zdjęcie 2</label>';
  47. $form .= ' <input type="file" name="images[]" id="FormAdPhoto2" class="iphoto" />';
  48. $form .= ' <label for="FormAdPhoto3">zdjęcie 3</label>';
  49. $form .= ' <input type="file" name="images[]" id="FormAdPhoto3" class="iphoto" />';
  50. $form .= ' <label for="FormAdPhoto4">zdjęcie 4</label>';
  51. $form .= ' <input type="file" name="images[]" id="FormAdPhoto4" class="iphoto" />';
  52. $form .= ' <input type="submit" value="dodaj ogłoszenie" name="wyslij" id="FormAdSubmit" />';
  53. $form .= ' </fieldset>';
  54. $form .= '</form>';
  55.  
  56. echo $form;
  57. ?>


Pozdrawiam,
Bartek.
piotrooo89
ja bym to robił tak:

sprawdzam czy zostało wysłane -> jak jest to sprawdzam każdy obrazek -> jeśli któryś jest błędny to unset($_FILES) -> jeśli przesło poprawnie walidacje to przekazujesz tablice $_FILES do wysłania.
OneCode
Cytat(piotrooo89 @ 7.12.2009, 13:09:08 ) *
ja bym to robił tak:

sprawdzam czy zostało wysłane -> jak jest to sprawdzam każdy obrazek -> jeśli któryś jest błędny to unset($_FILES) -> jeśli przesło poprawnie walidacje to przekazujesz tablice $_FILES do wysłania.


Mógłbym Cię poprosić o wytłumaczenie tego na przykładzie.
Rozumiem, to co napisałeś, ale nie bardzo wiem jak to zapisać.

Z góry dziękuję,
Bartek.
piotrooo89
no jak to, gotowca Ci nie napisze. taki pseudo kod:

  1. if ($_POST['wyslij'])
  2. {
  3. if ($ext !="JPG" && $ext !="PJPG" && $ext !="JPEG" && $ext !="jpg" && $ext !="pjpeg" && $ext !="jpeg" && $ext !="gif" && $ext !="GIF" && $ext !="png" && $ext !="PNG")
  4. {
  5. $errorMsg .= '<p class="info">Niedozwolone rozszerzenie pliku '.$filename.'<br />Dozwolone pliki to: JPG lub GIF.</p>';
  6. unset(FILES);
  7. }
  8. elseif ($_FILES[images][size][$key] > 102400)
  9. {
  10. $errorMsg .= '<p class="info">Plik '.$filename.' jest większy niż 100KB.</p>';
  11. unset(FILES);
  12. }
  13. itd...
  14. }


po tym jak już wszystko sprawdziłeś i nie masz żadnego errora, wpisujesz:

  1. if($FILES)
  2. {
  3. $useruploads = "img/$filename";
  4. copy($_FILES[images][tmp_name][$key], $useruploads);
  5. $errorMsg .= '<p class="info">Plik '.$filename.' wyslany na serwer.</p>';
  6. }


teraz posklejaj to w logiczną całość.
OneCode
Cytat(piotrooo89 @ 7.12.2009, 13:29:21 ) *
no jak to, gotowca Ci nie napisze. taki pseudo kod:

  1. if ($_POST['wyslij'])
  2. {
  3. if ($ext !="JPG" && $ext !="PJPG" && $ext !="JPEG" && $ext !="jpg" && $ext !="pjpeg" && $ext !="jpeg" && $ext !="gif" && $ext !="GIF" && $ext !="png" && $ext !="PNG")
  4. {
  5. $errorMsg .= '<p class="info">Niedozwolone rozszerzenie pliku '.$filename.'<br />Dozwolone pliki to: JPG lub GIF.</p>';
  6. unset(FILES);
  7. }
  8. elseif ($_FILES[images][size][$key] > 102400)
  9. {
  10. $errorMsg .= '<p class="info">Plik '.$filename.' jest większy niż 100KB.</p>';
  11. unset(FILES);
  12. }
  13. itd...
  14. }


po tym jak już wszystko sprawdziłeś i nie masz żadnego errora, wpisujesz:

  1. if($FILES)
  2. {
  3. $useruploads = "img/$filename";
  4. copy($_FILES[images][tmp_name][$key], $useruploads);
  5. $errorMsg .= '<p class="info">Plik '.$filename.' wyslany na serwer.</p>';
  6. }


teraz posklejaj to w logiczną całość.


No dobrze, ale jeżeli zrobię tak jak napisałeś, czyli unset wstawię po $errorMsg, to unset zadziała tylko dla danego (niepoprawnego) pliku, a nie usunie całej tablicy z wszystkimi plikami.
Czy się mylę?

Bartek.
piotrooo89
nie jak dasz cała tablice FILES to usunie Ci wszystko.
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.