Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wykorzystanie połączenia z bazą danych w klasie
Na 5tyk
post 16.06.2017, 18:58:07
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 9.01.2013

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


Cześć.

Jako, że zacząłem uczyć się OOP i postanowiłem sobie napisać CMS (tylko w celu nauki) z wykorzystaniem OOP PHP.

Jednak natrafiłem na problem.

Błędy:
Kod
Notice: Undefined variable: db in D:\xampp\htdocs\CMS\class\User.php on line 13

Fatal error: Uncaught Error: Call to a member function prepare() on null in D:\xampp\htdocs\CMS\class\User.php:13 Stack trace: #0 D:\xampp\htdocs\CMS\index.php(9): User->addNew('siema', 'na5tyk@o2.pl', 'xxx', 'xxx') #1 {main} thrown in D:\xampp\htdocs\CMS\class\User.php on line 13



Struktura projektu (* - folder):
* CMS
-- index.php
** class
--- User.php
** config
--- database.php

index.php
  1. <?php
  2.  
  3. include('config/database.php');
  4. include('class/User.php');
  5.  
  6. $nowy = new User();
  7.  
  8. $nowy->addNew('siema', 'na5tyk@o2.pl', 'xxx', 'xxx');
  9.  
  10. ?>


User.php
  1. <?php
  2.  
  3. class User {
  4.  
  5. //Metoda wysylajaca emaila o utworzeniu konta i prosba o aktywacja konta
  6. function sendActivationEmail($email) {
  7.  
  8. mail($email, 'Aktywacja konta', 'Aby aktywować konto kliknij w link: xxx');
  9. }
  10.  
  11. //Metoda tworzaca nowego uzytkownika
  12. function addNew($login, $email, $password, $repeatPassword) {
  13. $register = $db->prepare('INSERT INTO `users` (login, email, password, activation) VALUES (:login, :email. :password, :activation)');
  14.  
  15. $register->bindValue(':login', $login);
  16. $register->bindValue(':email', $email);
  17. $register->bindValue(':password', $password);
  18. $register->bindValue(':activation', rand(1000, 9999));
  19.  
  20. $register->execute();
  21.  
  22. sendActivationEmail($email);
  23. }
  24.  
  25. //Metoda ustawiajaca bana dla uzytkownika
  26. function setBan($id, $ban) {
  27. $db->execute("UPDATE users SET ban = '" . $ban . "' WHERE id = '" . $id . "'");
  28. }
  29.  
  30. //Metoda ustawiajaca czy uzytkownik jest aktywowany
  31. function setActivation($id, $code) {
  32. $db->execute("UPDATE users SET activation = '" . $code . "' WHERE id = '" . $id . "'");
  33. }
  34.  
  35. //Metoda ustawiajaca wartosc w okreslonej kolumnie
  36. function setParams($id, $param, $value) {
  37. $db->execute("UPDATE users SET '" . $param . "' = '" . $value . "' WHERE id = '" . $id . "'");
  38. }
  39. }
  40.  
  41. ?>


database.php
  1. <?php
  2.  
  3. $host = 'localhost';
  4. $username = 'root';
  5. $password = '';
  6. $database = 'cms';
  7.  
  8. try {
  9.  
  10. $db = new PDO('mysql:host=' . $host . ';dbname=' . $database . '', $username, $password,
  11. // wyłączenie zbędnego emulate prepares
  12. PDO::ATTR_EMULATE_PREPARES => false,
  13. // ustalenie sposobu raportowania błędów
  14. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
  15. ));
  16.  
  17. } catch (PDOException $err) {
  18.  
  19. print "Error: " . $err->getMessage() . "<br/>";
  20. die();
  21. }
  22.  
  23. ?>


$repeatPassword jest dodane przyszłościowo gdy będę sprawdzał poprawność danych.

I teraz pytanie. Czy przesłanie zmiennej $db w parametrze metody będzie dobre czy jest lepszy sposób?
Go to the top of the page
+Quote Post

Posty w temacie


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: 12.07.2025 - 15:13