С другой стороны, теперь мы знаем, что книга не без кривых примеров. Будем готовы отвечать другим новичкам
Тоже верно,там можно уже не отвечать, а сразу в темы ТС отправлять,как правило в его темах полностью разжеванные ответы даже с линками для особо ленивых на документацию)
@mkramer все же мне кажется, что проблема не в книге и её исходнике, а в том как конкретный читатель поджог себе пердак и семимильными шагами "изучает" программирование. Еще толком не понял как работать с переменными и базовых типов не освоил, а уже ООП, наследование. Мне очень интересно чем книга кончается. Благодаря ТСу мы все это узнаем. Он же каждый листинг выкладывает. Каждый, Карл!
Тебе же ответили. print_r вот в таком виде выводит объект анонимного класса. Все его поля со значениями выводятся, а вместо имени класса стоит, что класс анонимный. Что ещё надо? print_r, var_dump, var_export - функции, в основном, отладочного назначения
Fatal error: Cannot use temporary expression in write context in E:\OpenServer\domains\test\2\lib\user_class.php on line 48 user_class.php PHP: <?php class User { private $db; private static $user = null ; public function __constract(){ $this->db = new mysqli("localhost", "root", "", "mybase"); $this->db->query("GET NAMES 'utf8'"); } public static function getObject(){ if (self::$user === null) self::$user === new User(); return self::$user; } public function regUser($login, $password){ if ($login == "") return false; if ($password == "") return false; $password == md5($password); return $this->db->query("INSERT INTO 'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')"); } private function checkUser($login, $password){ $result_set = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login'"); $user = $result_set->fetch_assoc(); $result_set->close; if (!$user) return false; return $user["password"] === $password; } public function isAuth($login, $password){ session_start(); $login = S_SESSION["login"]; $password = S_SESSION["password"]; return $this->checkUser($login, $password); } public function login($login, $password){ $password = md5($password); if ($this->checkUser($login, $password)){ session_start(); S_SESSION["login"] = $login; S_SESSION["password"] = $password; return true; } else return false; } public function __destract(){ if ($this->db) $this->db->close; } } ?> index.php PHP: <?php require_once "lib/user_class.php"; $user = User::getObject(); if (isset ($_POST["reg"])){ $login = $_POST["login"]; $password = $_POST["password"]; $reg_success = $user->regUser($login, $password); } ?> <html> <head> <title>Регистрация и авторизация пользователей</title> </head> <body> <h1>Регистрация</h1> <form name="red" action="index.php" method="form"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="form"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form> </body> </html>
PHP: <?php class User { private $db; private static $user = null ; public function __construct(){ $this->db = new mysqli("localhost", "root", "", "mybase"); $this->db->query("GET NAMES 'utf8'"); } public static function getObject(){ if (self::$user === null) self::$user === new User(); return self::$user; } public function regUser($login, $password){ if ($login == "") return false; if ($password == "") return false; $password = md5($password); return $this->db->query("INSERT INTO 'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')"); } private function checkUser($login, $password){ $result_set = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login'"); $user = $result_set->fetch_assoc(); $result_set->close; if (!$user) return false; return $user["password"] === $password; } public function isAuth($login, $password){ session_start(); $login = $_SESSION["login"]; $password = $_SESSION["password"]; return $this->checkUser($login, $password); } public function login($login, $password){ $password = md5($password); if ($this->checkUser($login, $password)){ session_start(); $_SESSION["login"] = $login; $_SESSION["password"] = $password; return true; } else return false; } public function __destruct(){ if ($this->db) $this->db->close; } } ?> не помогло --- Добавлено --- PHP: <?php require_once "lib/user_class.php"; $user = User::getObject(); if (isset ($_POST["reg"])){ $login = $_POST["login"]; $password = $_POST["password"]; $reg_success = $user->regUser($login, $password); } ?> <html> <head> <title>Регистрация и авторизация пользователей</title> </head> <body> <h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form> </body> </html>
PHP: <?php require_once "lib/user_class.php"; $user = User::getObject(); if (isset ($_POST["reg"])){ $login = $_POST["login"]; $password = $_POST["password"]; $reg_success = $user->regUser($login, $password); } ?> <html> <head> <title>Регистрация и авторизация пользователей</title> </head> <body> <h1>Регистрация</h1> <form name="red" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="reg" value="Зарегистрироваться"> </td> <tr> </table> </form> <h1>Авторизация</h1> <form name="auth" action="index.php" method="post"> <table> <tr> <td>Логин</td> <td> <input type="text" name="login"> </td> <tr> <tr> <td>Пароль</td> <td> <input type="password" name="password"> </td> <tr> <tr> <td clospan="2"> <input type="submit" name="auth" value="Войти"> </td> <tr> </table> </form> </body> </html> index.php PHP: <?php class User { private $db; private static $user = null ; public function __construct(){ $this->db = new mysqli("localhost", "root", "", "mybase"); $this->db->query("GET NAMES 'utf8'"); } public static function getObject(){ if (self::$user === null) self::$user === new User(); return self::$user; } public function regUser($login, $password){ if ($login == "") return false; if ($password == "") return false; $password = md5($password); return $this->db->query("INSERT INTO 'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')"); } private function checkUser($login, $password){ $result_set = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login'"); $user = $result_set->fetch_assoc(); $result_set->close; if (!$user) return false; return $user["password"] === $password; } public function isAuth($login, $password){ session_start(); $login = $_SESSION["login"]; $password = $_SESSION["password"]; return $this->checkUser($login, $password); } public function login($login, $password){ $password = md5($password); if ($this->checkUser($login, $password)){ session_start(); $_SESSION["login"] = $login; $_SESSION["password"] = $password; return true; } else return false; } public function __destruct(){ if ($this->db) $this->db->close; } } ?> user_class.php Fatal error: Uncaught Error: Call to a member function regUser() on null in E:\OpenServer\domains\test\2\index.php:7 Stack trace: #0 {main} thrown in E:\OpenServer\domains\test\2\index.php on line 7 --- Добавлено --- Неустранимая ошибка: Непринятая ошибка: вызов функции-члена regUser () в null в E: \ OpenServer \ domains \ test \ 2 \ index.php: 7 Трассировка стека: # 0 {main} выбрано в E: \ OpenServer \ domains \ Test \ 2 \ index.php в строке 7 --- Добавлено --- проверил через нетбинкс. прочитал еще раз код. Исправил что на форуме сказали. --- Добавлено --- страница загружается нормально, ошибка идет при регистрации
@ubunta2, проверяйте метод getObject в классе User. У Вас там оригинальный способ создания экземпляра класса. Подобные ошибки Вы должны уметь решать с помощью логов ошибок самостоятельно, раз уже работаете с классами. --- Добавлено --- Тут надо было сделать еще пару вещей: - перевести на русский то что в ошибке - попытаться найти причину - попытаться исправить ошибку
@ubunta2, без понимания того какие есть логи и где их искать процесс программирования простой задачи может растянуться на недели. Нашли ошибку? Она вот тут: PHP: if (self::$user === null) self::$user === new User();
PHP: <?php class User { private $db; private static $user = null ; public function __construct(){ $this->db = new mysqli("localhost", "root", "", "mybase"); $this->db->query("GET NAMES 'utf8'"); } public static function getObject(){ if (self::$user === null) self::$user = new User(); return self::$user; } public function regUser($login, $password){ if ($login == "") return false; if ($password == "") return false; $password = md5($password); return $this->db->query("INSERT INTO 'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')"); } private function checkUser($login, $password){ $result_set = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login'"); $user = $result_set->fetch_assoc(); $result_set->close; if (!$user) return false; return $user["password"] === $password; } public function isAuth($login, $password){ session_start(); $login = $_SESSION["login"]; $password = $_SESSION["password"]; return $this->checkUser($login, $password); } public function login($login, $password){ $password = md5($password); if ($this->checkUser($login, $password)){ session_start(); $_SESSION["login"] = $login; $_SESSION["password"] = $password; return true; } else return false; } public function __destruct(){ if ($this->db) $this->db->close; } } ?> а как эти логи понять? --- Добавлено --- ошибки нет при регистрации, но в базу не заносится
@ubunta2, в документации к своему серверу надо смотреть где у него какие логи. В настройках апач все должно быть указано. В данном случае Вам стоит смотреть логи БД. Потому как ошибка может быть там с форматом даты. Зависит от того какой тип данных у Вас в поле regdate.
int(11) --- Добавлено --- про логи не понял --- Добавлено --- PHP: <?php class User { private $db; private static $user = null ; public function __construct(){ $this->db = new mysqli("localhost", "root", "", "mybase"); $this->db->query("GET NAMES 'utf8'"); } public static function getObject(){ if (self::$user === null) self::$user = new User(); return self::$user; } public function regUser($login, $password){ if ($login == "") return false; if ($password == "") return false; $password = md5($password); return $this->db->query("INSERT INTO 'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')"); } private function checkUser($login, $password){ $result_set = $this->db->query("SELECT `password` FROM `users` WHERE `login` = '$login'"); $user = $result_set->fetch_assoc(); $result_set->close; if (!$user) return false; return $user["password"] === $password; } public function isAuth($login, $password){ session_start(); $login = $_SESSION["login"]; $password = $_SESSION["password"]; return $this->checkUser($login, $password); } public function login($login, $password){ $password = md5($password); if ($this->checkUser($login, $password)){ session_start(); $_SESSION["login"] = $login; $_SESSION["password"] = $password; return true; } else return false; } public function __destruct(){ if ($this->db) $this->db->close; } } ?>