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
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
<?php include('config/database.php'); include('class/User.php'); $nowy = new User(); $nowy->addNew('siema', 'na5tyk@o2.pl', 'xxx', 'xxx'); ?>
User.php
<?php class User { //Metoda wysylajaca emaila o utworzeniu konta i prosba o aktywacja konta function sendActivationEmail($email) { } //Metoda tworzaca nowego uzytkownika function addNew($login, $email, $password, $repeatPassword) { $register = $db->prepare('INSERT INTO `users` (login, email, password, activation) VALUES (:login, :email. :password, :activation)'); $register->bindValue(':login', $login); $register->bindValue(':email', $email); $register->bindValue(':password', $password); $register->execute(); sendActivationEmail($email); } //Metoda ustawiajaca bana dla uzytkownika function setBan($id, $ban) { $db->execute("UPDATE users SET ban = '" . $ban . "' WHERE id = '" . $id . "'"); } //Metoda ustawiajaca czy uzytkownik jest aktywowany function setActivation($id, $code) { $db->execute("UPDATE users SET activation = '" . $code . "' WHERE id = '" . $id . "'"); } //Metoda ustawiajaca wartosc w okreslonej kolumnie function setParams($id, $param, $value) { $db->execute("UPDATE users SET '" . $param . "' = '" . $value . "' WHERE id = '" . $id . "'"); } } ?>
database.php
<?php $host = 'localhost'; $username = 'root'; $password = ''; $database = 'cms'; try { $db = new PDO('mysql:host=' . $host . ';dbname=' . $database . '', $username, $password, // wyłączenie zbędnego emulate prepares PDO::ATTR_EMULATE_PREPARES => false, // ustalenie sposobu raportowania błędów PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )); } catch (PDOException $err) { } ?>
$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?