Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Kohana]Upload obrazka
Forum PHP.pl > Forum > Przedszkole
MateuszS
Witam, tworzę prosty skrypt uploadu zdjęcia na serwer. Jednak ciagle wyrzuca mi bład że nie wybrałem obrazka (załacza się bład dla pola "not_empty"). Oto mój kod. Kohana 3.3

  1. //Walidacja opisu obrazka
  2. $_post = Validation::factory($_POST)
  3. ->rule("alt", "not_empty");
  4.  
  5. //Walidacja zdjęcia
  6. $_files = Validation::factory($_FILES)
  7. ->rule("image", "Upload::valid")
  8. ->rule("image", "Upload::not_empty")
  9. ->rule("image", "Upload::type", array(":value", $this->config["img_allowed_types"]));
  10.  
  11. if($_post->check() && $_files->check())
  12. {
  13. //dalsza czesc
  14. }
  15. else
  16. {
  17. //Errory walidacji pliku i opisu
  18. $errors = array_merge( $_post->errors("admin/gallery"),
  19. $_files->errors("admin/gallery")
  20. );
  21.  
  22. $this->template->content = View::factory("admin/gallery/error_add")
  23. ->set("errors", $errors);
  24. }


I formularz

  1. <?php
  2. echo form::open(null, array( 'enctype' => 'multipart/form-data' ));
  3. ?>
  4.  
  5. Opis:<br />
  6.  
  7. <?php
  8. echo form::input("alt", null, array("style" => "border: 1px solid grey; background-color: #E8E8E8; width: 350px"));
  9. ?>
  10. <br /><br />Wybierz zdjęcie:<br />
  11. <?php
  12. echo form::file("image", array("style" => "border: 1px solid grey; background-color: #E8E8E8; width: 350px"));
  13. ?>
  14.  
  15. <br />
  16.  
  17. <?php
  18. echo form::submit("submit", "Dodaj zdjęcie", array("style" => "border: 1px solid grey; background-color: #E8E8E8; width: 150px"));
  19. echo form::close();
  20. ?>


Już godzinę to męczę, nie wiem czy coś przegapiłem? Pozdrawiam
sabat24
Sprawdź to:

  1. Validation::factory($_FILES)
  2. ->rules('image', array (
  3. array('not_empty'),
  4. array('Upload::not_empty'),
  5. array('Upload::valid'),
  6. array('Upload::type' ,array(':value', $this->config["img_allowed_types"])),
  7. ))


I nie używaj $_POST, tylko $_post = $this->request->post();

UPDATED Sprawdź najpierw w źródle strony, czy formularz ma ustawioną metodę POST.
UPDATED 2 Wrzuciłem tę część kodu Twojego, którą zaprezentowałeś, pod moją Kohanę 3.3 i nie mam z nim problemu. Waliduje się poprawnie i bezbłędnie. Pokaż większy fragment kodu odnośnie walidacji.
MateuszS
Pierwsze co zrobiłem to sprawdziłem czy generuje dobry formularz happy.gif Generuje.

http://wklej.org/id/962149/ - akcja kontrolera.

messages/gallery.php
  1. <?php defined('SYSPATH') or die('No direct access allowed.');
  2.  
  3. return array
  4. (
  5. //Komunikaty
  6. "file_uploaded" => "Pomyślnie wysłano zdjęcie.",
  7. "file_upload_error" => "Bład przy wysyłaniu zdjęcia.",
  8. "alt_update_error" => "Zdjęcie zostało przesłane jednak wystapiły błędy przy próbie zapisania opisu",
  9.  
  10. /**
  11. * Błędy przy dodawaniu
  12. */
  13. "image" => array(
  14. "Upload::type" => "Niedozwolone rozszerzenie pliku.",
  15. "Upload::not_empty" => "Nie wybrano zdjęcia do wysłania."
  16. ),
  17.  
  18. "alt" => array(
  19. "not_empty" => "Pozostawiono puste pole (opis zdjęcia)."
  20. )
  21. );
sabat24
Przekleiłem kod i nadal nie mam problemów. Zdjęcie się przesyła i waliduje. Listowałeś, co zawiera zmienna $_FILES ? Może masz tam jakieś informacje o błędach?
skowron-line
Może Ci brakuje w formularzu
  1. enctype="multipart/form-data"
MateuszS
Tak listowałem. Zauważyłem że wybierając 2 różne zdjęcia o tych samych rozszerzeniach, jedno waliduje i przepuszcza a drugie już nie (wywala że nie wybrano). Oto te dwa zdjęcia (jak chcesz możesz sprawdzić u siebie czy się uploadują na moim kodzie, byłbym wdzięczny):

http://speedy.sh/z8g6p/zdj.rar

A to zdjęcie które przepuszcza się nie uploaduje. Opis jest dodawany poprawnie i wpis do bazy ale brak pliku w folderze (foldery też się tworzą poprawnie). Oto metoda w modelu:

  1. /**
  2. * Dodanie zdjęć
  3. */
  4. public function gallery_upload($file, $directory)
  5. {
  6. $array_data = array(
  7. "Image" => $file["name"]
  8. );
  9.  
  10. //Upload na serwer
  11. $upload = Upload::save($file, $file["name"], $directory);
  12.  
  13. //Wpis do bazy
  14. $query = DB::insert("parys_pictures", array_keys($array_data))
  15. ->values($array_data)
  16. ->execute();
  17.  
  18. //Ostatnie zauploadowane ID
  19. $this->last_insert_id = $query[0];
  20.  
  21. if($upload && $query)
  22. return true;
  23.  
  24. return false;
  25. }
sabat24
Jeśli masz problem ze zdjęciem: 20120715_134935.jpg, to oznacza, że jest ono zbyt duże do przesłania. Masz pewnie limit ustawiony na 3mb. Zmień sobie to lub dodaj regułę:
array('Upload::size' ,array(':value', '3M')), która nie przepuści zbyt dużych zdjęć.

Dodaj duże zdjęcie i wylistuj $_FILES. Dostaniesz pewnie błąd nr 1.
MateuszS
Ok już all śmiga thanks
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-2024 Invision Power Services, Inc.