Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana]Pobranie wyników w modelu, wyświetlenie w widoku
Trobin
post 3.05.2008, 15:56:10
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


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
PawelC
post 3.05.2008, 16:04:34
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 3.05.2008, 16:56:15
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


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post
PawelC
post 3.05.2008, 17:01:24
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 3.05.2008, 17:03:01
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 3.05.2008, 17:35:31
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.


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post
nrm
post 3.05.2008, 17:50:09
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? winksmiley.jpg przywróć logiczną kolejność smile.gif


--------------------
Go to the top of the page
+Quote Post
Trobin
post 3.05.2008, 18:14:08
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ę 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 winksmiley.jpg - tylko pierwszy wpis, ale to chyba już tylko kwestia sortowania)

Ten post edytował Trobin 3.05.2008, 18:31:02


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post
nrm
post 3.05.2008, 20:15:30
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 winksmiley.jpg akurat FW nic tu do tego winksmiley.jpg jak pobierasz jeden wiersz (current()) to oczywistym jest, że nie masz czego 'foreachować'. var_dump(), print_r() i kohana::debug() twoim przyjacielem winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
Trobin
post 3.05.2008, 21:09:24
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" winksmiley.jpg . Ok, to lecę czytać smile.gif .

EDIT:
Dobra, pochwalę się winksmiley.jpg widać aż taki głupi nie jestem 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


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.06.2025 - 06:54