Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]OOP, PDO łączenie się z bazą i wyświetlanie wyników.
Forum PHP.pl > Forum > Przedszkole
miras
Witam dalej męcze OOP i teraz mam taki problem, stworzyłem klasę a w niej 2 funkcje 1 - łącząca się z bazą danych 2 - wyświetlająca wyniki z bazy... jednak wywala mi tu błąd, podejrzewam, że jest to coś nieskomplikowanego i komuś kto jest w temacie nawet nie będzie trzeba go wklejac...

klasa.class.php

  1. <?php
  2.  
  3.  
  4. class klasa {
  5.  
  6. public function polacz() {
  7. try
  8. $pdo = new PDO('mysql:host=localhost;dbname=x', 'x', 'x');
  9.  
  10. }
  11.  
  12. public function wyswietl() {
  13. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14. $stmt = $pdo -> query('SELECT tytul, opis FROM tabela');
  15. }
  16.  
  17.  
  18. }
  19.  
  20. ?>




index.php :


  1. <?php
  2. include("klasa.class.php");
  3. polacz();
  4. zapisz();
  5. while($row = $stmt -> fetch())
  6. {
  7. echo '<li>'.$row['tytul'].': '.$row['opis'].'</li>';
  8. }
  9. ?>


Dzięki z góry.
krzysiekk
  1.  
  2. public function polacz() {
  3. try
  4. $pdo = new PDO('mysql:host=localhost;dbname=x', 'x', 'x');
  5.  
  6. }



co to za TRY ?


bledy sie podaje zawsze pisał o tym ktoryś moderator.

artuross
  1. try
  2. $pdo = new PDO('mysql:host=localhost;dbname=x', 'x', 'x');


powinno byc

  1. try{
  2. $pdo = new PDO('mysql:host=localhost;dbname=x', 'x', 'x');
  3. }
  4. catch(jakis_exception $e)
  5. {
  6. // kod
  7. }
miras
Ok.. dzięki, a mógłbyś mi jeszcze wytłumaczyć od czego jest ? :

  1. catch(jakis_exception $e)
  2. {
  3. // kod
  4. }


ta część?
artuross
W bloku try chodzi o to, ze jesli cos pojdzie nie tak to jest wyrzucany wyjatek, ten wyjatek powinien zostac obsluzony w bloku catch, dzieki temu jak nie mozesz polaczyc sie z DB to mozesz ladnie zakonczyc skrypt, a nie na chama smile.gif
miras
index.php:

  1. <?php
  2. include("bet.class.php");
  3. $klasa = new klasa;
  4. $klasa->polacz();
  5. $klasa->wyswietl();
  6. while($row = $stmt -> fetch())
  7. {
  8. echo '<li>'.$row['tytul'].': '.$row['opis'].'</li>';
  9. }
  10. ?>



bet.class.php

  1. <?php
  2.  
  3.  
  4. class klasa {
  5.  
  6. public function polacz() {
  7. try {
  8. $pdo = new PDO('mysql:host=localhost;dbname=ng177441_cbr', 'ng177441_cbr', '{r^PHQhP#QLe');
  9. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. } catch(PDOException $e){
  11. echo 'Połączenie nie mogło zostać utworzone.<br />';
  12. }
  13. }
  14.  
  15. public function wyswietl() {
  16.  
  17. $stmt = $pdo -> query('SELECT tytul, opis FROM ogloszenia');
  18. }
  19.  
  20.  
  21. }
  22.  
  23. ?>


I nadal mam błąd:

  1. Call to a member function query() on a non-object in bet.class.php on line 17
Szymciosek
  1. <?php
  2.  
  3.  
  4. class klasa {
  5. private $pdo;
  6.  
  7. public function polacz() {
  8. try {
  9. $this->pdo = new PDO('mysql:host=localhost;dbname=ng177441_cbr', 'ng177441_cbr', '{r^PHQhP#QLe');
  10. $this->pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  11. } catch(PDOException $e){
  12. echo 'Połączenie nie mogło zostać utworzone.<br />';
  13. }
  14. }
  15.  
  16. public function wyswietl() {
  17.  
  18. $stmt = $this->pdo -> query('SELECT tytul, opis FROM ogloszenia');
  19. }
  20.  
  21.  
  22. }
  23.  
  24. ?>
