Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Masowy upload plików (drobnostka)
Forum PHP.pl > Forum > Przedszkole
in5ane
Witam,
chciałem aby ktoś mi pomógł jak tutaj zrobić, żeby w tym uploadzie po zauploadoawniu nie pisał napis "Ogłoszenie dodano poprawnie" tyle razy ile wysłano dany plik tylko jeden raz i że jak któryś plik nie został przesłany z jakiejś przyczyny (np. nie to rozszerzenie, za duży rozmiar czy inne), to żeby wyświetliło który to plik (oryginalną nazwę, nie tę utworzoną).

Oto mój kod:
  1. <?php
  2. if (isset($_FILES['Plik']))
  3. {
  4.  $cnt=count($_FILES["Plik"]["name"]);
  5.  
  6.  for($i=0;$i<$cnt;$i++)
  7.  {
  8. if($_FILES["Plik"]["name"][$i]!='' && $_FILES["Plik"]["size"][$i]>0)
  9. {
  10. $exts=strtolower(substr($_FILES["Plik"]["name"][$i],-3));
  11.  
  12. if ($exts == "gif" || $exts == "jpg" || $exts == "png")
  13. {
  14. srand((double)microtime()*1000000);
  15. $nazwa = md5(uniqid(rand()));
  16. $kr = ".";
  17. if (move_uploaded_file($_FILES["Plik"]["tmp_name"][$i],'fotki/'.''.$nazwa.''.''.$kr.''.''.$exts.''))
  18. {
  19.  echo('<center>Twoje ogłoszenie jest już umieszczone.</center>');
  20.  $query = "INSERT INTO zdjecia (id, nazwa_pliku, id_osoby) VALUES ('', '$nazwa$kr$exts', '$id');";
  21.  $result = mysql_query ($query);
  22.  $querys = "UPDATE users SET status='1' WHERE id='$id';";
  23.  $results = mysql_query ($querys);
  24.  }
  25.  else
  26.  {
  27.  switch($_FILES["Plik"]["error"][$i])
  28. {
  29. case 1: echo('Przesyłany plik jest większy niż zezwala konfiguracja serwera.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  30. case 2: echo('Przesyłany plik jest wiekszy niż zezwala formularz.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  31. case 3: echo('Przesłano tylko część pliku.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  32. case 4: echo('Plik nie został przesłany.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  33. }
  34.  }
  35. }
  36. else
  37. {
  38.  echo('Przesyłany plik nie jest plikiem graficznym.<br><br><a href="java script:history.go(-1)">Wstecz</a>');
  39. }
  40.  } 
  41.  }
  42. }
  43. ?>


Z góry dziękuję za pomoc. Formularz jest jasny, więc go nie dawałem.
Hekko
Na szybko wymyśliłem coś takiego (troche prymitywnie ale powinno działać):

  1. <?php
  2. if (isset($_FILES['Plik']))
  3. {
  4.  $cnt=count($_FILES["Plik"]["name"]);
  5.  $blad=0;
  6.  for($i=0;$i<$cnt;$i++)
  7.  {
  8. if($_FILES["Plik"]["name"][$i]!='' && $_FILES["Plik"]["size"][$i]>0)
  9. {
  10. $exts=strtolower(substr($_FILES["Plik"]["name"][$i],-3));
  11.  
  12. if ($exts == "gif" || $exts == "jpg" || $exts == "png")
  13. {
  14. srand((double)microtime()*1000000);
  15. $nazwa = md5(uniqid(rand()));
  16. $kr = ".";
  17. if (move_uploaded_file($_FILES["Plik"]["tmp_name"][$i],'fotki/'.''.$nazwa.''.''.$kr.''.''.$exts.''))
  18. {
  19.  $brakbledu=1;
  20.  
  21.  $query = "INSERT INTO zdjecia (id, nazwa_pliku, id_osoby) VALUES ('', '$nazwa$kr$exts', '$id');";
  22.  $result = mysql_query ($query);
  23.  $querys = "UPDATE users SET status='1' WHERE id='$id';";
  24.  $results = mysql_query ($querys);
  25.  }
  26.  else
  27.  {
  28.  $brakbledu=0;
  29.  switch($_FILES["Plik"]["error"][$i])
  30. {
  31. case 1: echo('Przesyłany plik '.$_FILES["Plik"]["name"][$i].' jest większy niż zezwala konfiguracja serwera.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  32. case 2: echo('Przesyłany plik '.$_FILES["Plik"]["name"][$i].' jest wiekszy niż zezwala formularz.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  33. case 3: echo('Przesłano tylko część pliku '.$_FILES["Plik"]["name"][$i].'.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  34. case 4: echo('Plik '.$_FILES["Plik"]["name"][$i].' nie został przesłany.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  35. }
  36.  }
  37.  
  38. }
  39. else
  40. {
  41.  echo('Przesyłany plik '.$_FILES["Plik"]["name"][$i].' nie jest plikiem graficznym.<br><br><a href="java script:history.go(-1)">Wstecz</a>');
  42. }
  43.  } 
  44.  $blad=$blad+$brakbledu;
  45.  }
  46.  if($blad==$cnt)
  47.  {
  48.  echo('<center>Twoje ogłoszenie jest już umieszczone.</center>');
  49.  }
  50.  
  51. }
  52. ?>
in5ane
Nie działa, nic się nie wyświetlać, aha i wprowadzić zabezpieczenie, że jak ktoś nie doda ani jednego zdjęcia to też wyświetla błąd.

Tzn. tak było jak zrobiłem kilka błędów (w jednym złe rozszerzenie, w drugim zły format,a trzecie dobre było).
Hekko
Tak już działa na 100%:

  1. <?php
  2. if (isset($_FILES['Plik']))
  3.  
  4. $cnt=count($_FILES["Plik"]["name"]);
  5. $brakbledu=0;
  6. $blad=0;
  7. for($i=0;$i<$cnt;$i++)
  8. {
  9.  if($_FILES["Plik"]["name"][$i]!='' && $_FILES["Plik"]["size"][$i]>0)
  10.  {
  11.  $iloscplikow++;
  12.  $exts=strtolower(substr($_FILES["Plik"]["name"][$i],-3));
  13.  
  14.  if ($exts == "gif" || $exts == "jpg" || $exts == "png")
  15.  {
  16.  srand((double)microtime()*1000000);
  17.  $nazwa = md5(uniqid(rand()));
  18.  $kr = ".";
  19.  if (move_uploaded_file($_FILES["Plik"]["tmp_name"][$i],'fotki/'.''.$nazwa.''.''.$kr.''.''.$exts.''))
  20.  {
  21. $brakbledu++;
  22. $query = "INSERT INTO zdjecia (id, nazwa_pliku, id_osoby) VALUES ('', '$nazwa$kr$exts', '$id');";
  23. $result = mysql_query ($query);
  24. $querys = "UPDATE users SET status='1' WHERE id='$id';";
  25. $results = mysql_query ($querys);
  26. }
  27. else
  28. {
  29. $blad++;
  30. switch($_FILES["Plik"]["error"][$i])
  31.  {
  32.  case 1: echo('Przesyłany plik '.$_FILES["Plik"]["name"][$i].' jest większy niż zezwala konfiguracja serwera.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  33.  case 2: echo('Przesyłany plik '.$_FILES["Plik"]["name"][$i].' jest wiekszy niż zezwala formularz.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  34.  case 3: echo('Przesłano tylko część pliku '.$_FILES["Plik"]["name"][$i].'.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  35.  case 4: echo('Plik '.$_FILES["Plik"]["name"][$i].' nie został przesłany.<br><br><a href="java script:history.go(-1)">Wstecz</a>');break;
  36.  }
  37. }
  38.  
  39.  }
  40.  else
  41.  {
  42. echo('Przesyłany plik '.$_FILES["Plik"]["name"][$i].' nie jest plikiem graficznym.<br><br><a href="java script:history.go(-1)">Wstecz</a>');
  43.  }
  44. } 
  45.  
  46. }
  47.  
  48. if($iloscplikow==0) { echo "Brak plików"; }
  49. else {
  50. if($brakbledu==$iloscplikow)
  51. {
  52. echo('<center>Twoje ogłoszenie jest już umieszczone.</center>');
  53. }
  54. }
  55.  
  56. ?>
in5ane
Działa extra smile.gif

Wielkie dzięki tongue.gif
jasiek
aarambo.gif Drobny problem w tym widzę, jeżeli ktos zechce w drugim podejściu do przesłania zdjęć podać te same zdjęcia ponieważ jedno tylko bedzie takie ktore nie spełnia warunków to w bazie bedziesz miał zdublowane zdjęcia, moim zdaniem nalezało by w pierwszej kolejnosci spradzić czy wszytko jest ok i dopiero w drugim kroku dopisać do bazy danych, ale za pomysł dziękuje szukałem czegoś takiego cool.gif
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.