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
<?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) {
mail($email, 'Aktywacja konta', 'Aby aktywować konto kliknij w link: xxx'); }
//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->bindValue(':activation', rand(1000
, 9999
));
$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) {
print "Error: " . $err->getMessage() . "<br/>"; }
?>
$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?