Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP OOP odwolanie do zmiennej
major697
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 7.08.2014

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


cześć zrobiłem wcześniej skrypt PHP logowania do ssytemu chcę go teraz przerobić na obiektowy i zrobiłem połączenie z bazą danych:
  1. <?php
  2. //DANE DO LOGOWANIA DO BD
  3. define("DB_HOST", 'localhost');
  4. define("DB_USER", 'michal');
  5. define("DB_PASSWORD", '');
  6. define("DB_DATABSE", 'kurs_php');
  7. ?>
  8.  
  9. <?php
  10. //PLIK LOGOWANIA DO BD I SPRAWDZANIA POLACZENIA Z BD
  11. class dbConnect {
  12. function __construct() {
  13. require_once 'config.php';
  14. $db_mysqli = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABSE);
  15. //$db_mysqli->query('SET NAMES utf8');
  16. if (!$db_mysqli) {
  17. die('Błąd połączenia (' . mysqli_connect_errno() . ') '
  18. . mysqli_connect_error());
  19. } else {
  20. echo '<font size="2px" color="red">Info: Połączono z bazą danych.</font><br />';
  21. }
  22. }
  23. public function CloseDb() {
  24. mysqli_close();
  25. }
  26. }
  27. ?>


To połączenie działa poprawnie, problem pojawia się gdy mam się odwołać do zmiennej $db_mysqli, która przechowuje "połączenie z bazą" w skrypcie logowania:

  1. <?php
  2. // KLASA Z FUNKCJAMI LOGOWANIE UŻYTKOWNIKA
  3. class Functions {
  4.  
  5. function __construct() {
  6.  
  7. // connecting to database
  8. $db_mysqli = new dbConnect();
  9.  
  10. }
  11. function __destruct() {
  12.  
  13. }
  14.  
  15. public function Login($login, $hasloSha1) {
  16. $result = $db_mysqli->prepare("SELECT haslo FROM uzytkownicy WHERE login=? AND haslo=?");
  17. $result->bind_param('ss', $login, $hasloSha1);
  18. $result->execute();
  19. $result->store_result();
  20. $row = mysqli_fetch_assoc($result);
  21. $kodAktywowany = $row['kod'];
  22.  
  23. //sprawdzenie czy taki uzytkownik istnieje
  24. if ($result->num_rows == 1) {
  25. $_SESSION['logowanie'] = $login;
  26. return TRUE;
  27. } else {
  28. return FALSE;
  29. }
  30. }
  31.  
  32. }
  33. ?>


Nie wiem jak przerobić skrypt abym mógł się dowołać do zmiennej $db_mysqli w zapytaniu:
  1. <?php $result = $db_mysqli->prepare("SELECT haslo FROM uzytkownicy WHERE login=? AND haslo=?"); ?>


Funkcja wywołująca klasę z instancją:

  1. <?php
  2. $func = new Functions();
  3.  
  4. if (isset($_POST['log_in'])) {
  5.  
  6. if ($_POST['log_in']) {
  7. $login = mysqli_real_escape_string($db_mysqli, $_POST['login']);
  8. $haslo = mysqli_real_escape_string($db_mysqli, $_POST['pass']);
  9. $hasloSha1 = sha1($haslo);
  10. $user = $func->Login($login, $hasloSha1);
  11. if ($user == TRUE) {
  12. header("Location: panel.php");
  13. } else {
  14. header("Location: index.php?error=4");
  15. die();
  16. }
  17.  
  18. }
  19.  
  20. }
  21. ?>


Zwraca kilka błędów:

(IMG:http://i.imgur.com/euep4qz.png)
Link do obrazka: KLIK

Ten post edytował major697 9.04.2016, 11:35:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mrc
post
Post #2





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

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


Pisząc kod obiektowy chodzi o przekazywanie sobie nawzajem obiektów, od których dana funkcja/klasa jest zależna. Singleton jest zły, ponieważ zamiast przekazywać go, tworzysz go. Tworzysz przez to zależności wewnątrz obiektu, co jest trudne do przetestowania automatycznego.

Na początku singleton jest fajny. Bardzo długo go kochałem. @piotras przeczytaj sobie książkę Uncle Boba - Czysty Kod. Tam jest przedstawiony świetny model programowania obiektowego, który mimo że nie mówi że singleton jest zły, to z góry wyklucza go jako dobre rozwiązanie.
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 14:11