Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyświetlenie wyniku z klasy z innego pliku
szczypior
post 9.07.2016, 20:15:27
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Witajcie smile.gif

Jestem na początku, już wiem że bolesnej drogi, z obiektowym php. Nie mogę sobie poradzić z wyświetlaniem wyniku z klasy, która jest includowana do pliku wywołującym ją. Tzn, kod gdy jest w całości w jednym pliku działa
  1. class Bazowa
  2.  
  3. {
  4.  
  5. private $napis;
  6.  
  7. function __construct() {
  8.  
  9. $this->napis = "Napis dodany w klasie bazowej";
  10.  
  11. }
  12.  
  13. function podajNapis() {
  14.  
  15. return $this->napis;
  16.  
  17. }
  18.  
  19. }
  20.  
  21.  
  22.  
  23. class Pochodna extends Bazowa
  24.  
  25. {
  26.  
  27. function podajNapis() {
  28.  
  29. $str = parent::podajNapis();
  30.  
  31. print("Dostęp z klasy Pochodna: '$str'");
  32.  
  33. }
  34.  
  35. }
  36.  
  37. $obiekt = new Pochodna();
  38.  
  39. $obiekt->podajNapis();

ale gdy podzielę kod następująco:
  1. class Bazowa
  2.  
  3. {
  4.  
  5. private $napis;
  6.  
  7. function __construct() {
  8.  
  9. $this->napis = "Napis dodany w klasie bazowej";
  10.  
  11. }
  12.  
  13. function podajNapis() {
  14.  
  15. return $this->napis;
  16.  
  17. }
  18.  
  19. }
  20.  
  21.  
  22.  
  23. class Pochodna extends Bazowa
  24.  
  25. {
  26.  
  27. function podajNapis() {
  28.  
  29. $str = parent::podajNapis();
  30.  
  31. print("Dostęp z klasy Pochodna: '$str'");
  32.  
  33. }
  34.  
  35. }

  1. include 'sciezka/do/powyzszego/pliku.php';
  2.  
  3. $obiekt = new Pochodna();
  4.  
  5. $obiekt->podajNapis();


niestety nie wyświetla się wynik. Dlaczego tak się dzieje?

Z góry dzięki za pomoc smile.gif


--------------------
Pytania i odpowiedzi na każdy temat - ZapytajSie.pl
Darmowe aliasy i liczniki odwiedzin - RFV.pl
Go to the top of the page
+Quote Post
markuz
post 9.07.2016, 20:45:48
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Włącz raportowanie błędów tj. dodaj error_reporting(E_ALL); w 1 linijce i przeczytaj błąd.


--------------------
Go to the top of the page
+Quote Post
szczypior
post 9.07.2016, 21:28:57
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Dopisałem na początku
  1. ini_set('display_errors', 1);
  2. ini_set('display_startup_errors', 1);

i nic nie pokazuje. Ani błędu, ani wyniku.


--------------------
Pytania i odpowiedzi na każdy temat - ZapytajSie.pl
Darmowe aliasy i liczniki odwiedzin - RFV.pl
Go to the top of the page
+Quote Post
markuz
post 9.07.2016, 21:39:01
Post #4





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


To zrób var_export($obiekt) oraz var_export($obiekt->podajNapis()); i zrób też echo 5; na początku żeby sprawdzić czy w ogóle dobry plik odpalasz.


--------------------
Go to the top of the page
+Quote Post
szczypior
post 9.07.2016, 21:48:29
Post #5





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Pliki na pewno odpalam ok, bo test z echo na początku zadziałał.

var_exporty zupełnie nic nie pokazują sad.gif


--------------------
Pytania i odpowiedzi na każdy temat - ZapytajSie.pl
Darmowe aliasy i liczniki odwiedzin - RFV.pl
Go to the top of the page
+Quote Post
markuz
post 9.07.2016, 21:56:58
Post #6





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


zrób echo po każdej instrukcji, wklej zawartość całego pliku i wynik


--------------------
Go to the top of the page
+Quote Post
szczypior
post 9.07.2016, 23:23:30
Post #7





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 5.02.2007

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


Dzięki za wskazówki, udało mi się ten problem pokonać smile.gif Teraz natomiast mam zagwostkę, bo chyba moje połączenie z bazą danych nie jest widoczne w klasie, która tego połączenia potrzebuje.