nospor
Zanim zaczniesz bawić się w obiektówki, poczytaj wpierw jakieś podstawy.

W twoim przypadku podstawami są właściwości klasy, do których należy dobierać się przez $this
miras
ok, dzięki:)

a jeszcze pytanko ostatnie ;>

  1.  
  2. <?php
  3.  
  4.  
  5. class klasa {
  6. private $pdo;
  7. public $stmt;
  8.  
  9. public function polacz() {
  10. try {
  11. $this->pdo = new PDO('mysql:host=localhost;dbname=x', 'x', 'x');
  12. $this->pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  13. } catch(PDOException $e){
  14. echo 'Połączenie nie mogło zostać utworzone.<br />';
  15. }
  16. }
  17.  
  18. public function wyswietl() {
  19.  
  20. $this->stmt = $this->pdo -> query('SELECT tytul, opis, data FROM ogloszenia');
  21.  
  22. }
  23.  
  24.  
  25. }
  26.  
  27. ?>
  28.  



i pytanie: jak np. chcę formatować datę ( w bazie jest zapisana data w formacie strtotime, a jak chciałbym ją normalnie wyświetlić: date("Y-m-d", $data); to po której stronie mam "przerobić" tą datę - przy wświetlaniu w index.php czy w klasie? jesli w klasie to prosiłbym o jakiś przykład jak to rozwiązać...
viking
Jak ci wygodnie. Przy takim kodzie prosi się o class klasa extends PDO...
miras
Mógłbyś to zobrazować? sorry, za takie pytania prośby, ale czekam na książkę i próbuje uczyć się z tego, co znalazłem w sieci.. wiec niewiele rozumiem jeszcze.
viking
A bez książki w dokumentację zajrzeć się nie da? Albo w sieci poszukać lepszych źródeł jeżeli nie rozumiesz innych? To są naprawdę podstawy podstaw.
markonix
Pisanie na siłę obiektowo nie ma żadnych korzyści - wiem to z autopsji.

Lepiej nauczyć się najpierw dobrze strukturalnie pisać, tzn. dobrze poznać sam język (dostępne funkcje, instrukcje warunkowe itp).
Potem należy się nauczyć podstaw "klas", ale po to aby móc tylko z nich korzystać (tworzenie obiektów, wywoływanie metod, konstruktor), tzn. z gotowców.
Potem można się pokusić o własne klasy - zamiast zbioru funkcji i na tym poprzestać.
I tutaj jak bierzemy się za coś większego (a za to się bierzesz bo już masz tam bazę danych więc jest to jakiś cms, portal, serwis) to nie walisz wszystko w obiekty bo tak będzie fajnie, bo wychodzi z tego koszmar, i wolałbym już dobrze napisany strukturalnie kod, a nie na siłę operowanie na obiektach.

Od tego żeby nauczyć się zalet pisania obiektowego są frameworki - najpierw te prostsze.
Dopiero MVC otworzyło mi oczy i zacząłem pisać coś czego się nie wstydzę - moje poprzednie "CMSy" pisane "obiektowo" już dawno wyrzuciłem do kosza bo wstyd mi się byłoby do nich przyznać, pisałem też własny FW i tam już było troszkę lepiej bo koncepcyjnie jest zbliżony do tych co istnieją ale też nie używam go już nigdzie, bo wiem, że FW rozwijany dłużej, przez większą społecznością do której należą lepsi programiści ode mnie zawsze będzie bardziej "przewidywalny" (dostatecznie funkcjonalny, przemyślany) od mojego.
Szymciosek
Tu masz rację, też zacząłem jakiś czas temu MVC i jest o wiele lepsza organizacja projektu. Wszystko zaczyna mieć sens wink.gif
miras
ok, dzięki za tą wskazówkę, dobrze, spróbuję oczywiście z MCV na początek wink.gif
Szymciosek
Na początek sugeruję poznaj chociaż jakiekolwiek podstawy/zasady OOP, jak obchodzić się z klasami, ze zmiennymi, stałymi itd itp... a później dopiero weź się za MVC.
markonix
No dokładnie, nie napisałem żeby najpierw brać się za MVC, najpierw podstawy operowania na obiektach.
MVC potem - najpierw w teorii (ale pewnie i tak jej nie zrozumiesz), potem w praktyce -> i tu będzie te "Ooo".
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.