Ответы пользователя по тегу PHP
  • Mysql php, как взять определенные столбцы?

    iit
    @iit
    TeamLead + php/js разработчик
    Вариант без js

    Сперва сделать array со списком столбцов
    Вывести get запросом страницу с формой и пустой таблицой где вывести checлbox на каждый столбец.

    Форма посылает post запрос со списком столбцов.
    1 - Список столбцов сохраняем в сессию.
    2 - Делаем запрос в базу по списку столбцов из сессии.
    3 - Выводим снова форму, отмечаем выбранные чекбоксы и выводим таблицу с данными.

    Вариант с js

    Инициализируем json объект хранилище со списком всех столбцов которые по умолчанию false
    На клик по checkbox вешаем событие которое
    1 - изменяет состояние объекта с false на true
    2 - сохраняет объект в localstorage

    На кнопку выборки вешаем событие которое через ajax отправляет список столбцов на сервер
    1 - на сервере преобразуем json в фккфн делаем array_filter по true
    2 - по отфильтрованным столбцам делаем выборку из базы
    3 - отправляем json на фронт
    4 - получаем ответ api
    5 - выводим данные в таблицу
    Ответ написан
  • Как называется такая аутентификация и как выбрать правильный способ?

    iit
    @iit
    TeamLead + php/js разработчик
    Все зависит от того кто и как будет обращаться к backend.

    Если это другой сервер, мобильное приложение или SPA то лучше использовать токены - JWT как самый распространенный вариант.

    В случае обычного сайта или SPA возможно использовать сессии.

    Если используем обычные статические страницы + http api тогда сессия вполне нормальный вариант в том числе и для приложения по типу web-view.

    Если используем SPA с REST api / Graphql тогда токены удобнее.

    Что касается где хранить id пользователя в токене то самом JWT есть заголовок для этого. Вообще Jwt это 2 json + хэш/ключь слепленные вместе через base64.

    Первый json - служебный в нем идет алгоритм и тип ключа, второй - настраиваемый и может содержать что угодно, правда для некоторых моментов например id токена (jti) или id сессии (sid) есть предопределенные заголовки. Полный их список тут

    В вашем случае есть 2 варианта

    1 - доступ по сессии
    API и SPA требует сессию для защищенных методов, авторизация эту сессию предоставляет. Авторизация - может быть выполнена как обычной статической html с формой так и отдельным SPA.

    2 - доступ по токену
    В этом случае Авторизация реализуется в виде api на стороне сервера, и в виде токена
    + формы + логики авторизации на стороне клиента (Vue). Если токен есть - тогда есть доступ, если нет - то доступ только к методам регистрации и авторизации.
    Чтобы не палить код той части приложения где есть логика и фронт закрытой части - можно использовать code-splitting - сперва подгружается форма авторизации а остальное грузиться тогда когда это нужно.

    Есть правда еще более извращенные варианты вроде SPA с SSR на том-же Nuxt/Next/Express где пользователю токен а бэку на Go/JAVA/PHP уже токен приложения + токен пользователя.
    Иногда стоит использовать OAuth2.0 и LDAP которые тоже довольно интересны.
    Первый хорош на все случаи жизни, но только если используется куча связанных приложений/микросервисов а второй просто рай для бизнес-пользователей с Windows для какой-нибудь коробочной CMS.
    Ответ написан
    Комментировать
  • Как получать результаты php-файла по частям?

    iit
    @iit
    TeamLead + php/js разработчик
    Проблема медленной загрузки не в js и даже не в php а в api/бд которые дергает
    checkLibraryOne и checkLibraryTwo.

    Если используется база - тогда оптимизируем её, если api - тогда
    - Кешируем ответы api
    - Создаем отдельные точки вызова для каждого метода
    - Создаем объект в котором будет храниться список библиотек
    - Создаем на каждую точку свой ajax запрос который модифицирует список
    - При модификации списка обновляем и сам dom
    - Если список пуст и запросы еще pending - тогда показываем spinner чтобы все видели что мы что-то грузим
    Ответ написан
  • PHP ORM для бизнес приложений?

    iit
    @iit
    TeamLead + php/js разработчик
    Все зависит от размера проекта и фреймворка. Если проект не большой то подойдут laravel с Eloquent. Отдельно ставить Eloquent смысла мало он всеровно затянет половину ядра laravel.

    Если проект уже среднего размера тогда подойдут Symfony + doctrine. Правда для того что работать с ними нужно достаточно много знать один dql чего стоит.

    Если же проект огромный и дико нагруженный то есть смысл попробовать сделать его не на php а например на java + spring + hybernate.

    Ещё советую попробовать ddd и можно будет в любой момент поменять laravel на symfony а eloquent на doctrine или на тот же propel
    Ответ написан
    2 комментария
  • Почему не выводятся данные из БД?

    iit
    @iit
    TeamLead + php/js разработчик
    Эх, если бы еще и сам main.tpl дать =)
    А так пока вижу 2-е небольшие проблемы, которые не относятся к теме, но все-же
    1)
    class template_class{
    var $values = array();
    var $hrml; // тут hrml а должно быть html
    2)
    Если бы этот код даже если бы и вывел пост - то только один
    while($row = $result->fetch_row()){
    $tpl->set_value('PUB_NUM', $row['id']);
    }

    А вообще лучше готовые шаблонизаторы использовать - тот же twig например
    Ответ написан
  • Как долго может фильтроваться такой файл?

    iit
    @iit
    TeamLead + php/js разработчик
    Время зависит от производительности сервера, но одно скажу точно - достаточно, чтобы отвалиться по timeout.
    У меня была похожая задача, правда был один xml а не два csv, в итоге я загнал данные в postgres и уже там обрабатывал sql запросами.

    searchForSku можно заменить простой конструкцией
    array_search($sku, array_column($array,'sku')) если php > 5.5.0
    Ответ написан
    4 комментария
  • Насколько плохо echo внутри метода?

    iit
    @iit
    TeamLead + php/js разработчик
    Если вы используете фреймворк то шаблон должен выводится средствами фреймворка.

    Если самописка то в проекте должен быть только один финальный echo который выводит уже готовый шаблон.

    echo на прямую в контролере - однозначно зло.
    Ответ написан
    Комментировать
  • Как сделать звуковые уведомления на сайте?

    iit
    @iit
    TeamLead + php/js разработчик
    У меня знакомые встраивали тэг аудио на сайте и запускали при событии js правда не для уведомлений.
    Ответ написан
    Комментировать
  • Yandex почта отправка mail php?

    iit
    @iit
    TeamLead + php/js разработчик
    1) Проверить правильно ли настроен mail на сервере, в худшем случае вас банят и письма не доходят либо почтового сервака нет от слова совсем, в плохом они ложатся в спам и во входящих из не видно либо вы в спам списках откуда можно отписаться
    2) Проверить правильность почты менеджеров
    3) Проверить менеджеров, бывали случаи когда менеджер специально говорил что письма не доходят и страдал фигней.

    А вообще лучше использовать swiftmailer либо api например mandril либо mailgun а может даже amazone ses.
    Идеальный вариант когда лиды ложатся сразу в crm. Если нету crm то менеджеры спокойно могут кидать отмазки. А так сразу видно где проблемы и еще и KPI продажников.
    Ответ написан
    Комментировать
  • Минимальный набор элементов для отправки письма с сайта?

    iit
    @iit
    TeamLead + php/js разработчик
    Если на сервере корректно настроен sendmail то можно просто фунцией mail однако настроить его самому достаточно сложно, особенно так, чтобы письма не уходили в спам.
    На многих хостингах sendmail настроен кое-как, но крупные обычно настраивают нормально.

    Поэтому есть множество способов отправить письма - первое это установить готовое решение почтового сервера и слать через него, их настраивать чуток проще. Второй вариант завести почту и слать через эту почту. И третий воспользоваться api почтовых систем например
    ExpertSender
    Mailgun
    Mandril
    Или AWS прослойку для почты.

    На работе используем почтовый сервер для одного проекта, даже с цифровой подписью. Для другово exSender.

    Сам лично использую Mailgun и smtp через почту вроде noreply@mysite.my где к домену привязан gmail для бизнеса, на одного человека 4$ в месяц.

    В итоге самый простой вариант - используем как посоветовал Дмитрий swiftmailer подключаем его к smtp к готовой почте и радуемся. Либо тестируем mail, причем тоже через swiftmailer и пинаем хостеров чтобы сделали нормальную почту.
    Ответ написан
    Комментировать
  • Как правильно настроить rewrite в nginx?

    iit
    @iit
    TeamLead + php/js разработчик
    Использую laravel и lumen для них подходит что-то вроде этого
    server {
        listen 80;
        server_name some.site.my;
    
        root /var/www/some.site/web/public;
    
        index index.html index.php;
    
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        location / { 
            try_files $uri $uri/ /index.php?$query_string;
        } 
    
       error_log /var/www/some.site/web/logs/error.log;
    
    }
    Ответ написан
    1 комментарий
  • Как один раз инициализировать CURL для всех методов в классе?

    iit
    @iit
    TeamLead + php/js разработчик
    Вынести инициализацию curl в конструктор объекта а сам ресурс в protected свойство класса
    class SomeController{
    
        protected $curl;
    
        public function __construct($url){
            $this->curl = curl_init($url);
        }
    
    }
    Ответ написан
    Комментировать
  • Есть ли фриланс ближе к 30?

    iit
    @iit
    TeamLead + php/js разработчик
    Сам я не фрилансер, обычный офисный планктон, у нас команда из 2 php - middle я и друг, 1 php-senior который дает консультации 2 часа в неделю, 4 джунов-студентов, 2-х дизайнеров, front-end ninja и целая стайка сейлзов, манагеров + вагон контекстщиков и контентщиков.

    Работа адовая и оплачивается средне. Иногда приходится брать фриланс.

    На биржах половина неадкваты, которые хотят соцеть на joomla за 250 руб и вчера, а другая половина людей - люди которые отдают рутину чтобы заняться важными вещами.
    Первых лучше обходить стороной, вторые выжмут вас по максимуму. Интересных и хорошо оплачиваемых вещей там мало настолько что конкуренты уведут это быстрее вас.
    Единственный вариант oDesc или её аналоги, там и люди адекватные и оплата получше.

    Сам беру сторонние проекты у знакомых, там и добываю деньги. Тем более при 3+ удачных сделках есть шанс что возьмут в шатат или попрет куча нормальных клиентов.

    Иногда даже отбиваться приходится.
    Ответ написан
    Комментировать
  • Как на PHP разбить строку вида "параметр: значени:е" на массив ("параметр" => "значени:е")?

    iit
    @iit
    TeamLead + php/js разработчик
    Если через регэспы - то используй ленивый квантификатор, но если нет желания делать через регэкспы то stpos + substr будет за глаза.
    Ответ написан
    Комментировать
  • Где найти модуль для umi cms?

    iit
    @iit
    TeamLead + php/js разработчик
    Нужно сделать макрос, который создаст данный блок и в редакторе добавить кастомную кнопку для этого макроса.

    Готового модуля на umi с таким функционалом я не знаю - скорее всего придется писать что-то свое.

    P.S. Опыт работы с umi - 2 года - чувак беги из конторы в которой стоит этот монстр...
    Ну или как я уговори руководство переписать систему на что-то более разумное
    Ответ написан
    Комментировать
  • Как засчитывается просмотр?

    iit
    @iit
    TeamLead + php/js разработчик
    Скорее всего при загрузке страницы на стороне сервера добавляется инкремент в таблицу. Отдельные запросы для этого достаточно редко используются.
    Ответ написан
    Комментировать
  • Undefined property из-за чего?

    iit
    @iit
    TeamLead + php/js разработчик
    1) Undefined property: Functions::$db - У класса Functions нет свойства $db - могу предположить что код загружающий туда базу данных либо не описан либо не работает.

    2) Fatal error: Call to a member function escape() on a non-object
    Так как объект $db не создан то и вызвать его функцию тоже не получится.

    Решение - посмотреть класс базы и привязать его к вашему объекту.

    что-то вроде

    $this->db = new SomeDataBaseClass('mysql','user','password');
    echo $this->db->escape($login);


    Нужно только найти как у вас называется SomeDataBaseClass и как его создавать.
    Ответ написан
  • PHP - какую библиотеку oAuth выбрать?

    iit
    @iit Автор вопроса
    TeamLead + php/js разработчик
    В итоге пришлось создать свою библиотеку, которая и решила все проблемы.
    Особенно с mail.ru, кто делал авторизацию через php использую js куки их загрузчика поймет...
    Ответ написан
    Комментировать
  • Система рейтинга для веб-сайта

    iit
    @iit
    TeamLead + php/js разработчик
    Тут только пилить свое с нуля, в принципе достаточно не сложная вещь.

    Во первых определить по каким критериям будет повышаться и понижаться рейтинг (like/dislike или 1-n звезд), кто может повышать/понижать рейтинг - толпа анонимов или только зарегистрированные пользователи, а может те кто вошел через логинзу и прочие сервисы соцсетей?

    Самый простой вариант создать базу или хэш-таблицу с полями - id, пользователь, оценка, unix_time

    При оценке туда записывать результаты. а при формировании страницы вытаскивать из бд или хэша все рейтинги и находить средний.
    Ответ написан
    Комментировать
  • HTML+CSS+JS+PHP - идеальная IDE существует?

    iit
    @iit
    TeamLead + php/js разработчик
    AptanaStudio3 - довольно удобная вещь, но на любителя.
    Ответ написан