Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Tabela wyświetla tylko 1 wiersz
Forum PHP.pl > Forum > Przedszkole
marcwars
Witam,
mam 5 plików w b.prostym na cele autoedukacji modelu mvc, uzyskuję prawidłowy dostęp do danych, ale nie potrafię wyświetlić całej tabeli, tylko 1 wiersz.

Od początku- połączenie z bazą danych i wyciągnięcie tabeli do tablicy array, czyli model z mvc poniżej
model/model.php:
  1. include_once("model/Book.php");
  2. class Model {
  3. public function getBookList()
  4. {
  5. $connection = mysql_connect('xyz', 'xyz', 'xyz');
  6. $conn = mysql_select_db('xyz', $connection);
  7. $sql = "SELECT * FROM artykul";
  8. $result = mysql_query($sql);
  9. while($row = mysql_fetch_assoc($result))
  10. {
  11. $out[]=$row;
  12. }
  13. foreach ($out as $art)
  14. {
  15. return array(
  16. $art['tytul'] => new Book($art['tytul'], $art['nazwisko'], $art['tekst'])
  17. );
  18. }
  19. }


Oczywiście w bazie mysql, odpowiednie kolumny tabeli artykul mają nazwy: id, nazwisko, tytul i tekst.

W modelu jest jeszcze plik Book.php w prostej postaci:
  1. class Book {
  2. public $tytul;
  3. public $nazwisko;
  4. public $tekst;
  5.  
  6. public function __construct($tytul, $nazwisko, $tekst)
  7. {
  8. $this->tytul = $tytul;
  9. $this->nazwisko = $nazwisko;
  10. $this->tekst = $tekst;
  11. }
  12. }


powyższy wynik pokazuje widok, czyli
view/list.php
  1. <table>
  2. <tbody><tr><td>Tytuł</td><td>Nazwisko</td><td>Tekst</td></tr></tbody>
  3. <?php
  4.  
  5. foreach ($books as $tytul => $book)
  6. {
  7. echo '<tr><td><a href="index.php?book='.$book->tytul.'">'.$book->tytul.'</a></td><td>'.$book->nazwisko.'</td><td>'.$book->tekst.'</td></tr>';
  8. }
  9.  
  10. ?>
  11. </table>


wszystkim steruje kontroler, czyli plik
controller/controller.php
  1. include_once("model/model.php");
  2.  
  3. class Controller {
  4. public $model;
  5.  
  6. public function __construct()
  7. {
  8. $this->model = new Model();
  9. }
  10.  
  11. public function invoke()
  12. {
  13. if (!isset($_GET['book']))
  14. {
  15. $books = $this->model->getBookList();
  16. include 'view/list.php';
  17. }
  18. else {}
  19. }
  20. }


plik index.php zaciąga widok przez kontrolera:
  1. include_once("controller/controller.php");
  2.  
  3. $controller = new Controller();
  4. $controller->invoke();


Na razie skrypt pokazuje pierwszy wiersz tabeli, a dla celów ćwiczebnych w tabeli artykul są 2 artykuły z tytułem, autorem i treścią, więc coś nie gra.

Pewnie jakiś prosty błąd jest albo w model.php albo w list.php i gdzieś dane grzęzną.
Będę wdzięczny za pomoc, bo próbowałem juz kilku zagrań, ale nic mi nie chodzi.
nospor
return array(
Bierzesz sie z MVC nie znając totalnie podstaw...
return konczy działanie funkcji. Dając return w petli konczysz już petle i funkcje na pierwszym obrocie, nie docierajac do pozostalych obrotów a co za tym idzie pozostaluych danych
marcwars
Dzięki za cynk odnośnie return array ()
Ale co powinienem dać w zamian, żeby przeszło po całej tablicy?
Dałem samo array, to wywaliło mi błąd.
Rzeczywiście mam trochę braków w pewnych podstawach php i dlatego kształce się na prostych przykładach.
Najgorsze, że czuję, że tylko jedno hasło blokuje mi drogę do zwycięstwa:)
nospor
Cytat
Najgorsze, że czuję, że tylko jedno hasło blokuje mi drogę do zwycięstwa:)
Nie, to nie hasło ci blokuje drogę, ale Twoja niechęć do poznania podstaw. Dopiero po podstawach powinienieś brać się wyżej.

w petli masz generować tablice, a po petli masz tą tablice zwrócic.
marcwars
Czyli, że zamiast return Array (), mam dać dwie funkcje jedną do wygenerowania tablicy na podstawie danych z mysql, a druga to np. print_r($tablica)?
nospor
  1. $tab = array();
  2. foreach (blabla){
  3. $tab[] = tu se cos wrzucasz do tablicy
  4. }
  5. return $tab;
phpion
Stwórz sobie jakąś tablicę, np. $return. Zainicjuj ją w metodzie modelu jako $return = array(). Przy każdym przebiegu pętli nie zwracaj nic, tylko dopisuj obiekt do tablicy $return, czyli $return[] = twoj_obiekt. Na końcu, już poza pętlą, zwróć tą tablicę, czyli return $return;
marcwars
Zrobiłem tak:
  1. foreach ($out as $art)
  2. {
  3. $books = array();
  4. $books[$art['tytul']] = array ($art['tytul'], $art['nazwisko'], $art['tekst']);
  5.  
  6. }
  7. return $books;


ale wywala mi tylko błędy.
nospor
1)
$books = array();
mialo być przed pętlą a nie w ....
w moim kodzie z poprzedniego posta jest to jasno czarno na białym napisane

2) wczesniej do tablicy zapisywałes new Book a teraz samo array. Jestes pewien ze nie zaczynasz się już plątać?
marcwars
1) $books = array(); dałem po, bo przed pętlą wywaliło mi dużo błędów (więcej niż jakbym umieścił ten kod po pętli.
2)trochę, masz rację, przeoczyłem, że to miał być nowa instancja obiektu Book, więc zrobiłem teraz tak:
  1. $books = array();
  2. foreach ($out as $art)
  3. {
  4.  
  5. $books[$art['tytul']] = new Book ($art['tytul'], $art['nazwisko'], $art['tekst']);
  6.  
  7. }
  8. return $books;


ok, teraz wychodzi jak trzeba.
Dziękuję!
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.