Задать вопрос
  • Как реализовать массив подстановок для запроса в MySQL?

    @MadridianFox
    Web-программист, многостаночник
    Используя ...$arr вы не получите ключи в массиве. Поэтому почему бы не сделать третий агрумент обычным агрументом, и не передавать туда массив, который без изменений будет передаваться в execute?
    public function query($sql, $class, $params){ // $params = [":age"=>20]
            $sth = $this->dbh->prepare($sql);
            $res = $sth->execute($params); // <----
            if (false !== $res) {
                return $sth->fetchAll(\PDO::FETCH_CLASS, $class);
            }
            return [];
        }
    Ответ написан
    Комментировать
  • Как получить количество заказов за сегодня?

    @MadridianFox
    Web-программист, многостаночник
    $day_orders = $db->query("SELECT COUNT(*) as cnt FROM 'oc_order' WHERE 'date_add' >= CURDATE() ");
    echo $day_orders['cnt'];
    Ответ написан
    7 комментариев
  • Как подгружать новости не в хронологическом порядке?

    @MadridianFox
    Web-программист, многостаночник
    Просто используйте постраничную навигацию:
    SELECT *, something FROM `news`
    WHERE (некое условие для фильтрации по категориям) AND  date < "time of page hit"
    ORDER BY `something` ASC
    LIMIT 20, 20

    Я добавил в этот запрос всего два маленьких изменения. Первое - задал смещение для LIMIT, его надо высчитывать на PHP и вставлять в запрос. Первая цифра это просто номер страницы минус один, умноженное на количество постов на странице (page_num-1)*page_size. Вторая цифра - как обычно, количество постов на странице.
    Второе измененеие - добавил в where дополнительное условие: выбирать только те новости, которые уже были в базе, пользователь открыл страницу. Это необходимо, т.к. если в процессе подгрузки новостей добавится ещё одна, то страницы поедут (вы могли замечать это, когда листаете хабр и на следующей странице первым виден последний пост с предыдущей) и какая-то новость задублируется в общем списке на клиенте. Time of page hit должно храниться на клиенте и передаваться на сервер при подгрузке каждой следующей порции данных.

    Этот метод не зависит от того как вы сортируете новости - по дате, рейтингу, любому другому полю... главное чтобы первая подргузка и все последующие сортировались одинаково.
    Ответ написан
    5 комментариев
  • Правильный ли подход к построению архитектуры?

    @MadridianFox
    Web-программист, многостаночник
    Пример не очень хороший. Тут очень сильно зависит от предметной области. Если вы разрабатываете систему управления всякими вокрфловами, в которых могут участвовать разные сущности, то наверное да, однако тут можно зайти с другой стороны - что если выделить класс сущностей, которые могут использоваться в управлении воркфлоу как отдельную сущность, которая может нести разную полезную нагрузку в зависимости от типа? Тогда статус будет атрибутом этой сущности, а полезная нагрузка уже будет выносится в компоненты той же самой Стратегии...
    Если же, как в примере, вы просто заметили схожесть процессов работы с разными сущностями, то скорее всего не стоит париться. Можно конечно унифицировать, но когда сущности действительно разные, рано или поздно появятся различия, ради поддержки которых придётся хакать свою же систему.

    У меня на работе мы создали унифицированную систему (и да, там ключевую роль играют статусы) по работе с разного рода заявками/тикетами/уведомлениями, но этому предшествовало пара лет работы с этим же функционалом, реализованным отдельно.
    Ответ написан
    3 комментария
  • Как узнать какие файлы php сейчас исполняются?

    @MadridianFox
    Web-программист, многостаночник
    В списке процессов должно быть видно что выполняется скрипт.
    Кроме того, вы можете добавить в свой скрипт разного рода вывод в консоль (или сразу в файл), а при запуске скрипта через крон перенаправить вывод в файл. Далее уже этот файл открываете с помощью tail с опцией непрерывного чтения (насколько помню tail что-то такое умеет), ну и в реалтайме наблюдать что выводит скрипт запущенный через крон.
    Ответ написан
    Комментировать
  • Вынесение в трэйты работы с API платёжных систем, можно ли?

    @MadridianFox
    Web-программист, многостаночник
    Платёжные системы потому и можно назвать общим понятием "платёжные системы" потому что они предназначены для выполнения каких-то сходных операций. Если вы хотите иметь возможность подменять их или соединять друг с другом в разных комбинациях - вам необходимо привести их к общему интерфейсу, а все отличия инкапсулировать.
    Только так.. и это бигмак)
    Ответ написан
    Комментировать
  • Вызвать функцию класса и других функций(область видмости)?

    @MadridianFox
    Web-программист, многостаночник
    Лучший вариант - иметь одну точку входа, в которой создаётся подключение, и передавать это подключение вглубь только через конструкторы классов и аргументы методов.

    Более реалистичный вариант - выделение какого-нибудь service locator'а, который тоже лучше передавать руками, но часто его делают доступным глобально через static или singleton (который сам строится на static).

    Ваше решение в корне не верно. Класс, всё содержимое которого статическое это уже не класс, а набор функций.
    Ответ написан
    Комментировать
  • Golang подходит ли для создания сайтов?

    @MadridianFox
    Web-программист, многостаночник
    1) Go компилируемый, само собой скорость выше, но если вы на маленьком сайте упираетесь в скорость исполнения кода, то проблема скорее в коде, и выбор более быстрого языка избавит вас только от симптома, но не от болезни
    2) на seo влияет только то ЧТО вы отдаёте пауку. Не важно на каком языке пишется программа, которая отдаёт html
    3) Программа написанная на go сама работает как сервер. Более того, это не какой-то сервер приложений, как например tomcat, нет, вы сами будете писать цикл обработки входящих соединений - т.е. вам необходимо этот самый серер реализовать. В отличие от php+apache, где в качестве сервера выступает apache, который при необходимости вызывает php. Ставить ли apache или nginx перед go сервером вы решаете сами.
    4) Поддерживает. На скорость работы СУБД не влияет то, на каком языке написана программа, которая к ней обращается.
    5) Фреймворков уровня Yii2 или Symfony не наблюдается. Ситуация такая же как и с NodeJS - что-то есть, но комбайнов нет.
    6) Если что-то может слушать соккет - на этом можно написать сайт. Любой. Другое дело, что сайты визитки на Go не пишут (только ради забавы), а крупные сайты вообще имеют сложную архитектуру, такую что язык уже не имеет значения.
    7) Для php разработчика - да. Как минимум вы меняете скриптовый язык на компилируемый. Это значит что любое изменение кода требует компиляции, остановки работающего сервера, загрузки бинарника на его место и запуск. Кроме того вы меняете Stateless модель работы кода на полноценно работающую программу. Если на php у вас скрипт запускался заново при каждом http запросе, то программа на go запускается один раз и после этого принимает множество запросов.
    Ответ написан
    10 комментариев
  • Почему не запускается мой код в контейнере docker?

    @MadridianFox
    Web-программист, многостаночник
    А вам точно надо каждый раз делать run с одинаковым именем и без rm, а после этого exec?
    Ответ написан
  • Как удалить слова из предложения?

    @MadridianFox
    Web-программист, многостаночник
    Как вариант: разбиваем строку по точке с запятой.
    Если надо добавить слово, то кладём его в последний существующий элемент (это всегда пустая строка) и добавляем в конец массива новую пустую строку.
    Если удалить слово - то ищем индекс слова в массива, удаляем.
    В итоге джойним обратно по точке с запятой. Т.к. в конце есть пустая строка, то итоговая строка будет заканчиваться точкой с запятой.
    Ответ написан
    Комментировать
  • Как передать ошибку пользователю в MVC?

    @MadridianFox
    Web-программист, многостаночник
    передавать через контроллер, но при этом придется совершать в нем множество проверок, типа проверка на уникальность пользователя, пустоту полей, идентичность паролей

    Этим вы делаете толстый контроллер. На самом деле форма - это модель. Это страница на которой есть своя логика, и в зависимости от действий пользователя она меняет своё состояние, которое и отображается пользователю.
    И вот логика формы реализуется в модели формы, которая в свою очередь может дёргать более глубокие слои приложения.
    Таким образом задачей контроллера становится только получение данных из http запроса, засовывание их в модель и вызов у модели одного-двух методов.
    Ответ написан
    Комментировать
  • Структура универсального каталога данных?

    @MadridianFox
    Web-программист, многостаночник
    Вангую - щас понабегут люди с советами типа "юзай mongodb"...
    Вообще можно использовать EAV. Это когда атрибуты сущности хранятся не горизонтально (столбцы в таблице), а вертикально (один атрибут - одна строка). Дополнительно нужны таблицы, которые будут хранить список типов сущностей, список типов атрибутов и связи типов сущностей и типов атрибутов.

    Но предупреждаю - есть ощутимое проседание по быстродействию, да и работать с этим может быть не так удобно.
    В случае, когда необходимо соорудить хранилище для однотипных сущностей с опциональными атрибутами, например каталог товаров, где всё есть товар, но у холодильника есть мощность, а у смартфона - количество мегапикселей это в самый раз.
    Так вот, в таком случае быстродействие по фильтрации достигается через создание отдельного индекса, может даже с использованием отдельного ПО, такого как Sphinx.
    Ответ написан
    7 комментариев
  • Cron не может найти класс из подключаемого файла?

    @MadridianFox
    Web-программист, многостаночник
    Логично, в php запущенном из консоли нет document_root
    Ответ написан
  • Почему не добавляются запись в БД на Denwer?

    @MadridianFox
    Web-программист, многостаночник
    После вызова mysql_query добавьте вызов mysql_error и посмотрите какую строку он вернёт.
    Ответ написан
  • Как настроить mysql binary log?

    @MadridianFox Автор вопроса
    Web-программист, многостаночник
    Как оказалось, mysqlbinlog, без опции -s выводит строки вида BINLOG 'base64_encoded_text', что является служебной командой для mysql. Для того чтобы увидеть запрос, необходимо при вызове mysqlbinlog добавить аргумент -v, но запрос будет выведен в качестве комментария.
    А я то думал что mysqlbinlog выводит запросы так же как mysqldump...
    Ответ написан
    Комментировать
  • Получить массив в js через ajax?

    @MadridianFox
    Web-программист, многостаночник
    JSON.parser принимает строку и делает из неё объект/массив, в вашем случае это объект.
    Если вы используете jQuery для выполнения ajax запросов то достаточно будет указать dataType:"json" и результат сразу будет в виде объекта.
    Ответ написан
  • Как запустить php скрипт при помощи plink или из bat-файла?

    @MadridianFox
    Web-программист, многостаночник
    Возможно команда иначе называется. Или же на сервере совсем нет php.
    Ответ написан
  • Что почитать о динамическом выводе данных с сервера, без перезагрузки страницы?

    @MadridianFox
    Web-программист, многостаночник
    Если хотите много динамики на странице, то смотрите в сторону SPA (Single Page Application), т.к. jQuery лапша с ростом количества динамических частей на старнице начнёт запутываться.
    Но это отнюдь не "не очень сложное", т.к. мир SPA фреймворков это наверное одна из самых быстро развивающихся областей программирования.
    Ответ написан
    Комментировать
  • Как получить ip сервера, встраиваемого через Iframe?

    @MadridianFox
    Web-программист, многостаночник
    Встраивание iframe делается браузером. Это браузер видит что необходимо в этой странице подгрузить ещё одну, и подгружает. Сама же страница, тобишь сервер, не знает что его показывают в iframe, поэтому $_SERVER['SERVER_ADDR'] всегда будет показывать реальный адерс сервера.
    Ответ написан
  • Как решить эту проблему?

    @MadridianFox
    Web-программист, многостаночник
    Где-то есть редирект с www на без www, вот оно по кругу и редиректит. Браузер это заметил и выкинул ошибку.
    Ответ написан
    Комментировать