За последние 24 часа нас посетили 18477 программистов и 1671 робот. Сейчас ищет 831 программист ...

Превозмогания тред

Тема в разделе "PHP для новичков", создана пользователем ubunta2, 27 июн 2017.

  1. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    class@anonymous просто потому что класс анонимный, был бы обычный - было бы имя класса
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    @ubunta2 Скоро исходники всей книги уже сюда зальешь
     
    Ganzal и ubunta2 нравится это.
  3. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    С другой стороны, теперь мы знаем, что книга не без кривых примеров. Будем готовы отвечать другим новичкам
     
    alexblack нравится это.
  5. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Тоже верно,там можно уже не отвечать, а сразу в темы ТС отправлять,как правило в его темах полностью разжеванные ответы даже с линками для особо ленивых на документацию)
     
    ubunta2 нравится это.
  6. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    а если серьезно?
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    @mkramer все же мне кажется, что проблема не в книге и её исходнике, а в том как конкретный читатель поджог себе пердак и семимильными шагами "изучает" программирование. Еще толком не понял как работать с переменными и базовых типов не освоил, а уже ООП, наследование. Мне очень интересно чем книга кончается. Благодаря ТСу мы все это узнаем. Он же каждый листинг выкладывает. Каждый, Карл!
     
    ubunta2 нравится это.
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Тебе же ответили. print_r вот в таком виде выводит объект анонимного класса. Все его поля со значениями выводятся, а вместо имени класса стоит, что класс анонимный. Что ещё надо? print_r, var_dump, var_export - функции, в основном, отладочного назначения
     
    ubunta2 нравится это.
  9. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    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:
    1. <?php
    2. class User {
    3.    
    4.    private $db;
    5.    
    6.      private static $user = null ;
    7.  
    8.    public function __constract(){
    9.      $this->db = new mysqli("localhost", "root", "", "mybase");
    10.      $this->db->query("GET NAMES 'utf8'");
    11.    
    12.      }
    13.    
    14.        public static function getObject(){
    15.          if (self::$user === null) self::$user === new User();
    16.          return self::$user;
    17.          
    18.        }
    19.        public function regUser($login, $password){
    20.          if ($login == "") return false;
    21.          if ($password == "") return false;
    22.          $password == md5($password);
    23.          return $this->db->query("INSERT INTO  'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')");
    24.  
    25.        }
    26.        
    27.        private function checkUser($login, $password){
    28.          $result_set = $this->db->query("SELECT  `password` FROM `users` WHERE `login` = '$login'");
    29.          $user = $result_set->fetch_assoc();
    30.          $result_set->close;
    31.          if (!$user) return false;
    32.          return $user["password"] === $password;
    33.  
    34.        }
    35.  
    36.        public function isAuth($login, $password){
    37.          session_start();
    38.          $login = S_SESSION["login"];
    39.          $password = S_SESSION["password"];
    40.          return $this->checkUser($login, $password);
    41.  
    42.  
    43.        }
    44.        public function login($login, $password){
    45.        $password = md5($password);
    46.        if ($this->checkUser($login, $password)){
    47.            session_start();
    48.            S_SESSION["login"] = $login;
    49.            S_SESSION["password"] = $password;
    50.            return true;
    51.        }
    52.        else return false;
    53.        }
    54.  
    55.        
    56.        
    57.          public function __destract(){
    58.            if ($this->db) $this->db->close;
    59.  
    60.          }
    61.  
    62.        
    63.  
    64.    }
    65.  
    66. ?>
    index.php

    PHP:
    1. <?php
    2. require_once "lib/user_class.php";
    3. $user = User::getObject();
    4. if (isset ($_POST["reg"])){
    5.    $login = $_POST["login"];
    6.    $password = $_POST["password"];
    7.    $reg_success = $user->regUser($login, $password);
    8. }
    9.  
    10. ?>
    11. <html>
    12. <head>
    13.    <title>Регистрация и авторизация пользователей</title>
    14. </head>
    15. <body>
    16.    <h1>Регистрация</h1>
    17.    <form name="red" action="index.php" method="form">
    18.    <table>
    19.    <tr>
    20.    <td>Логин</td>
    21.    <td>
    22.    <input type="text" name="login">
    23.    </td>
    24.    <tr>
    25.    <tr>
    26.    <td>Пароль</td>
    27.    <td>
    28.    <input type="password" name="password">
    29.    </td>
    30.    <tr>
    31.    <tr>
    32.    <td clospan="2">
    33.    <input type="submit" name="reg" value="Зарегистрироваться">
    34.    </td>
    35.    <tr>
    36.    </table>
    37.    </form>
    38.      <h1>Авторизация</h1>
    39.    <form name="auth" action="index.php" method="form">
    40.    <table>
    41.    <tr>
    42.    <td>Логин</td>
    43.    <td>
    44.    <input type="text" name="login">
    45.    </td>
    46.    <tr>
    47.    <tr>
    48.    <td>Пароль</td>
    49.    <td>
    50.    <input type="password" name="password">
    51.    </td>
    52.    <tr>
    53.    <tr>
    54.    <td clospan="2">
    55.    <input type="submit" name="auth" value="Войти">
    56.    </td>
    57.    <tr>
    58.    </table>
    59.    </form>
    60. </body>
    61. </html>
     
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    $_SESSION
     
    ubunta2 нравится это.
  11. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    получилось, вот только при регистрации логин почему-о не попадает в базу
    --- Добавлено ---
    спасибо
     
  12. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    [​IMG] MySQL вернула пустой результат (т.е. ноль строк). (Запрос занял 0.0010 сек.)
     
  13. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Это проверяйте в файле user_class.php
    У Вас написано __constract(), а должно быть __construct()
     
    #613 Maputo, 9 авг 2017
    Последнее редактирование: 9 авг 2017
  14. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    PHP:
    1. <?php
    2. class User {
    3.    
    4.     private $db;
    5.    
    6.         private static $user = null ;
    7.     public function __construct(){
    8.         $this->db = new mysqli("localhost", "root", "", "mybase");
    9.         $this->db->query("GET NAMES 'utf8'");
    10.    
    11.         }
    12.    
    13.             public static function getObject(){
    14.                 if (self::$user === null) self::$user === new User();
    15.                 return self::$user;
    16.                
    17.             }
    18.             public function regUser($login, $password){
    19.                 if ($login == "") return false;
    20.                 if ($password == "") return false;
    21.                 $password = md5($password);
    22.                 return $this->db->query("INSERT INTO  'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')");
    23.             }
    24.            
    25.             private function checkUser($login, $password){
    26.                 $result_set = $this->db->query("SELECT  `password` FROM `users` WHERE `login` = '$login'");
    27.                 $user = $result_set->fetch_assoc();
    28.                 $result_set->close;
    29.                 if (!$user) return false;
    30.                 return $user["password"] === $password;
    31.             }
    32.             public function isAuth($login, $password){
    33.                 session_start();
    34.                 $login = $_SESSION["login"];
    35.                 $password = $_SESSION["password"];
    36.                 return $this->checkUser($login, $password);
    37.             }
    38.             public function login($login, $password){
    39.             $password = md5($password);
    40.             if ($this->checkUser($login, $password)){
    41.                     session_start();
    42.                     $_SESSION["login"] = $login;
    43.                     $_SESSION["password"] = $password;
    44.                     return true;
    45.             }
    46.             else return false;
    47.             }
    48.            
    49.            
    50.                 public function __destruct(){
    51.                     if ($this->db) $this->db->close;
    52.                 }
    53.            
    54.     }
    55. ?>
    не помогло
    --- Добавлено ---
    PHP:
    1. <?php
    2. require_once "lib/user_class.php";
    3. $user = User::getObject();
    4. if (isset ($_POST["reg"])){
    5.     $login = $_POST["login"];
    6.     $password = $_POST["password"];
    7.     $reg_success = $user->regUser($login, $password);
    8. }
    9.  
    10. ?>
    11. <html>
    12. <head>
    13.     <title>Регистрация и авторизация пользователей</title>
    14. </head>
    15. <body>
    16.     <h1>Регистрация</h1>
    17.     <form name="red" action="index.php" method="post">
    18.     <table>
    19.     <tr>
    20.     <td>Логин</td>
    21.     <td>
    22.     <input type="text" name="login">
    23.     </td>
    24.     <tr>
    25.     <tr>
    26.     <td>Пароль</td>
    27.     <td>
    28.     <input type="password" name="password">
    29.     </td>
    30.     <tr>
    31.     <tr>
    32.     <td clospan="2">
    33.     <input type="submit" name="reg" value="Зарегистрироваться">
    34.     </td>
    35.     <tr>
    36.     </table>
    37.     </form>
    38.         <h1>Авторизация</h1>
    39.     <form name="auth" action="index.php" method="post">
    40.     <table>
    41.     <tr>
    42.     <td>Логин</td>
    43.     <td>
    44.     <input type="text" name="login">
    45.     </td>
    46.     <tr>
    47.     <tr>
    48.     <td>Пароль</td>
    49.     <td>
    50.     <input type="password" name="password">
    51.     </td>
    52.     <tr>
    53.     <tr>
    54.     <td clospan="2">
    55.     <input type="submit" name="auth" value="Войти">
    56.     </td>
    57.     <tr>
    58.     </table>
    59.     </form>
    60. </body>
    61. </html>
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а что ты сделал? что не помогло?
     
  16. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    PHP:
    1. <?php
    2. require_once "lib/user_class.php";
    3. $user = User::getObject();
    4. if (isset ($_POST["reg"])){
    5.     $login = $_POST["login"];
    6.     $password = $_POST["password"];
    7.     $reg_success = $user->regUser($login, $password);
    8. }
    9.  
    10. ?>
    11. <html>
    12. <head>
    13.     <title>Регистрация и авторизация пользователей</title>
    14. </head>
    15. <body>
    16.     <h1>Регистрация</h1>
    17.     <form name="red" action="index.php" method="post">
    18.     <table>
    19.     <tr>
    20.     <td>Логин</td>
    21.     <td>
    22.     <input type="text" name="login">
    23.     </td>
    24.     <tr>
    25.     <tr>
    26.     <td>Пароль</td>
    27.     <td>
    28.     <input type="password" name="password">
    29.     </td>
    30.     <tr>
    31.     <tr>
    32.     <td clospan="2">
    33.     <input type="submit" name="reg" value="Зарегистрироваться">
    34.     </td>
    35.     <tr>
    36.     </table>
    37.     </form>
    38.         <h1>Авторизация</h1>
    39.     <form name="auth" action="index.php" method="post">
    40.     <table>
    41.     <tr>
    42.     <td>Логин</td>
    43.     <td>
    44.     <input type="text" name="login">
    45.     </td>
    46.     <tr>
    47.     <tr>
    48.     <td>Пароль</td>
    49.     <td>
    50.     <input type="password" name="password">
    51.     </td>
    52.     <tr>
    53.     <tr>
    54.     <td clospan="2">
    55.     <input type="submit" name="auth" value="Войти">
    56.     </td>
    57.     <tr>
    58.     </table>
    59.     </form>
    60. </body>
    61. </html>
    index.php
    PHP:
    1. <?php
    2. class User {
    3.    
    4.     private $db;
    5.    
    6.         private static $user = null ;
    7.     public function __construct(){
    8.         $this->db = new mysqli("localhost", "root", "", "mybase");
    9.         $this->db->query("GET NAMES 'utf8'");
    10.    
    11.         }
    12.    
    13.             public static function getObject(){
    14.                 if (self::$user === null) self::$user === new User();
    15.                 return self::$user;
    16.                
    17.             }
    18.             public function regUser($login, $password){
    19.                 if ($login == "") return false;
    20.                 if ($password == "") return false;
    21.                 $password = md5($password);
    22.                 return $this->db->query("INSERT INTO  'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')");
    23.             }
    24.            
    25.             private function checkUser($login, $password){
    26.                 $result_set = $this->db->query("SELECT  `password` FROM `users` WHERE `login` = '$login'");
    27.                 $user = $result_set->fetch_assoc();
    28.                 $result_set->close;
    29.                 if (!$user) return false;
    30.                 return $user["password"] === $password;
    31.             }
    32.             public function isAuth($login, $password){
    33.                 session_start();
    34.                 $login = $_SESSION["login"];
    35.                 $password = $_SESSION["password"];
    36.                 return $this->checkUser($login, $password);
    37.             }
    38.             public function login($login, $password){
    39.             $password = md5($password);
    40.             if ($this->checkUser($login, $password)){
    41.                     session_start();
    42.                     $_SESSION["login"] = $login;
    43.                     $_SESSION["password"] = $password;
    44.                     return true;
    45.             }
    46.             else return false;
    47.             }
    48.            
    49.            
    50.                 public function __destruct(){
    51.                     if ($this->db) $this->db->close;
    52.                 }
    53.            
    54.     }
    55. ?>
    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
    --- Добавлено ---
    проверил через нетбинкс.
    прочитал еще раз код.
    Исправил что на форуме сказали.
    --- Добавлено ---
    страница загружается нормально, ошибка идет при регистрации
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @ubunta2, проверяйте метод getObject в классе User. У Вас там оригинальный способ создания экземпляра класса.
    Подобные ошибки Вы должны уметь решать с помощью логов ошибок самостоятельно, раз уже работаете с классами.
    --- Добавлено ---
    Тут надо было сделать еще пару вещей:
    - перевести на русский то что в ошибке
    - попытаться найти причину
    - попытаться исправить ошибку
     
  18. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    логи ошибки не знаю.
    переводил .Выше перевод.
     
  19. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @ubunta2, без понимания того какие есть логи и где их искать процесс программирования простой задачи может растянуться на недели.
    Нашли ошибку?
    Она вот тут:
    PHP:
    1. if (self::$user === null) self::$user === new User();
     
  20. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    PHP:
    1. <?php
    2. class User {
    3.    
    4.     private $db;
    5.    
    6.         private static $user = null ;
    7.     public function __construct(){
    8.         $this->db = new mysqli("localhost", "root", "", "mybase");
    9.         $this->db->query("GET NAMES 'utf8'");
    10.    
    11.         }
    12.    
    13.             public static function getObject(){
    14.                 if (self::$user === null) self::$user = new User();
    15.                 return self::$user;
    16.                
    17.             }
    18.             public function regUser($login, $password){
    19.                 if ($login == "") return false;
    20.                 if ($password == "") return false;
    21.                 $password = md5($password);
    22.                 return $this->db->query("INSERT INTO  'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')");
    23.             }
    24.            
    25.             private function checkUser($login, $password){
    26.                 $result_set = $this->db->query("SELECT  `password` FROM `users` WHERE `login` = '$login'");
    27.                 $user = $result_set->fetch_assoc();
    28.                 $result_set->close;
    29.                 if (!$user) return false;
    30.                 return $user["password"] === $password;
    31.             }
    32.             public function isAuth($login, $password){
    33.                 session_start();
    34.                 $login = $_SESSION["login"];
    35.                 $password = $_SESSION["password"];
    36.                 return $this->checkUser($login, $password);
    37.             }
    38.             public function login($login, $password){
    39.             $password = md5($password);
    40.             if ($this->checkUser($login, $password)){
    41.                     session_start();
    42.                     $_SESSION["login"] = $login;
    43.                     $_SESSION["password"] = $password;
    44.                     return true;
    45.             }
    46.             else return false;
    47.             }
    48.            
    49.            
    50.                 public function __destruct(){
    51.                     if ($this->db) $this->db->close;
    52.                 }
    53.            
    54.     }
    55. ?>
    а как эти логи понять?
    --- Добавлено ---
    ошибки нет при регистрации, но в базу не заносится
     
  21. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @ubunta2, в документации к своему серверу надо смотреть где у него какие логи. В настройках апач все должно быть указано.

    В данном случае Вам стоит смотреть логи БД. Потому как ошибка может быть там с форматом даты. Зависит от того какой тип данных у Вас в поле regdate.
     
  22. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    int(11)
    --- Добавлено ---
    про логи не понял
    --- Добавлено ---
    PHP:
    1. <?php
    2. class User {
    3.    
    4.     private $db;
    5.    
    6.         private static $user = null ;
    7.     public function __construct(){
    8.         $this->db = new mysqli("localhost", "root", "", "mybase");
    9.         $this->db->query("GET NAMES 'utf8'");
    10.    
    11.         }
    12.    
    13.             public static function getObject(){
    14.                 if (self::$user === null) self::$user = new User();
    15.                 return self::$user;
    16.                
    17.             }
    18.             public function regUser($login, $password){
    19.                 if ($login == "") return false;
    20.                 if ($password == "") return false;
    21.                 $password = md5($password);
    22.                 return $this->db->query("INSERT INTO  'users' (`login`, `password`, `regdate`) VALUES ('$login', '$password', '".time()."')");
    23.             }
    24.            
    25.             private function checkUser($login, $password){
    26.                 $result_set = $this->db->query("SELECT  `password` FROM `users` WHERE `login` = '$login'");
    27.                 $user = $result_set->fetch_assoc();
    28.                 $result_set->close;
    29.                 if (!$user) return false;
    30.                 return $user["password"] === $password;
    31.             }
    32.             public function isAuth($login, $password){
    33.                 session_start();
    34.                 $login = $_SESSION["login"];
    35.                 $password = $_SESSION["password"];
    36.                 return $this->checkUser($login, $password);
    37.             }
    38.             public function login($login, $password){
    39.             $password = md5($password);
    40.             if ($this->checkUser($login, $password)){
    41.                     session_start();
    42.                     $_SESSION["login"] = $login;
    43.                     $_SESSION["password"] = $password;
    44.                     return true;
    45.             }
    46.             else return false;
    47.             }
    48.            
    49.            
    50.                 public function __destruct(){
    51.                     if ($this->db) $this->db->close;
    52.                 }
    53.            
    54.     }
    55. ?>
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    тебе еще рано ооп, чувак...
     
    ubunta2 нравится это.
  24. ubunta2

    ubunta2 Зэк
    [ БАН ]

    С нами с:
    27 июн 2017
    Сообщения:
    947
    Симпатии:
    28
    может и рано, но я хочу научиться и хочу понять решение проблемы
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты сначала другие моменты научись а потом за ооп берись
     
    ubunta2 нравится это.