Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Kohana] Wstawianie danych z formularzy
Forum PHP.pl > Forum > Przedszkole
Bolt
Mam pytanie. MVC działa w taki sposób, że model przekazuje dane kontrolerowi, a później kontroler widokowi, który je wyświetla. Ale jak zrobić, żeby np. dane z formularza zostały wpisywane do bazy? Wtedy widok przekazuje do kontrolera a kontroler do modelu? Chcę to zrobić, ale nie bardzo mi wychodzi. W 15 linii kodu kontrolera pojawia się błąd:
Kod
Undefined index: add


Model:
  1. <?php
  2.  
  3. class Display_Model extends Model {
  4.  
  5.    public function __construct() {
  6.        parent::__construct();
  7. }
  8.  
  9.    public function download($post) {
  10.        return $this->db-> insert('things',array(
  11.        'name'=> $post));
  12.    }
  13. }
  14.  
  15. ?>


Kontroler:
  1. <?php
  2.  
  3. class Control_Controller extends Controller {
  4.  
  5.    public function __construct() {
  6.        parent::__construct();
  7.        $this->profiler = new Profiler;
  8.        
  9.    }
  10.    public function index() {
  11.        
  12.        $view = new View('show');
  13.        $view->title= "Title";  
  14.        $user= new Display_Model;
  15.        $user->download($_POST['add']);
  16.        $view->render(TRUE);
  17.    }
  18. }
  19.  
  20. ?>


Widok:
  1. <!DOCTYPE html
  2.     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
  5. <head>
  6.   <title><?php echo $title;?></title>
  7. </head>
  8. <body>
  9. <form name="formz" method="post">
  10. <div id="form">
  11. <input type="text" name="add" />
  12. <input type="submit" value="Send" />
  13. </div>
  14. </form>
  15.  
  16. </body>
  17. </html>
phpion
Najwidoczniej nie ma parametru $_POST['add']. Otrzymujesz błąd przy wywoływaniu control/index, natomiast już po wysłaniu formularza go nie ma - prawda?

Poza tym staraj się korzystać z odpowiednich metod do odpowiednich celów. Przykładowo: unikaj bezpośredniego odwoływania do $_POST na rzecz $this->input->post.

Ogólnie spróbuj taki kod:
  1. <?php
  2. public function index() {
  3.    // sprawdzamy czy formularz zostal wyslany
  4.    if (request::method() == 'post') {
  5.        $user= new Display_Model;
  6.        // pobieramy dane z $_POST i wysylamy do modelu
  7.        // jesli nie przeslano $_POST['add'] wstawiana jest "domyslna wartosc"
  8.        $user->download($this->input->post('add', 'domyslna wartosc'));
  9.        
  10.        // przekierowanie na index aby wyeliminowac
  11.        // dodawanie kolejnych rekordow pod odswiezeniu
  12.        url::redirect('control/index');
  13.    }
  14.  
  15.    $view = new View('show');
  16.    $view->title= "Title";  
  17.    $view->render(TRUE);
  18. }
  19. ?>
Bolt
Dzięki wielkie, działa. Muszę się zapoznać z walidacją formularzy. Teraz trzeba z czymś innym pokombinować smile.gif
webdice
Na przyszłość proszę się zarejestrować i pisać tematy w odpowiednich działach, ten powinien znajdować się w dziale Frameworki. W przyszłości takie tematy będę przenosił (a Ty jako gość nie będziesz mógł w nich pisać).
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.