За последние 24 часа нас посетил 22821 программист и 1242 робота. Сейчас ищут 696 программистов ...

Классы ООП

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

  1. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Начал изучение классов и ООП и возникает вопрос, если я при авторизации создаю класс с информацией о пользователе на странице user_auth.php, как мне получить эту же переменную с классом на странице index.php ?

    Способ пока думаю - это сериализация и помещение в куку
     
  2. Алекс8

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

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    что бы не было таких вопросов лучше делать автозагрузку классов и одну точку входа..
    что бы весь скрипт работал через index.php - если с этим разберетесь - тогда поймете как данные пересылать от объекта к объекту)
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @ZlobnyKolob, ну неплохо бы сначала понять сам php :) Что авторизация и потом получение страницы - два невзаимосвязанных вызова. Чтоб между разными вызовами передавать данные был придуман механизм сессии. Обычно помещают ID пользователя в сессию, а потом выносят в отдельный класс код, который проверяет наличие этого ID в сессии, и в случае наличия создаёт класс пользователя для этой записи и отдаёт куда надо. В куке хранить сериализованный класс пользователя не стоит, там же хеш пароля, а кука открытая. Лучше в сессиях, которые на сервере. А в куках просто id сессии
     
    Fell-x27 нравится это.
  4. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Как я понимаю, что на каждой странице вверху должен быть код, который при наличии ID в сессии должен создавать класс с пользователем,
    Вопрос: при переходе с 1 страницы на другую не будет осуществляться так называемое клонирование классов ?
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    неверно.
     
  6. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    А если немного по точнее ?)))
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    ну как скажешь...
    https://php.ru/forum/threads/66872/
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ещё раз - каждый переход с одной страницы на другую === новый старт скрипта, предыдущий уже отработал и вызвал из памяти, никаких созданных им экземпляров класса там не осталось. Отложите-ка ООП до поры до времени и поймите вот это: http://phpfaq.ru/newbie/na_tanke
     
  9. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Спасибо большое, вот нашёл то, что мне нужно было
    "РНР остался на сервере, ждать новых запросов с данными для обработки. PHP, но не скрипт! Скрипт, который выполнялся, отдавая пользователю страницу, завершил работу. Все данные, которые были в нем - пропали. Именно поэтому, если какая-то переменная нужна при последующих вызовах скрипта, ее надо этому скрипту передать снова."
     
  10. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Ещё один вопрос,
    Возникла ситуация в которой мне необходимо получить класс $mysqli в своём классе, который должен осуществить запрос в базе данных, как мне правильно подключить класс $mysqli ?
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
  12. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Получается, что я должен передать $mysqli в класс, при его создании :?
    $User = new User($mysqli);
    ????
     
  13. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    // определение предопределённых значений
    PHP:
    1.     function __construct($mysqli) {
    2.         $this->mysqli = $mysqli;
    3.     }
    такой подход верен или нет ? после внедрения такого подхода у меня все равно возникает ошибка, что я не могу пользоваться mysqli
     
    #13 ZlobnyKolob, 14 ноя 2017
    Последнее редактирование: 14 ноя 2017
  14. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Угу. Как один из вариантов. Про реестр тоже почитай.
    --- Добавлено ---
    Ну читай текст ошибки. Подход верен.
     
    ZlobnyKolob нравится это.
  15. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    PHP:
    1.                 $query = printf("SELECT users.id FROM users WHERE users.id_vk = %s", $ID);
    2.                 $CountRows = $this->mysqli->query($query);
    3.                 $ExistUser = $CountRows->num_rows;
    ошибка в последней строке кода:
    Trying to get property of non-object
     
  16. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Эта ошибка означает, что запрос не прошёл. query вернул не mysqli_result, a null.
     
  17. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    значит я все таки не так что-то передал ? (имею ввиду объект $mysqli)

    Возможно у Вас есть пример где-то, чтоб я мог прочитать его

    может сделать что-то в виде этого ?
     
    #17 ZlobnyKolob, 14 ноя 2017
    Последнее редактирование: 14 ноя 2017
  18. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    нет, значит, что что-то не так с запросом
     
  19. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Спасибо за ответы, ошибка была в
    PHP:
    1. $query=printf("SELECT users.id FROM users WHERE users.id_vk = %s",$ID);
    Сделал
    PHP:
    1. $query=sprintf("SELECT users.id FROM users WHERE users.id_vk = %s",$ID);
    printf и sprintf
    :)
     
  20. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    Ребят, вопрос возник,
    Вот я авторизовал пользователя и занёс его в базу, отдал ID в сессию, потом на каждой странице создаю класс и по ИД запрашиваю из базы данные о пользователе, это правильно ? мне кажется, что нет и я не могу прийти к конечному понимаю как нести информацию между страницами ?
     
  21. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @ZlobnyKolob, это нормально.

    Но бывает в качестве временного хранилища используют сессии.
     
  22. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    нагрузки на БД нет ? каждый раз запрашивать информацию о пользователе ?
     
  23. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Подготавливай запросы как положено, а не спритифом их))
    --- Добавлено ---
    А что, есть подозрения что может лечь сервер Mysql?:D
    --- Добавлено ---
    Безобидный select не убьет твой сервер базы данных.
    --- Добавлено ---
    На то и база данных, чтобы обращаться когда нужны данные. А когда наладишь кэширование, то будешь реже обращаться, но это уже потом.
     
  24. ZlobnyKolob

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

    С нами с:
    25 окт 2016
    Сообщения:
    184
    Симпатии:
    10
    да нет подозрений, просто интересуюсь, этот селект это примерный, он там больше, но по одному полю подбор
    А почему спринтФ не торт ?
     
  25. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @ZlobnyKolob, ты так или иначе будешь коннектится к бд на каждой странице?