Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Zend_Form_Element_File - błąd uploadu, ale plik wrzuca się
IceManSpy
post
Post #1





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam

Napotkałem się dzisiaj na kilka dziwnych problemów z powyższym komponentem.

Problemy:
1. Pokazuje błąd odbioru obrazka, a na serwer go wrzuca (pojawia się folder w docelowym folderze i jest przetwarzany dalej formularz).
2. Po walidacji formularza, jesli nie podam obrazka to zostaje wyświetlony ponownie formularz z wypełnionymi danymi (pole do pliku jest puste). Kiedy jednak zostanie wskazana ścieżka do obrazka (po wcześniejszym nie podaniu), który chcemy wrzucić to dostaję komunikat "Too many files, maximum '1' are allowed but '2' are given", chociaż jest tylko jeden wrzucany.

Jak rozwiązać powyższe problemy? Może robię coś w złej kolejności?

Fragment formularza:
  1. $image = new Zend_Form_Element_File('image');
  2. $image->setLabel('Dodaj zdjęcie główne: ');
  3. $path = realpath(APPLICATION_PATH.'/../public/images');
  4. $image->setDestination($path);
  5. $image->setRequired(true);
  6.  
  7. $image->addValidator('count',false,1);
  8. $image->addValidator('size',false,1024000);
  9. $image->addValidator('extension',false,array('jpg'));

Kod z kontrolera odpowiedzialnego za obsługę formularza:
  1. $form_offer = new Offer_Form_AddOffer();
  2. $form_offer->getElement('image')->addFilter('Rename',APPLICATION_PATH.'/../public/images/'.$image_name);
  3.  
  4. if($this->_request->isPost() && $form_offer->isValid($_POST) && $form_offer->getValue('image') != null)
  5. {
  6. if (!$form_offer->image->receive()) {
  7. $this->view->error = "Error receiving the file";
  8. }
  9.  
  10. //Pobranie danych za pomoca getValue i dalsze ich przetwarzanie
  11. // ale nie robię $form_offer->getValue('image')
  12.  
  13. $form_offer->reset();
  14.  
  15. $this->view->confirm = true;
  16. }
  17. if($form_offer->isErrors())
  18. {
  19. $form_offer->populate($_POST);
  20. }


==== EDYCJA ====
Problem rozwiązałem. Przyczyną tego było w złym miejscu postawienie warunku na odbiór pliku w kontrolerze. Tak wygląda poprawiony plik:
  1. if($this->_request->isPost() && $form_offer->isValid($_POST) && $form_offer->getValue('image') != null)
  2. {
  3. //Pobranie danych i operacje na nich
  4.  
  5. //resetowanie formularza
  6. $form_offer->reset();
  7.  
  8. $this->view->confirm = true;
  9. }
  10. else
  11. {
  12. if ($this->_request->isPost() && !$form_offer->getElement('image')->receive() && $form_offer->getValue('image') != null) {
  13. $this->view->error = "Error receiving the file";
  14. }
  15. }
  16. if($form_offer->isErrors())
  17. {
  18. $form_offer->populate($_POST);
  19. }


Ten post edytował IceManSpy 27.03.2012, 15:37:59
Go to the top of the page
+Quote Post
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Jeśli mogę coś jeszcze zasugerować:
  1. $form_offer->isValid($_POST);
- żeby pobrać dane nieprzefiltrowane (przez formularz, które pobieramy przez $form->getValue) używajmy requesta i metod getParams:
  1. $form_offer->isValid($this->getRequest()->getParams());


Takie $_POST brzydko wygląda (IMG:style_emoticons/default/thumbsdownsmileyanim.gif)

Ten post edytował Pilsener 29.03.2012, 10:39:49
Go to the top of the page
+Quote Post
IceManSpy
post
Post #3





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A chodzi tylko o styl, czy jakiś bezpieczeństwo?
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Bezpieczeństwo na pewno nie, bo dane z requesta nie są filtrowane, raczej o wygodę i dodatkowe możliwości, wszystko masz w jednym miejscu plus garść przydatnych metod, ma to znaczenie np. jeśli akcja ma obsługiwać żądania POST, GET, ajaxowe czy wykonywać pracę na rzecz innego kontrola. No i estetytka (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 23:51