Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [skrypt][PHP]Kawałek kodu do oceny
Ojcov
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.04.2015

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


Witam, jestem początkującym programistą PHP (samoukiem). Ponieważ uważam że najlepiej uczy się wykonując praktyczne zadania stworzyłem sobie projekt który poniekąd jest mniej rozbudowaną wersją pewnego serwisu. Szablon strony tworzę w bootstrapie. Chciałbym przedstawić kawałek kodu który stworzyłem i poprosić o to aby znawcy programowania obiektowego na tym forum wypowiedzieli się na ten temat, czy ten kod który napisałem mogę nazwać OBIEKTOWYM oraz o ewentualne porady dotyczące modyfikacji tego co napisałem.

W tym wszystkim chodzi o to aby do bazy danych można było dodawać książki a potem na swoim profilu dodawać je do ulubionych, na półki typu przeczytane, posiadam, chcę przeczytać itd. Na stronie głównej natomiast chcę wyświetlać 5 ostatnio dodanych (przez użytkowników) książek do bazy (okładka, tytuł, autor oraz opis) tak jak widoczne jest to na zdjęciu (zmieściły się tylko 3).

(IMG:http://imageshack.com/a/img673/3348/hhMjX0.png)

Tutaj prezentuję kod klasy stworzonej do pobierania rekordów z bazy i wyświetlania ich na stronie.
  1. class LatestBooks{
  2. private $tytul;
  3. private $autor;
  4. private $opis;
  5. private $sciezka;
  6. private $num;
  7. private $pdo;
  8.  
  9. public function __construct($num, $pdo ){
  10. $this->num = ($num - 1);
  11. $this->pdo = $pdo;
  12. }
  13.  
  14. public function getData(){
  15. $stmt = $this->pdo->query('SELECT * FROM `books`ORDER BY id DESC LIMIT 5 ');
  16. $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
  17. $this->tytul = $row[$this->num]['tytul'];
  18. $this->autor = $row[$this->num]['autor'];
  19. $this->opis = $row[$this->num]['opis']."...".'<button type="button" class=class="btn btn-inverse btn-xs">Więcej</button>';
  20. $this->sciezka = $row[$this->num]['sciezka'];
  21. $stmt->closeCursor();
  22.  
  23. }
  24.  
  25. public function write(){
  26. return "
  27. <div class=\"book col-md-12\">
  28. <div class=\"col-md-4\">
  29. <img src=". "{$this->sciezka}". " class=\"fotka\">
  30. </div>
  31. <div class=\"col-md-7 \">
  32. <h4>". "{$this->tytul}". "</h4>
  33. <p>Autor:". "{$this->autor}". "</p>
  34. <h5>". "{$this->opis}" ."</h5>
  35. </div>
  36. </div> ";
  37. }
  38.  
  39. }

A tutaj ten, odpowiedzialny za utworzenie obiektów i wywołanie metody.
  1. require('klasa.php');
  2. $pdo = new MyPDO();
  3. $book = new LatestBooks(1, $pdo);
  4. $book->getData();
  5. print $book->write();
  6. $book = new LatestBooks(2, $pdo);
  7. $book->getData();
  8. print $book->write();
  9. $book = new LatestBooks(3, $pdo);
  10. $book->getData();
  11. print $book->write();
  12. $book = new LatestBooks(4, $pdo);
  13. $book->getData();
  14. print $book->write();
  15. $book = new LatestBooks(5, $pdo);
  16. $book->getData();
  17. print $book->write();

Dziękuję z góry wszystkim którzy zechcą poświęcić czas na pomoc, mam nadzieję że wszystko objaśniłem jak najlepiej i podałem wszystkie niezbędne informacje. Ze swojej strony pragnę jeszcze dodać że jest to pierwszy raz kiedy napisałem coś (mam nadzieję) obiektowo.

Ten post edytował Ojcov 1.05.2015, 11:32:31
Powód edycji: [Kshyhoo]: bb-code
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Witamy na Forum. Zapoznaj się z panującymi tu zasadami, by uniknąć blokady wątków.
Do ocen jest dział Oceny, przenoszę.
Go to the top of the page
+Quote Post
Ojcov
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.04.2015

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


Przepraszam i dziękuję za przeniesienie.
Go to the top of the page
+Quote Post
IProSoft
post
Post #4





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Może i masz rację na temat tworzenia projektów, ale wtedy za podstawę trzeba brać poprawny kod, bo to co stworzyłeś śrenio trzyma się kupy.

- wyświetlasz listę, a dla każdej pozycji tworzysz nie potrzebnie obiekt
- pobierasz za każdym razem 5 rekordów a wyświetlasz jeden
itp itd

Jako parametr powinieneś podać nie ID, tylko ilość materiałów do wyświetlenia i wywołać klasę tylko raz.
  1. $book = new LatestBooks( $pdo );
  2. $book->getData( 5 - liczba pozycji );
  3. echo $book->write();
Go to the top of the page
+Quote Post
Ojcov
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.04.2015

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


Dlatego stworzyłem ten temat, aby dowiedzieć się czy to co zrobiłem jest poprawne.
Dziękuję za wyrażenie opinii, spróbuję to poprawić zgodnie ze wskazówkami.


@edit: Mam jeszcze pytanie. Po wpisaniu wartości dla ilości rekordów które chciałbym wyświetlić po pobraniu z bazy powinienem wewnątrz tej metody użyć pętli do wyświetlenia tych 5 różnych rekordów ? Czy może istnieje jakieś inne rozwiązanie?

Ten post edytował Ojcov 1.05.2015, 12:41:09
Go to the top of the page
+Quote Post
IProSoft
post
Post #6





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Cytat(Ojcov @ 1.05.2015, 13:28:12 ) *
Dlatego stworzyłem ten temat, aby dowiedzieć się czy to co zrobiłem jest poprawne.

Moim zdaniem nie od tego powinieneś zacząć, a od poznania struktur itp. bo już teraz łapiesz nie potrzebnie nawyki ale każdy ma swoje podejście i oczywiście nie twierdzę, że Twoje jest złe :-)

