Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz do upload'u, raz dziala raz nie
Forum PHP.pl > Forum > Po stronie przeglądarki
Polik
Witam!

W koncu po dlugich poszukiwaniach w necie, i godzinami spedzonymi prze monitorem udalo mi sie stworzyc skrypt do uploadu obrazkow. Testowalem go na dwoch serwerach. Na jednym dziala na drugim nie. Jak sie okazalo problem jest w formularzu z inputem od nazwy pliku docelowego. Nie przesyla nazwy pliku przez co obrazek nie ma nazwy i sie nie zapisuje. Tak wyglada formularz:

  1. <form enctype="multipart/form-data" action="load01.php" method="POST">
  2. <input name="uploadfile" type="file" />
  3. <input name="nazwa" type="text" />
  4. <input type="submit" value="Wyślij plik" />
  5. </form>


Domyslam sie, ze problem mozy byc z tego powodu "multipart/form-data", ze jest to formularz do przesylania danych nie textow. Ale dlaczego na jednym serwerze dziala a na drugim juz nie?

Wiecie w jaki sposob przeslac i obrazek i teksty?
Pozdrawiam i z gory dziekuje za pomoc!
tommy4
może po prostu jeden serwer pozwala na przesyłanie plików, bądź ma większy limit. A czym sprawdzasz, że uploadował się plik?
Polik
pliki wgrywaja sie na serwer w obu przypadkach (np. jak podam nazwy tych plikow w skrypcie). tylko w jednym z nich w formularzu nie przechodzi zawartosc inputa z textem a w drugim idzie bez problemu.
Athlan
Cytat
ze jest to formularz do przesylania danych nie textow

bzdura... dane nadal przesyłają się metodą post smile.gif
Cytat
tylko w jednym z nich w formularzu nie przechodzi zawartosc inputa z textem a w drugim idzie bez problemu.

Pokaż kod na phpfi.com lub cpaste.com, spróbujemy coś poradzić smile.gif
Polik
Formularz:

  1. <form enctype="multipart/form-data" action="load01.php" method="POST">
  2. <input name="uploadfile" type="file" />
  3. <input name="nazwa" type="text" />
  4. <input type="submit" value="Wyślij plik" />


Kod uploadera:

  1. <?php
  2. header('Content-type: image/jpeg'); 
  3.  
  4. echo $nazwa;
  5.  
  6. $nowa_nazwa = "".$nazwa.".jpg";
  7. $nowa_nazwas = "".$nazwa."s.jpg";
  8.  
  9. if (!is_uploaded_file($_FILES['uploadfile']['tmp_name']))
  10. {
  11. //error: gdyby nie podano zadnego pliku do uploadu
  12. $error = "Nie podales zadnego pliku!";
  13. unlink($_FILES['uploadfile']['tmp_name']);
  14. }
  15. else
  16. {
  17. //plik zostal upload''owany
  18. $maxfilesize=300000;
  19.  
  20. if ($_FILES['uploadfile']['size'] > $maxfilesize)
  21. {
  22. //error: gdyby plik byl za duzy (3MB)
  23. $error = "Plik za duzo zajmuje!";
  24. unlink($_FILES['uploadfile']['tmp_name']);
  25. }
  26. else
  27. {
  28. //gdyby plik byl za duzy pomniejszamy go i robimy miniaturke
  29. list($width, $height) = getimagesize($filename);
  30. if($width > 700 || $height > 900)
  31. {
  32. //skalujemy duzy obrazek
  33. scaling($_FILES['uploadfile']['tmp_name'], $nowa_nazwa, 640, 100);
  34.  
  35. //robimy miniaturke
  36. scaling($_FILES['uploadfile']['tmp_name'], $nowa_nazwas, 100, 50);
  37. }
  38. else
  39. {
  40. //plik spelnia warunki wielkosci wiec go wgrywamy na serwer
  41. $pliczek = $_FILES['uploadfile']['tmp_name'];
  42. copy($pliczek,$nowa_nazwa);
  43.  
  44. //robimy miniaturke  
  45. scaling($pliczek, $nowa_nazwas, 100, 50);
  46. print "Plik zostal wgrany prawidlowo!";
  47. } 
  48. }
  49. }
  50.  
  51. //pozbywamy sie uchwytu
  52. unlink($_FILES['uploadfile']['tmp_name']);
  53.  
  54. //funkcjia do skalowania, przyjmuje uchwyt do pliku, nazwe do pliku i szerokosc zd
    jecia
  55. function scaling($filename , $nazwa, $rozmiar, $jakosc) 
  56. {
  57. //tworzy nowy obrazek zeby mozna bylo skalowac
  58. $image = imagecreatefromjpeg($filename);
  59.  
  60. //pobieramy gabaryty oryginalnego zdjecia
  61. list($width, $height) = getimagesize($filename);
  62.  
  63. //ustawiamy nowe parametry szerokosci i wysokosci
  64. $nowa_height = ($height/$width)*$rozmiar;
  65.  
  66. $new_width = $rozmiar;
  67. $new_height = $nowa_height;
  68.  
  69. //tworzymy nowy obrazek
  70. $image_p = imagecreatetruecolor($new_width, $new_height);
  71.  
  72. //funkcja ktora pod nowy obrazek wstawia ten stary tylko ze zeskalowany
  73. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  74.  
  75. //zapisanie nowego pliku o okreslonej nazwie i jakosci
  76. imagejpeg($image_p, $nazwa, $jakosc);
  77.  
  78. //zniszczenie niepotrzebnych zmiennych
  79. imagedestroy($image_p);
  80. imagedestroy($image);
  81. }
  82. ?>


smile.gif
phpion
Nie $nazwa a $_POST['nazwa']
Problem tkwi w tym, że jeden serwer ma włączone register_globals (ten, na którym skrypt działa), a ten drugi nie.
Najszybciej poprawisz to robiąc:
  1. <?php
  2. $nazwa = $_POST['nazwa'];
  3. ?>
Polik
heh no rzeczywiscie teraz dziala tu i tu smile.gif

jezeli mozna to chcialbym zapytac jeszcze o jedna rzecz. kiedy skrpyt zaladuje juz obrazki na serwer w firefoxie pojawia sie komunikat "Obrazek "http://polik.ovh.org/arch/load01.php" nie może zostać wyświetlony, ponieważ zawiera błędy." w IE tego nie ma. Nie wiem skad ten komunikat sie bierze przeciez uzywajac imagejpeg zapisuje obraz do pliku nie wyswietlam w przegladarce
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.