Ответы пользователя по тегу PHP
  • Как при асинхронных запросах к базе сохранить последовательность?

    Stac
    @Stac
    Обычно помогает помогает простая нумерация запросов.

    Например у вас есть табличка или nosql документ с условным названием hp_history - история изменения здоровья.

    id| hp | action | value | timestamp
    1 | 2|...|...|nnnn1
    2| 1 | урон | 1 |nnn28
    3| 10| лечение | 10 |nnn34
    4| 9 | урон | 1 | nnn35


    В данном случае порядок очевиден. Текущее значение можно хранить явно, а можно вычислять как сумму изменений (урон в этом случае должен быть отрицательным). Выбирайте, что подходит по производительности.

    Также возможно не нужно хранить всю историю изменения здоровья, а только последнюю ее часть, текущий бой.

    В критической ситуации, типа возможной смерти персонажа, стоит сделать синхронный запрос, чтобы убедиться, действительно ли он умер.
    Ответ написан
  • Есть ли какие-нибудь сервисы для генерации текстового шаблона из POST\GET запроса?

    Stac
    @Stac
    Судя по довольно мутному описанию задачи это нужно только вам и вашим клиентам.

    Поэтому берете и пишите за день себе такой сервис или нанимаете фрилансера.

    Можете даже меня нанять, но напишите задание четко и понятно, начиная с "базы данных на конструкторе". Что это вообще такое? :)
    Ответ написан
    Комментировать
  • Как приспособить пагинацию?

    Stac
    @Stac
    О, я воздержусь от примеров кода, чтобы у вас не было соблазна их использовать.

    Вам нужно разделить код получения данных из БД и код вывода HTML в браузер.

    Дальше можете действовать по алгоритму:
    1) Сделать запрос "SELECT max(id), count(*) FROM `products`".
    Количество нужно для определения числа страниц.
    А max(id) может быть и не понадобится. Так как вывод отсортирован по убыванию (от новых к старым), а новые изображения могут добавляться в галерею, можно запоминать id первого изображения на первой странице.
    2) Получить из $_GET номер нужной страницы (используйте функцию filter_input()).
    3) Получить количество изображений на странице из конфига или тоже из $_GET, если вы хотите, чтобы пользователь мог управлять этим параметром.
    4) Сделать запрос с БД 'SELECT id, name, description, price, image FROM products WHERE id <= $max_id ORDER BY id DESC LIMIT $limit OFFSET $offset';

    где, $max_id это id самой новой записи в текущей сессии, $limit - количество картинок на странице, $offset = $limit * ($p-1), где $p - номер страницы (нумерация страниц с 1).

    Используйте подготовленные запросы, как у вас в примере.

    $stmt = $DB_con->prepare('SELECT id, name, description, price, image FROM products WHERE id <= ? 
            ORDER BY id DESC LIMIT ? OFFSET ?');
     $stmt->execute(array($max_id, $limit, $offset));


    5) Выбрать из БД нужные данные и передать в код отвечающий за представление.

    В представлении (коде, генерирующем HTML) нужно не только вывести картинки текущей страницы, но и сформировать ссылки на другие страницы.

    Количество страниц = количество записей в БД / $limit.

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

    Stac
    @Stac
    Я работаю примерно также как вы - свой фреймворк, все отлажено и т.п. Несколько лет бьюсь в ООП, пытаюсь понять, где бы применить. Там, где применил, резко возрастала сложность.

    Единственное, где пока ООП для меня показался логичен, понятен и обязателен - командная разработка или разработка модуля для готового чужого проекта. В этом случае я просто поставляю свой класс или набор классов в своем пространстве имен, которые решают бизнес задачу, возможно предоставляя API.
    Ответ написан
    Комментировать
  • Http аутентификация работает неправильно, почему?

    Stac
    @Stac
    В дополнение к ответу ozgg:

    1) Не забудьте, что при такой авторизации реализовать logout (выход из системы), а то скоро придется писать второй вопрос тут :)

    Т.к. нет простого способа заставить браузер перестать слать вам логин и пароль при каждом запросе, то факт логаута нужно реализовывать своими силами.

    И учитывать это при логине. Т.е. нужно дополнить условие для поиска пользователя в БД - не только проверять наличие $_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'], но и проверить вашу переменную хранящую признак, что пользователь разлогинен

    2) Осторожнее с trim. Если у вас запрещены пробелы в логине и пароле, почему они удаляются только с концов?

    3) Если была нажата кнопка "Отмена" лучше делать редирект на какую-то релевантную страницу (главную например). Это из опыта общения с Клиентами.

    4) Вместо заголовка "HTTP/1.1 401 Unauthorized" лучше использовать "Status: 401 Unauthorized". Тоже из опыта. Опыта развертывания на Windows-сервер.
    Ответ написан
    Комментировать
  • Как отправить HTML письмо не программисту?

    Stac
    @Stac
    Функция mail() в PHP прекрасно* отправляет HTML-письма.
    Надо только добавить заголовок ("content-type: text/html; charset=UTF-8").

    Вот пример вызова: $res = @mail($email, $subject, $message, "FROM:" . $from_email . "\nREPLY-TO:" . $reply_to_email . "\ncontent-type: text/html; charset=UTF-8");

    В $message у вас будет HTML-код письма. Это вариант для бедных - ваш скрипт потребует минимальных изменений.

    Но "большие дядьки" делают по-другому. Они шлют т.е. multipart письмо, где есть и текстовая и HTML-версия. Код лля его отправки написать чуть сложнее (у меня это почти 20 строк).
    Но тут помогут уже написанные классы, чудовищные по своему размеру и неудобству (посравнению с простым вызовом mail()), зато пользующиеся всеобщей любовью.

    * - могут быть проблемы с кодировками (в т.ч. кодировкой subject, т.к. для этого есть отдельный алгоритм кодирования) в отдельных почтовых клиентах, типа Lotus Notes.
    Ответ написан
    Комментировать
  • В каком направлении двигаться дальше, чтобы стать полноценным PHP разработчиком?

    Stac
    @Stac
    Присоединюсь к aimp-programming.

    PHP класный язык, чтобы копаться в Wordpress и делать всякие плюшки и полезности для Клиентов с фриланса.
    PHP хорошо подходит для прототипирования и прочих задач, которые нужно сделать быстро.

    Есть странные ребята, которые пытатся притащить в PHP всякое из других языков, так в нем появился и развиввается ООП.

    Но вам-то это зачем, если знаете C#?
    1) Изучайте ASP.NET MVC - там все четко, строго и объектно-ориентирвоанно.
    2) Прокачивайте свои навыки бизнес-коммуникаций (деловое пиьмо, публичные выступления, презентации) - и сможете продавать свои знания и навыки Клиентам, большинству из которых плевать на стек и входящие в него технологии, есть лишь бизнес задача, которую надо решить.
    3) Если захочется именно в PHP развиваться - напишите свой фреймворк, CMS на нем и продайте несколько проектов. После этого появится какое-то понимание дальнейших действий.

    p.s. Пример: я недавно делал генератор XLS прайс-листа для сайта на Джумле. Никого особо не смутило, что Джумлу я не знаю, ни как пользователь, ни как разработчик (хотя, я, конечно, предупредил об этом). Главное - решение бизнес-задачи.
    Ответ написан
    1 комментарий
  • Как имитировать действия браузера на PHP или Java(Jquery)?

    Stac
    @Stac
    Human Emulator.
    Платный.
    Работает на Windows сервере.
    Программируется на PHP (есть клиентская библиотека) или череp HTTP API.
    Ваш PHP-скрипт может выполняться совсем на другом сервере (на любой ОС).

    Т.е. вы из своего скрипта удаленно управляете удаленным же браузером.
    Ответ написан
  • Web-разработка. Уровень погружения в язык программирования: PHP vs JavaScript. Где "глубже"?

    Stac
    @Stac
    Самое смешное, что знания чистого PHP вам скорее всего хватит, учитывая ваше знание JS.

    Нужно принимать запросы, читать данные из файлов или БД, писать туда же и отдавать HTML (или более интересный для вас JSON) в браузер.

    Дополнительно можете посмотреть т.н. микрофреймворки (slim,...) и что-то для работы с БД (redbean, notorm), хотя в PHP есть встроенный PDO, которого хватит для работы с mySQL и SQLITE.

    Имейте в виду, что SQL хотя и стандартизирован, реально отличается от СУБД к СУБД.

    И вообще, мало кто вам скажет, что чем меньше технологий используется в проекте, тем лучше.
    Ответ написан
  • В чем польза изучения PHP сегодня?

    Stac
    @Stac
    PHP идеален для начала:
    1) легко найти практическое применение, т.к все, кроме крупных компаний (которые, в основном и ругают PHP) используют именно его. Туда, где ругают PHP без 3-5 летнего практического опыта не возьмут.
    2) на PHP можно писать без ООП и зарабатывать, решая бизнес-задачи (ООП это жутко непонятная, граничащая с бредом, концепция пока нет реального опыта больших или командных проектов).

    Судя по вакансиям этого года, то кроме PHP стоит учить node.js. Он почему-то всем нужен. Про Python с Ruby уже кричат не так сильно.

    Из списка книг по Си стоит оставить только Кернигана и Ричи ибо классика и дает хорошее понимание, что и как происходит в этот мире.

    Но в PHP почти ничего из этого не понадобится (кроме синтаксиса и того самого хорошего понимания), т.к. PHP изначально это высокоуровневая обертка над Си библиотеками, задуманная специально, чтобы Си не был нужен со своими сложностями.

    p.s. Я проходил путь смены профессии 6 лет назад (тоже в 30) с менеджера по продажам.
    Ответ написан
    2 комментария
  • Стоит ли сегодня переплачивать за сайт на ruby? Или сэкономить на php?

    Stac
    @Stac
    Осторожно! Не традиционный взгляд на вопрос.

    Любой сайт работает по схеме "HTTP-запрос - HTTP-ответ".
    Какая технология будет отвечать на запросы в целом не очень важно, а если для конкретных запросов это станет важно, ее можно заменить.

    Нужно продумать, как будет работать приложение с т.з. бизнеса и с т.з пользователя.
    Получите, условно, кучу запросов (url'ов с параметрами) и ответов (экранов, страниц), сгруппированных по функциям или как-то еще.

    Затем ищите ответственных людей и даете им на проработку и реализацию те или иные части проекта.

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

    Что-то может обсчитывать Руби, другой функционал может быть сделан на PHP, потому что его можно сделать за 2 дня. Что-то вообще будет отдаваться как статика.

    Главное - это хороший проект (персонажи, сценарии, экраны, ТЗ) и люди на участках, будь это один человек или десять.
    Ответ написан
    Комментировать
  • Связка HTML/CSS + Python?

    Stac
    @Stac
    С PHP будет проще и быстрее найти работу. Но могут потребовать знания фреймворков и прочего, отчего "сразу отворачивает".

    С другой стороны, базовый язык прекрасен чуть более, чем полностью для написания простых бэк-ендов для своих JS-приложений.

    PHP очень распространен, а значит ваши приложения можно будет использовать везде. Можно будет зарабатывать на биржах фриланса - там полно всяких практических задач, а у заказчиков обычный виртуальный хостинг (где PHP есть 100%).
    Ответ написан
    Комментировать
  • Технологию или оптимальный способ реализации?

    Stac
    @Stac
    Если PHP, то это еще не значит, что MySQL. Ведь есть SQLITE.
    Хотя для описанной задачи СУБД вообще не нужна, хватит и текстового файла, возможно даже одного.

    Итак на сервере: PHP + тектовый файл. Его формат зависит от количества вашей техники и тех операций, которых с ней нужно учитывать.
    Варианты: INI-файл (удобно открыть в текстовом редакторе, поковырять), TSV (удобно открыть и поковырять, как в текстовом файле, так и в Excel), XML.
    Возможность ковырять файл в редакторе позволит не делать в первое время (или совсем) админку, а сосредоточиться только на интерфейсе для конечных пользователях.

    На клиенте: Twitter Bootstap (достаточно знать только HTML чтобы быстро сделать приличный интерфейс).

    Если хорошенько вложиться в проектирование (т.е. просто подумать), то реализацию можно сделать очень простой.

    У меня у самом почти так реализована система управления контактами для кол-центра.
    Ответ написан
    Комментировать