Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana]Pobranie wyników w modelu, wyświetlenie w widoku
Trobin
post
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

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


Zdaje się, że mój problem nie jest skompikowany i trudny do rozwiązania, ale napotkałem problem przy rozdzieleniu modelu (pobranie danych z bazy) z widokiem (wyświetlenie tych danych). Otóż w klasie Klasa_Model mam metodę show();. Ta metoda pobiera dane z bazy danych.
  1. <?php
  2. function pokaz(){
  3. $db = new Database();
  4. $query = 'SELECT number FROM kontakty';
  5. $result = $this->db->query($query);
  6. return $result;
  7. }
  8. ?>

Zrobiłem to w ten sposób, ale nijak mi to nie pomaga. Oto plik widoku (jedynie część "wyświetlająca" rzeczone dane):
  1. <?php
  2. foreach ($result as $row):
  3. {
  4. echo 'Nazwa użytkownika: ' . $row->number . '<br />';
  5. echo '<hr />';
  6. }
  7. endforeach
  8. ?>

No i jak wchodzę na stronę to Kohana wywala mi błąd:
Cytat
Undefined variable: result

Czuję, że rozwiązanie jest niezbyt trudne i skomplikowane, ale nie mogę na nie wpaść...

Ten post edytował Trobin 3.05.2008, 15:56:52
Go to the top of the page
+Quote Post
PawelC
post
Post #2





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Nigdzie nie zauważyłem mysql_fetch_array, tylko samo zapytanie do bazy mysql_query.
Zobacz tak:
  1. <?php
  2. function pokaz(){
  3. $db = new Database();
  4. $query = 'SELECT number FROM kontakty';
  5. $result = $this->db->query($query);
  6. $wynik = mysql_fetch_array($result);
  7. return $wynik;
  8. }
  9. ?>

I drugi kod:
  1. <?php
  2. foreach ($wynik as $row):
  3. {
  4. echo 'Nazwa użytkownika: ' . $row->number . '<br />';
  5. echo '<hr />';
  6. }
  7. endforeach
  8. ?>


Ten post edytował ExPlOiT 3.05.2008, 16:08:19
Go to the top of the page
+Quote Post
Trobin
post
Post #3





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

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


Na stronie fw Kohana dokopałem się do czegoś takiego:
  1. <?php
  2. $query = $this->db->query("SELECT `first_name`, `last_name`, `age` FROM `users`");
  3.  
  4. foreach ($query->result_array(FALSE) as $row)
  5. {
  6.  echo $row['first_name'];
  7.  echo $row['last_name'];
  8.  echo $row['age'];
  9. }
  10. ?>

No i wszystko by grało, ale twórcy dokumentacji chyba sami zapomnieli, że zaimpleementowali MVC w swoim projekcie, bo przedstawili tylko wersje "pobierz - wyświetl". Próbowałem już różnych return, globali i innych cudów na kiju i nie działa...

Ten post edytował Trobin 3.05.2008, 16:56:29
Go to the top of the page
+Quote Post
PawelC
post
Post #4





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


Ale pobierasz z bazy tylko jeden rekord czy kilka?
Go to the top of the page
+Quote Post
nrm
post
Post #5





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


model:
  1. <?php
  2. public function show(){
  3. $sql = $this->db->select()->from('kontakty')->get();
  4. return $sql->current();
  5. }
  6. ?>


kontroler:
  1. <?php
  2. $klasa = new Klasa_Model;
  3. $number = $klasa->show();
  4. $widok->set('result',$number);
  5. ?>


widok:
  1. <?php foreach($result as $r): ?>
  2. <?=$r->number; ?>
  3. <?php endforeach; ?>


w skrócie. no i w modelu NIE musisz ponownie ładować DB, jest odpalana defaultowo wyżej.
Go to the top of the page
+Quote Post
Trobin
post
Post #6





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

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


Teraz wygląda to tak:
model
  1. <?php
  2. function pokaz(){
  3. $sql = $this->db->select()->from('kontakty')->get();
  4. return $sql->current();
  5. }
  6. ?>

kontroler
  1. <?php
  2. public function pokaz(){
  3. $widok=new View('pokaz');
  4. $widok->title='Kontakty / pokaz kontakty';
  5. $widok->render(TRUE);
  6.  
  7. $pokaz=new Kontakt_Model();
  8. $number=$pokaz->pokaz();
  9. $widok->set('result', $number);
  10. }
  11. ?>

widok
  1. <?php foreach($result as $r): ?>
  2. <?=$r->number; ?>
  3. <?php endforeach; ?>

A błąd ciągle ten sam.
Go to the top of the page
+Quote Post
nrm
post
Post #7





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


no stary, podstawy. najpierw dałeś render a potem cos jeszcze chcesz? (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) przywróć logiczną kolejność (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Trobin
post
Post #8





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

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


...
no to ja już sobie pójdę (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
jednak: z tego co zauważyłem to mój serwer nie trwai zapisów w stylu (wywala mi tylko number; ?>)
  1. <?=$r->number; ?>

więc podmieniłem na
  1. <?php
  2. echo $r->number;
  3. ?>

i wtedy zgłasza się błąd
Cytat
Trying to get property of non-object

Jednak jeżeli wywalę
  1. <?php
  2. echo $result->number;
  3. ?>

poza pętle to wyświetla poprawnie (oczywiście nie wszystko (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - tylko pierwszy wpis, ale to chyba już tylko kwestia sortowania)

Ten post edytował Trobin 3.05.2008, 18:31:02
Go to the top of the page
+Quote Post
nrm
post
Post #9





Grupa: Zarejestrowani
Postów: 627
Pomógł: 33
Dołączył: 1.05.2005
Skąd: Katowice

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


kłaniają się podstawy dostępu do zmiennych, tablic i obiektów (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) akurat FW nic tu do tego (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) jak pobierasz jeden wiersz (current()) to oczywistym jest, że nie masz czego 'foreachować'. var_dump(), print_r() i kohana::debug() twoim przyjacielem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Trobin
post
Post #10





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

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


Czyli polecasz przerobić jeszcze raz rozdział "Dostęp do danych w PHP5" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Ok, to lecę czytać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

EDIT:
Dobra, pochwalę się (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) widać aż taki głupi nie jestem (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
model:
  1. <?php
  2. $result = $this->db->select()->from('kontakty')->get();
  3. return $result;
  4. ?>

kontroler
  1. <?php
  2. $result=$pokaz->pokaz();
  3. $widok->set('result', $result);
  4. ?>

widok
  1. <?php foreach ($result as $r): ?>
  2. <li><?php echo $r->number; ?></li>
  3. <?php endforeach; ?>

Dla potomnych

Ten post edytował Trobin 3.05.2008, 21:09:46
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: 25.09.2025 - 01:50