Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sprawdzanie poprawności danych z formularza
Forum PHP.pl > Forum > Przedszkole
brzoza91
Witam
Chciałbym stworzyć walidacje danych umiejscowioną w MVC. W poniższym kodzie walidacje umieściłem w kontrolerze(akcja insert). Mój cały problem sprowadza się do tego miejsca

  1. if(!$validation->isError==0){
  2.  
  3. //co tutaj zrobic
  4.  
  5.  
  6.  
  7. }else {
  8. $model=$this->loadModel('dish');
  9. $model->insert($_POST);
  10. $this->redirect('?task=dish&action=index');
  11.  
  12. }


Gdy dane są poprawne to jest ładowany model, który umieszcza ładnie i poprawnie dane w bazie danych.
Lecz co zrobić gdy dane są niepoprawne? W moim założeniu jest żeby po wprowadzeniu błędnych danych wyświetliła się dalej strona z formularzem z informacją o błędnych danych. Więc jak zrobić aby przekazać obiekt $validation do widoku z formularzem tak abym mógł potem w widoku wyciągnąć informacje o błędach


dishcontroller.php
  1. require_once ('controller.php');
  2. require_once ('validator.php');
  3.  
  4.  
  5. class DishController extends Controller{
  6.  
  7.  
  8. public function index(){
  9. $view=$this->loadView('dish');
  10. $view->index();
  11. }
  12.  
  13. //laduje widok z formularzem dodania potrawy
  14. public function add(){
  15. $view=$this->loadView('dish');
  16. $view->add();
  17. }
  18. //laduje widok z przegladem potrawy
  19. public function show(){
  20. $view=$this->loadView('dish');
  21. $view->show($_GET['id']);
  22. }
  23.  
  24. //laduje model ktory umieszcza dane w bazie
  25. public function insert(){
  26. $validation= new Validator;
  27.  
  28. $validation->MessageText=NULL;
  29. $validation->isError=0;
  30.  
  31. $dishname=$_POST['dishname'];
  32.  
  33. echo "PRZED:<br>";
  34. $validation->viewMessage();
  35.  
  36. if(!$validation->CheckString($dishname,2)){
  37. $validation->setMessage('dishname','Nazwa dania jest zbyt krótka');
  38. };
  39.  
  40. echo "PO:<br>";
  41. $validation->viewMessage();
  42.  
  43. if(!$validation->isError==0){
  44.  
  45. //co tutaj zrobic
  46.  
  47.  
  48.  
  49. }else {
  50. $model=$this->loadModel('dish');
  51. $model->insert($_POST);
  52. $this->redirect('?task=dish&action=index');
  53.  
  54. }
  55. }
  56.  
  57. public function delete(){
  58. $model=$this->loadModel('dish');
  59. $model->delete($_GET['id']);
  60. $this->redirect('?task=dish&action=index');
  61. }
  62. };




dishview.php

  1. class DishView extends View{
  2.  
  3. public function index(){
  4. $dish=$this->loadModel('dish');
  5. $this->set('dishList', $dish->getAll());
  6. $this->render('indexDish','dish/');
  7. }
  8.  
  9. public function add($obj=null){
  10. $this->render('addDish', 'dish/'); //laduje plik z formularzem addDish.html.php, formularz ten przesyła dane do akcji insert();
  11. }
  12.  
  13.  
  14. public function show($id){
  15. $dish=$this->loadModel('dish');
  16. $this->set('dishShow', $dish->getOne($id));
  17. $this->render('showDish', 'dish/');
  18. }
  19. }
CuteOne
1. if(!$validation->isError==0){ - wiesz w ogóle co robi ten kod?
2. zobacz sobie w kod Zenda

  1.  
  2. $form = new Example_Form(); // tworzy formularz
  3.  
  4. if($form -> isValid()) {
  5.  
  6. // wykonanie akcji
  7. }
  8.  
  9. $this-> view -> form = $form;


Jak widać po stronie kontrolera nie przechwytujesz błędów, dlaczego? Ponieważ to obiekt Form zawiera ewentualne błędy (ktore przekazuje do widoku) a kontrolerowi nic do tego.
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.