Ответы пользователя по тегу PHP
  • Почему не сохраняется JSON в БД?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Смотри ошибки в логах
    Проверяй содержимое переменных
    Проверь запрос руками из консоли или из пхпмайадмина
    Думай головой
    Ответ написан
    Комментировать
  • При выборе PHP фреймворка стоит ли обращать внимания на тесты скорости?

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

    1) Оно мегахреново переносится и очень криво становится на свежие системы. Корме того что половина гайдов по установке устарела, но все еще лежит на оф. сайте, гайды сообщества противоречат друг-другу, 90% из них не работает, а про некоторые дистрибутивы можете просто забыть, там они работать просто не будут.

    2) Оно все работает as is и хрен ты посмотришь как работает родная вьюшка/конторллер "внутри", а доки не сказать чтобы хорошо описаны, комьюнити слабенькое, многие вещи сделаны спорно, а поправить или что-то подкрутить дело неблагодарное.

    3) Теперь про самое интересное - скорость работы. Так вот, вся это мутотень про память и прочие плюшки на нормальном сервере не ощущается вообще, то есть переходя определенный предел мощности/вооруженности сервера скорость практически сравнялась с нативом (использовался ларавел и Уии на том же сервере, по замерам - плюс-минус то же по скорости, и чуть больше по памяти (центос, 64гб оперативы, 4 проца, нжинкс, пхп 7.2). Короче выгода была на ветке пхп 5.+, сейчас его актуальность практически равна нулю.

    4) В моем случае по приходу сервер регулярно падал при "серьезной" нагрузке (20-30рпс), в чем я изначально предположил вину старых модулей фалкона, но по факту оказалось что 99% нагрузки вносили ожидания запросов к бд, некоторые из которых были по 7-15 минут, а некоторые куски кода создавали по 80+ запросов с 1 страницы, просто дозапрашивая какие-то данные для вьюшки в цикле. Предыдущий "кудесник" кормил руководство отмазками типа - "мало памяти, железо слабое, все плохо, а то бы летало...". "Магия плохого железа" закончилась после оптимизации запросов и доведения самых тяжелых до 0,5 секунды, а так же выборки всех данных в 1-2 запроса с нормальными джоинами.

    5) Основной вопрос всегда сводится к жадности - взять что-то побыстрее из софта, сэкономив на хостинге/оборудовании. И оно всегда не работает так, по ряду факторов, которые достаточно очевидны.
    Ответ написан
    5 комментариев
  • Почему preg_match неправильно срабатывает?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во первых надо задать ангриди флаг, во вторых если нужно все - используйте preg_match_all
    https://regex101.com/r/XSYjmy/2
    Ответ написан
  • RedBeanphp как преобразовать данные массива в число?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Это делается средствами того же редбина, ничего придумывать не нужно, просто надо читать документацию или хотя бы уметь в гугл запрос вбить.
    https://redbeanphp.com/index.php?p=/counting
    R::count()
    Ответ написан
    Комментировать
  • Как запретить локальное редактирование input значения перед отправкой формы?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Непреложная истина: Все что находится на/приходит с клиента может и будет изменено с целью взлома/вреда.

    Защищать что-либо на фронтэнде абсолютно нет смысла, все проверки делаются на сервере.

    Если открыть консоль браузера и в ручную изменить код инпута, к примеру на value=2222
    То и POST спокойно отправит это значение.
    Ваша задача проверить имеет ли клиент право на изменение объекта с данным значением. Остальное не особо важно, даже если он подставил это значение руками.
    Ответ написан
    Комментировать
  • Как реализовать отправку файлов через форму PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $("#Submitbtn2").on( "click", function(event) {

    меняете на
    $("#zakaz").on('submit', function(event) {
    ... 
    var mydata = $(this).serialize();
    $.ajax({
                type: "POST",
                dataType: "json",
                url: "forms/.request2.php",
                data: mydata,
                cache: false,
                contentType: false,
                processData: false,
    ...
    })

    где точками - код дополните, мне лениво...
    Ответ написан
  • Как обезопасить вход в админку?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    ravshan selimov,
    isAdmin из состояния редукс

    авторизацию проверяю на сервере,

    Хранить состояние пользователя в сессии, а не в редуксе, хотя дублировать в рдукс можно. При каждом запросе проверять сессию на текущее состояние залогиненного юзера, проверять имеет ли он право обращаться к нужному контроллеру/скрипту. Для более замороченного входа можно еще какой-то ключ прикрепить к админке, например /admin?key=666 и проверять наличие этого ключа, иначе посылать на 404.
    Ответ написан
  • Как запретить переход к файлу по прямой ссылке?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Роутинг + mod_rewrite.
    Ответ написан
    Комментировать
  • Как лучше реализовать проверку данных в классе-сущности?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Нужно формировать на уровне класса OrderList метод, реализующий выборку с джоином по 2 таблицам, соответственно если правильно сформировать запрос, то в результатах будут только заказы с существующими юзерами.
    Ответ написан
    5 комментариев
  • Почему скрипт не создаёт файл изображения в папке image при парсинге с сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    С сайта вы тяните урл картинки из img src, в котором, кроме собственно названия картинки, есть путь (папка) до нее, и вы пытаетесь записать файл по пути, которого у вас на сервере нет. Соответственно будет ошибка.
    Ответ написан
    Комментировать
  • Как не танцевать на граблях с бубном делая CRM?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Наиболее затратное по времени выполнения это расчет остатков за весь период на указанную дату в разрезе по номенклатуре.

    1) Это ваше предположение или вы делали замеры производительности запросов и кода?
    2) Если производительность действительно проседает, то каким образом у вас происходит вычисление? SQL с агрегацией и каунтом?
    3) Сколько строк в таблицах выборки?
    4) Что показывает explain?
    5) Индексы?

    Если оптимизировать по выборкам не получается и все упирается в запрос, то можно конечно выводить суммы помесячно, а затем делать агрегацию по суммам + довыборку из неполных месяцев, но тут есть свои нюансы, помимо очевидного усложнения кода и денормализации, как минимум не всегда все обороты намертво приколочены к концу месяца и могут меняться задним числом, что тоже надо будет учитывать и пересчитывать итоги при внесении таких правок.

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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    а мне нужно отправить текст который просто в элементе
    Зависит от задачи, а то похоже что вы что-то обычное пытаетесь сделать через... не так.

    1) Яваскриптом: При субмите обходим нужные элементы, формируем из них нужные данные и отправляем на сервер (либо создаем налету инпут, либо отправляем аяксом, по сути одно и то же).
    2) Добавляем скрытые инпуты, дублирующие содержимое элементов. Тогда яваскрипт не нужен, все будет работать автоматически.
    Ответ написан
    Комментировать
  • Как правильно перебрать два массива таким образом, чтобы вывести их конкретные значения в одной строке?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    У вас во первых ошибки в коде, например первое использование mysqli_fetch_assoc($res); там не нужно, а во вторых - обычно так не делают, хранят в базе ссылки на полноразмерные фото, а тумбнэйлы хранять по папкам, например так:
    /images/1808525100/img_554585.jpg
    /images/1808525100/150x200/img_554585.jpg
    /images/1808525100/300x400/img_554585.jpg
    и так далее если нужно. И просто пишут путь до нужного размера.
    Ответ написан
  • Не видит Сессии после обработки формы, как это решить?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    $_SESSION['id'] у вас повсеместно используется, но нигде не задается. Видимо вы не совсем понимаете как работают сессии.
    Ответ написан
    3 комментария
  • Получить ключ от массива?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    так как это не ключ от массива - то ответ должен быть - никак.
    Вообще это свойство объекта, лежащего в $array["file_reference"], но так как свойство приватное, получить его можно только через методы объекта, то есть что-то на подобии $array["file_reference"]->getBytes(), точнее - надо смотреть сам класс danog\MadelineProto\TL\Types\Bytes.
    Ответ написан
    Комментировать
  • Реализация правильной опции "запомнить меня" и завершение сеансов удаленно?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Насколько это безопасно?
    Нифига вообще не безопасно, тупо можно перебором всех "попробовать порулить". Большая такая дыра. Ну, пока не заметили - все ок, но кто-то обязательно заметит, 148%.

    И по поводу опции с запоминанием сессии, это как сделать безопасно?
    Уже написали, в принципе смысл - не хранить какие-то явно связывающие данные типа логина или айди в качестве ключа, а генерировать случайный хеш/ключ, который хранить на клиенте и на сервере.

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

    Но как быть, если сессия на клиенте просто пропадет?
    Сессия (внезапно) не может пропасть на клиенте, по тому как ее там никогда не бывает, бывает там только сессионная кука - ключ к сессии, которая (сессия) - на сервере, так что вопрос в данной формулировке смысла не имеет.
    Ответ написан
    2 комментария
  • Как передать значение элемента массива из дата-аттрибута дива?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Не ясно с какой целью это все туда фигачится, рискну предположить что json_encode будет как раз.
    Ответ написан
  • Почему не работает SQL запрос?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    пипец, ну почему всегда одно и то же...

    Создаете переменную (строковую) с вашим запросом. Выводите. Смотрите. Если сразу не понятно где накосячили - копируете и вставляете в пхпмайадмин ручками. Смотрите. Если все работает - проблема скорее всего в подключении, если нет - смотрим в чем ошибка.

    В любом случае проверяем логи или включаем вывод ошибок.
    Ответ написан
    Комментировать
  • Как переделать функционал скрипта под БД?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    селект вэа comment_id is null, потом получить из выборки урлы картинок и удалить их (картинки), естественно что урл надо заменить на серверные пути. Ну и затем делит вэа comment_id is null.
    Ответ написан
  • Почему не хочет вытаскивать данные ИЗ бд или не работает переменная?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1)
    WHERE `ID`={$_GET['id']}
    за такое в приличном обществе бьют клавой по кумполу, до полного просветления.
    2) есть важнейшая функция, которую почему то все новички игнорируют - var_dump(); 100% решает проблемы, главное - правильно и часто использовать.
    3) Если есть запрос и возникает проблема с его использованием - выводите запрос (как строку) и запускайте этот запрос "вручную", например через пхпмайадмин.
    4) Вангую что вывод ошибок и варнингов у вас выключен. Смотрите логи или включите вывод ошибок.
    Ответ написан
    1 комментарий