Na poczatek spróbuj wobec tego wykonać to na petli w metodzie write.
Go to the top of the page
+Quote Post
Ojcov
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 4.04.2015

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


Zasięgnąłem porady również na innym forum i teraz wyżej prezentowany kod wygląda tak.

Kod
class LatestBooks{
        private $pdo;
        
        public function __construct(MyPDO $pdo ){
            $this->pdo = $pdo;
        }
        
        public function getData($num){
            $stmt = $this->pdo->query('SELECT * FROM `books`ORDER BY id DESC LIMIT '.$num.' ');  
            return $stmt->fetchAll(PDO::FETCH_ASSOC);                                         
        }    
}


Wywołanie:

Kod
require('inc/klasa.php');
    $pdo = new MyPDO();
    $book = new LatestBooks($pdo);
    $data = $book->getData(5);
foreach($data as $row) {
?>
    <div class="book col-md-12">
            <div class="col-md-4">
            <img src="<?=$row['sciezka']?>" class="fotka">  
            </div>
            <div class="col-md-7 ">
            <h4>"<?=$row['tytul']?>"</h4>
            <p>Autor:"<?=$row['autor']?>"</p>
            <h5>"<?=$row['opis']?>"</h5>
              </div>
        </div>  
        <?php
}


Jak to oceniasz?
Go to the top of the page
+Quote Post
IProSoft
post
Post #8





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Już lepiej ale nie ważne jak Ci napiszą abyś robił, ale to czy rozmiesz dlaczego w ten sposób.
Go to the top of the page
+Quote Post
qjam
post
Post #9





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 31.07.2011

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


W ogóle to rozbij skrypt na MVC.
FrontController - reaguje na to co w np. GET itp. Jeśli GET masz / to odpal tę stronę główną z 5 książkami (czy co tam ma być robione na stronie głównej) czyli odpala konkretną metodę kontrolera
Controller - metoda wywołana w FC wysyła zapytanie do modelu
Model - odpala zapytanie do bazki, zapisuje wynik w tablicy i returnuje do kontrolera, a kontroler odpala teraz metode widoku
View - returnuje zrenderowany widok do kontrolera, a następnie kontroler zwraca do FC i tu następuje dopiero echo

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: 23.08.2025 - 06:09