Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z uploadem zdjecia na serwer
Forum PHP.pl > Forum > Przedszkole
Ravik
Witam,

Otóż mam klasę, która odpowiada za uploadowanie zdjęcia na serwer i przesłaniu do mysqla o tym informacji, za to odpowiada klasa napisania poniżej, ale niestety nie działa, kiedy przesyłam plik za pomocą formularza, wyskakuje po prostu białe tło, plik nie został dodany, a w mysqlu nie pojawiła się informacja. Proszę o nakierowanie na to co zrobiłem źle.

class.Uploader.php
  1. <?php
  2. class ImageUploader {
  3.  
  4. var $name;
  5. var $type;
  6. var $size;
  7. var $temp;
  8. var $image;
  9. var $blad;
  10. var $max_rozmiar;
  11. var $category;
  12.  
  13. function init() {
  14. global $_FILES;
  15.  
  16. $this -> blad = $_FILES['userfile']['error'];
  17. if($this -> blad != 0)
  18. {
  19. $error = 'PHP zwrócił następuący błąd: '.$this -> blad;
  20. return FALSE;
  21. }
  22. $this -> name = $_FILES['userfile']['name'];
  23. $this -> type = $_FILES['userfile']['type'];
  24. $this -> size = $_FILES['userfile']['size'];
  25. $this -> temp = $_FILES['userfile']['tmp_name']; /* 1 */
  26. $this -> max_rozmiar = 8192;
  27. return TRUE;
  28. }
  29.  
  30. function validate() {
  31.  
  32. if($this -> type !='image/gif' && $this -> type !='image/pjpeg' && $this->type !='png') /* 2 */
  33. {
  34. $error ="To nie jest poprawny format obrazka (dopuszczalne rozszerzenia gif,jpg,jpeg,png)";
  35. return FALSE;
  36. }
  37.  
  38. if($this -> size >= $max_rozmiar)
  39. {
  40. $error= "Plik jest za duży. Dopuszczalny rozmiar to: $max_rozmiar";
  41. return FALSE;
  42. }
  43.  
  44.  
  45. $rozmiar = getimagesize($this -> temp);
  46. if($rozmiar[1]>2560 || $rozmiar[2]>1280)
  47. {
  48. $error = 'Wgrywanie tego zdjecia może trochę potrwać... Czekaj...';
  49. return TRUE;
  50. }
  51. return TRUE;
  52. }
  53.  
  54. function savefile($id) {
  55.  
  56. global $forum;
  57. global $db;
  58. if (!$fh = fopen($this-> temp, "r"))
  59. {
  60. $error = 'Nie można otworzyć pliku z katalogu tymczasowego';
  61. return FALSE;
  62. }
  63. $this -> image = addslashes(fread($fh, $this -> size));
  64. $db -> query("INSERT INTO zdjecia ('byte', 'image_type', 'category') VALUES('".$this -> image."','".$this -> type."','".$this -> category."'");
  65. return TRUE;
  66. }
  67. }
  68.  
  69.  
  70. ?>


upload.php

  1. <?php
  2. require_once ("config.php");
  3. require_once ("class.Uploader.php");
  4.  
  5. $db = @new db($host, $nazwabazy, $user, $pass);
  6.  
  7. if($img -> init())
  8. {
  9. if($img -> validate())
  10. {
  11. if($img -> savefile())
  12. {
  13. echo 'Twój obrazek został pomyślnie zapisany.';
  14.  
  15. }
  16. }
  17. }
  18. ?>


dla formalnośći index.html

  1. <form action="upload.php" method="post" enctype="multipart/form-data" accept="image/gif, image/jpeg, image/png">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="8192">
  3. Dodaj zdjecie: <input name="userfile" type="file">
  4. <br /><input type="submit" value="Wgraj">
  5. </form>


Pozdrawiam,
Ravik
erix
Strzelam, że wrzucasz plik większy niż limit obiektów do uploadu ustawiony w php.ini.

Chyba że wrzucasz mniejsze, ale tego nie wiemy.
Ravik
Wrzucam dużo mniejsze pliki, ale one w ogóle nie ładują się na serwer. Błąd pewnie jest gdzieś w kodzie, proszę o pomoc.
erix
Nie masz błędów w składni? Sprawdź, czy na innym serwerze dzieje się to samo.
muniekw
Na pierwszy rzut oka ta linika wydała mi się dziwna:
  1. if($this -> type !='image/gif' && $this -> type !='image/pjpeg' && $this->type !='png') /* 2 */


a szczególnie:

  1. image/pjpeg
erix
To nie jest dziwne - Internet Explorer wysyła JPEG z takim MIME.
muniekw
A to przepraszam. Nie wiedziałem o tym.
Ravik
Błędów w składni nie ma, coś jest z logiką nie tak, tylko nie wiem co. Jest ktoś w stanie mi z tym pomóc ? Dodam że nie działa na każdym serwerze.

Potrafi mi ktoś pomóc ?
Armstrong
  1. if($img -> init())
  2. {
  3. if($img -> validate())
  4. {
  5. if($img -> savefile())
  6. {
  7. echo 'Twój obrazek został pomyślnie zapisany.';
  8.  
  9. }
  10. }
  11. }


Nie powinno być czasem na początku:

  1. $img = new ImageUploader();


Chyba, że wcześniej deklarujesz.
Fifi209
Kurde, piszesz jak kura pazurem.

To mnie wręcz przeraziło:
  1. global $_FILES;


Pierwsza sprawa nie pisz w php4 tylko zgodnie z php5 - na pewno lepiej na tym wyjdziesz.

Po drugie po co robić globalną zmienną $db jak można ją przekazać do konstruktora klasy upload? (swoją drogą global jest złe)

A to:
  1. if($this -> type !='image/gif' && $this -> type !='image/pjpeg' && $this->type !='png')


Znacznie lepiej napisać tak:
  1. $types = array('image/gif', 'image/pjpeg', 'png');
  2.  
  3. if (!in_array($this->type, $types)) {
  4. // error
  5. }


IMHO nie widzę potrzeby pisania klasy dla czegoś takiego smile.gif
Ravik
dziękuję za pomoc, poradziłem sobie w inny sposób, do zamknięcia
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.