index.php
  1. ini_set('display_errors', 1);
  2. ini_set('display_startup_errors', 1);
  3.  
  4. include 'class/login.class.php';
  5.  
  6. $core = new Core;
  7. $pdo = $core -> DBconnection();
  8.  
  9. $objLogin = new Login();
  10.  
  11. if ($objLogin->userLogin("login_użytkownika", "hasło_użytkownika") == true) {
  12. echo "Użytkownik został zalogowany do system!";
  13. } else {
  14. echo "Użytkownik nie został zalogowany. Błędne hasło lub login użytkownika!";
  15. }


login.class.php
  1. ini_set('display_errors', 1);
  2. ini_set('display_startup_errors', 1);
  3.  
  4. include 'class/core.class.php';
  5.  
  6. class Login extends Core {
  7.  
  8. // Przechowuje informację, czy użytkownik jest zalogowany (true), czy nie (false)
  9. protected $logged_in;
  10. // Identyfikator zalogowanego użytkownika
  11. protected $user_id;
  12. // Login użytkownika
  13. protected $login;
  14. // Przechowuje hasło użytkownika
  15. protected $md5_password;
  16.  
  17.  
  18. public function __construct() {
  19. parent::__construct();
  20. }
  21.  
  22. public function userLogin($str_username, $str_password) {
  23.  
  24. $this->login = addslashes($str_username);
  25. $this->md5_password = md5($str_password);
  26. $_SESSION['username'] = $str_username;
  27. $_SESSION['password'] = $this->md5_password;
  28.  
  29.  
  30. $statement = $this->db->prepare('SELECT id, 1name, level FROM users WHERE login = :login AND pass = :pass');
  31.  
  32. $statement->bindValue(':login', $this->login, PDO::PARAM_INT);
  33. $statement->bindValue(':pass', $this->pass, PDO::PARAM_INT);
  34. $statement->execute();
  35.  
  36. print_r ($statement);
  37.  
  38. foreach($statement as $row)
  39. {
  40. echo($row['1name']." ".$row['level']."<br />");
  41. }
  42. $statement->closeCursor();
  43. }
  44. }


core.class.php
  1. ini_set('display_errors', 1);
  2. ini_set('display_startup_errors', 1);
  3. class Core
  4. {
  5.  
  6. public static $config;
  7. private $configData = 'configs/config.ini';
  8.  
  9. public function __construct()
  10. {
  11. if (file_exists($this->configData)) {
  12. $file = parse_ini_file($this->configData, true);
  13. self::$config = $file;
  14. } else {
  15. return false;
  16. }
  17. header('Content-Type: text/html; charset=' . self::$config['system']['charset']);
  18. error_reporting(self::$config['system']['errorReporting']);
  19. if (phpversion() < self::$config['system']['PHPVersion']) {
  20. die('Your server must be in' . self::$config['system']['PHPVersion'] . ' PHP version or higher.');
  21. }
  22. return null;
  23. }
  24.  
  25. public function DBconnection()
  26. {
  27.  
  28. try {
  29. $db = new PDO(self::$config['db']['driver'] . 'dbname=' . self::$config['db']['db_name'] . ';host=' . self::$config['db']['host'], self::$config['db']['user'], self::$config['db']['password']);
  30. }
  31. catch (PDOException $e) {
  32.  
  33. echo $e->getMessage();
  34. }
  35. }
  36.  
  37. public function closeConnection() {
  38.  
  39. $this->db = null;
  40. }
  41. }
  42.  


Mam wrażenie, że łączę się z bazą tak, że w momencie gdy próbuję wykonać zapytanie SQL, to nie mam tam połączenia. Nie bardzo wiem jak to rozwiązać. Gdzie najlepiej wywołać połączenie by było dostępne?


--------------------
Pytania i odpowiedzi na każdy temat - ZapytajSie.pl
Darmowe aliasy i liczniki odwiedzin - RFV.pl
Go to the top of the page
+Quote Post
markuz
post 10.07.2016, 09:25:43
Post #8





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Poczytaj o wzorcu MVC na początek. Twój kod nie jest obiektowy mimo tego, że używasz klas.
Co do połączenia z bazą danych, tworzysz je w metodzie DBconnection i ono sobie tam jest - nic z nim dalej nie robisz, nie zwracasz itp. więc nie możesz go używać w innym miejscu.


--------------------
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: 25.04.2024 - 17:34