Задать вопрос
Ответы пользователя по тегу PHP
  • Как достать переменную из класса в var_dump (код внутри)?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Артур,
    Но вопрос в том, насколько это правильно, с точки зрения паттерна фабричного метода.
    Чет вы сильно путаете теплое с мягким... Внутренняя реализация классов созданных фабрикой НИКАК не влияет на "фабричность". Паттерн относится только к методу создания готовых объектов по определенным условиям. Какие это объекты вообще не суть важно. По сути они могут быть абсолютно разные, просто по логике чаще всего это однотипные объекты, отличающиеся в настройках или внутренней реализации (например все они реализуют один интерфейс, но внутри работают по разному).

    Что касается вашего кода - как я уже сказал, для вашего случая(проверки доступа для текущей роли) достаточно задать метод проверки доступа. Как то так:
    //$role = $_SESSION['role'];
    $role = 'moderator';
      class Role{
         public function checkPermission($action)
         {
             if(isset ($this->$action))
             {
               return $this->$action;
               }
              return false;
       }
    }
    
      class admin extends Role{
        protected $addItem = true;
        protected $editItem = true;
        protected $deleteItem = true;
      }
      class moderator  extends Role{
        protected $addItem = true;
        protected $editItem = true;
        protected $deleteItem = false;
      }
      class publicator  extends Role{
        protected $addItem = true;
        protected $editItem = false;
        protected $deleteItem = false;
      }
    
      class Factory{
        public static function createUsers($role) : Role{
          if(class_exists($role))
            return new $role;
          else
            echo ("Роль".$role."отсутствует");
        }
      }
    
      $login = Factory::createUsers($role);
      var_dump($login);
       
    // try to use in code:
      if ($login->checkPermission('editItem')){
         echo 'lets edit!';
      };
    Ответ написан
  • Uncaught SyntaxError: Unexpected end of JSON input?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) sendAjaxForm укажите сразу тип возвращаемого значения json, зачем эти танцы с хтмл который парсится в жсон...
    2) Загадка на сообразительность: Если логин есть и пользователя с таким логином нет - что вернет json_encode($errors);?
    Ответ написан
    1 комментарий
  • Почему Open Server пишет, что $_POST не существует?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Ну так чо, пробуйте по порядку же:
    1) Отключить сертификат
    2) Проверьте что метод запроса пост (в браузере смотрите нетворк, в коде делаете вар_дамп сервер реквест метод)
    3) есть подозрение что срабатывает переадресация (почему - другой вопрос), по этому внимательно смотрим п. 2
    далее по обстоятельствам.
    Ответ написан
  • Можно ли составить 2d куб из картинок php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    почему вы квадрат так странно назвали? А 3д куб думаю можно через канвас, например вот с библиотекой Three.js.
    Ответ написан
    Комментировать
  • Прошу взглянуть на мой код и подсказать где я возможно не прав?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    <input type="file" name="avatar" accept="image/gif, image/jpeg">
    облегчает человеку выбор верного формата

    if(isset($file))не гарантирует что файл загрузился, по этому нужно проверять еще и еррор, перед тем как передавать несуществующие свойства в функцию

    $permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    ваще жесть, про хэш не слышали? Тем более еще и в разных регистрах называть файлы...

    В остальном обычный такой код из начала нулевых, пхп4 и вот это все...
    Ответ написан
    Комментировать
  • Как сделать ссылку со словами из заголовка?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Это называется slug, простейший метод - использовать класс Transliterator и preg_replace + strtolower для нелитералов.
    Ответ написан
    Комментировать
  • Долгий ответ сервера на Opencart в 5000 мс?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Без навыков и подтираться то не выйдет... Просто кнопки "сделать хорошо" там нету. Нужно проверить бд на наличие необходимых индексов, а по уму еще сначала тайминг кода с отсечками до/после запросов/циклов/критичных участков. Так что просто "стукнуть сервер посильнее" не прокатит.
    Ответ написан
    Комментировать
  • Почему из MySQL базы данных не выводится login?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    сессия хранит только элементарные типы, представляемые в виде строк. Что логично, ибо это суть файл, либо аналогичное хранилище. Для того чтобы работала подобная магия нужно:
    а) удалить из объекта все ссылки на ресурсы, которые будут мешать сериализации, если таковые имеются
    б) сериализовать объект и записать в сессию

    и в обратном порядке для чтения:
    а) Загрузить класс объекта который вы будете получать (иначе магии не получится)
    б) Десериализовать из сессии и добавить в объект все ссылки на нужные ресурсы, например ссылку на объект бд.
    Ответ написан
    Комментировать
  • Многомерный SimpleXMLElement object в массив php - как?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Классическое решение прям с мануала:
    $xml = simplexml_load_string($xmlstring);
    $json = json_encode($xml);
    $array = json_decode($json,TRUE);
    которое имеет однако несколько побочных эффектов, например не видит [CDATA[ ]] ноды или видит как пустые элементы...
    Ответ написан
  • Как проще написать удаление пробелов, тегов, и преобразование в нижний регистр?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    во первых - загадочная строка с $arr = str_replace('/\s/','',str_split($pin)); будет работать весьма неоднозначно, хотя бы по тому что str_split() не поддерживает работу с мультибайтовыми кодировками. Во вторых она там конечно же нафиг не нужна, так как str_replace() работает со строками в третьем аргументе, но зато не работает с регулярными выражениями в первом, по этому эта строка у вас вообще никак не работает. В остальном все вполне в лучших традициях бредогенераторов.

    Коротко: Если у вас есть поля определенных типов - проверяйте их отдельно на совпадение нужным типам, для этого есть фильтры и хелперы. Экономия на буквах была актуальна в 17 веке, когда бумага дорогая была.
    Ответ написан
    Комментировать
  • Как в кусок кода интегрировать дополнительный кусок правильно?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    В вордпрессе нет такого понятия "правильно", так как все что более-менее шевелится признается верным решением. По этому заморачиваться с кодестайлом, правильностью, поддерживаемостью и хотя бы элементарным разделением на код, данные и представление в среде вордперссеров считается моветоном. Единственное чем надо озаботиться - длинна имени каждой следующей написанной функции должна быть больше предыдущей. Это обусловлено тем что в теории каждая следующая функция описывает более сложный функционал чем предыдущая, и, возможно, содержит в себе все предыдущие. В таком случае в качестве имени можно просто объединить все имена используемых функций через подчеркивание. В остальном вы вольны выеживаться фристайлом.
    Ответ написан
    2 комментария
  • Ошибка 500, что не так?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых - кошмарная мешанина из кода и хтмл.
    Во вторых - 500 ошибка это "общая" ошибка для всего что фатально грохнулось, но настройки не позволяют отобразить конкретную ошибку. То есть - либо смотрите логи (что больше подходит для продакшена), либо настраиваете вывод ошибок и выставляете уровень E_ALL, тогда ошибки будут вываливаться сразу в браузер и будет понятно что и где упало, и почему.
    Ответ написан
  • Проблема PHP и AJAX. Как изменить значение в AJAX с помощью PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вариантов 2.
    1) Подгрузить все вопросы в json и выбирать их по мере прохождения, подгружая в одну форму нужные поля. Подходит для "честных" пользователей, то есть тех, кто проходит тест для проверки собственных знаний, а не для "получить оценку по предмету".
    2) Скрипт возвращает готовую хтмл разметку всего вопроса, которая затем либо вставляется в форму, либо уже с формой приходит и заменяет текущую.

    В обоих случаях у вас не нужна никакая функция send(), достаточно повесить на документ слушатель субмита формы, и уже в нем отправлять аякс запрос со всеми данными текущей формы. И не надо никаких подстановок.
    Ответ написан
    Комментировать
  • Откуда php сервер берет информацию?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Я включаю свой встроенный сервер
    это какой и во что он встроен у вас?

    начинают подключаться все данные с проекта который я делал несколько месяцев назад, и интересно то что совсем с другого порта.
    В компьютерном понимании порт - это не стоянка судов и контейнеров, а условная адресация к области оперативной памяти, которую "слушает" или использует определенная программа. В данном случае ваш "встроенный сервер". Он "услышал" запрос на указанном порту и отдал тот же контент который и был у вас в его папке по умолчанию для показа (document root).

    Что можно сделать в данной ситуации?
    Практически все "встроенные сервера" имеют файлы конфигурации, позволяющие настроить как основной document root, так и "алиасы" - много доменов на одном сервере, каждый со своим document root. Смотрите настройки для своего "встроенного сервера".
    Ответ написан
  • Как исправить ошибку конфигурационного файла PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Нет времени на установку скриптов, или что то не получается? Мы установим, и настроим все за тебя, за дополнительную плату. Писать Вконтакте по ССЫЛКЕ. Посмотреть отзывы можно по ссылке.
    Услугу предоставляет Администрация сайта VipAdmin.Club
    Там же все четко написано, че вы тупите то...
    Ответ написан
    3 комментария
  • Обработка ajax запроса?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    нужно при клике на чексбокс ajax-ом получить/фильтровать товар, который выводи этот файл Product.php
    1) Чекбоксы что у вас фильтруют?
    2) В Product.php нет функционала, учитывающего более одного параметра, и то - только категорию.

    не понимаю как в обработчике ajax запроса, взять эти данные
    Плохо, значит пока еще слабо знаете свою предметную область. внизу вашего вопроса есть пример, эти данные там есть, что с ними делать зависит от того что нужно получить.

    надо ли обращаться к этому файлу Product.php
    В представленном виде он бесполезен для вашей задачи, нужно писать метод получения списка из произвольных параметров. Потом сформировать из списка хтмл с готовыми блоками и отдать его (сделать echo) обратно. Только в аяксе надо будет заменить dataType: 'html'
    Ответ написан
    3 комментария
  • Как создать свойство внутри метода?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1. Делают ли так?
    Делают, но это не хорошая практика. Во первых имеете шанс затереть какие-то настроечные данные объекта и получить непредсказуемость поведения. Во вторых, если у вас там значения из бд или другого хранилища в формате ключ-значение, лучше хранить их в отдельном поле, том же дата, но в виде stdClass, чтобы не путать их при работе с хранилищем с остальными полями, например так:
    public function setData(array $data):void{
      $this->data = (object)$data;
    }

    в идеале у вас должен быть DTO (data transfer object), но в актив рекорд движках он обычно не используется.
    Ответ написан
    4 комментария
  • Как сменить название каталога/файла на сервере при запросе?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    для апача называется mod_rewrite, для нжинкса используется другая директива (лень искать, гугли).
    на сервере site.ru/cp/admin.php, чтобы в браузере на самом деле отображалось site.ru/cp/panel (грубый пример).
    Для этого еще нужно обрабатывать скриптом, или писать отдельные правила серверу на каждый чих. То есть либо единая точка входа и роутер, либо жесткие правила в конфиге сервера.
    Ответ написан
    Комментировать
  • Как создать квиз с отправкой ответов пользователя на почту?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вы зачем то объединили 2 абсолютно не связанные задачи - квиз и отправку абстрактных данных на абстрактный емэйл.
    С помощью чисто бэкенда будет убого, но можно. Только закончил делать викторину на нашем проекте, хорошо выходит в связке жс+цсс+бэкенд. Со статистикой и "неразгадываемостью" не заморачивался, делалось все в рамках концепции "проверь себя", но ничего не мешает добавить.
    Ответ написан
    Комментировать
  • Как добавить слово в адресную строку при нажатии на кнопку?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Ответ написан
    Комментировать