• Почему плохо писать код в шаблонах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну вот сломалась у тебя база данных. Ошибку выдаёт. Что будешь делать? Пол-шаблона то уже вывелось.

    Вообще хороший вопрос, в чем-то показательный.
    Новички все поголовно мыслят позитивными сценариями, причем линейными. Запросил - получил - вывел.
    И только с опытом приходит понимание, что на этапе запросил могут возникнуть проблемы. что на этапе "получил" из бд вылезто то, то что надо было вывести в заголовке страницы. Как этот фарш теперь провернуть назад? Что этап "вывел" тоже не так прост - иногда надо вообще ничего не выводить, а сделать редирект к примеру.

    Именно поэтому вывод начинается только после того, как вся логика отработала и все данные получены.
    Ответ написан
  • Почему возвращает ошибку?

    @karminski
    Senior React.JS Developer
    Говоря просто - ютуб вас забанил, вы превысили квоту запросов к нему.
    Ответ написан
    3 комментария
  • Этот код сильно ужасен)?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    После include "bitrix.php"; да. Ужасен. Не глядя.
    Ответ написан
    2 комментария
  • Нужно ли делать кеширование запросов и как?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я думаю здесь подмена понятий. Автор пишет "кэширует ли БД запросы", а имеет в виду "может ли в принципе эта страшная и непонятная громадина которая называется базой данных в принципе хоть когда-нибудь рабтотать быстро?"
    Все, разумеется, кидаются отвечать на первый вопрос.
    А на самом деле надо отвечать на второй. Да, почти всегда БД работает гораздо быстрее чем ты можешь вообразить и ничего кэшировать не нужно. Если вдруг стало работать медленно... впрочем, об этом ниже.

    Нужно ли делать кеширование запросов
    Вот в такой формулировке, взятой с потолка, "а не закэшировать ли мне запросы к базе данных*" - Нет, не нужно.

    и как?
    Очень просто.
    Три простых шага:
    1. Понять, устраивает ли тебя производительность приложения. Если устраивает, то все оставить как есть.
    2. Если не устраивает, освоить профайлинг. Если это слово не упоминается в вопросе про производительность или кэширование, то вопрос можно сразу удалять. потому что он заведомо взят с потолка и не имеет смысла. По сути, профайлинг - это замер скорости выполнения отдельных участков кода для поиска узких мест - т.е. таких участков кода, которые тормозят всю программу. Это можно делать и вручную, и с помощью различных готовых инструментов. Только по результатам профайлинга, который показал конкретную причину тормозов, то самое узкое место (его еще называют bottleneck, "бутылочное горлышко"), можно приступать к оптимизации. Не кэшированию!
    3. Если профайлинг показал, что проблема в конкретном запросе к БД, приступаем к его оптимизации. Чаще всего достаточно добавить индекс или донастроить сервер.
    4. Только если все другие способы не помогли - занимаемся кэшированием. Но перед этим сначала решаем Вторую Важнейшую Проблему Информационных Технологий - инвалидации кэша. Поскольку закэшировать - это ерунда, каждый дурак сможет. Самая главная проблема не в том, как данные положить в кэш, а как и когда их оттуда удалять.
    Ответ написан
    Комментировать
  • Хорошо ли хранить serialize в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ни в коем случае.
    Твоя база данных не зря названа реляционной, то есть связанной. Информация хранится в связанных между собой таблицах. Это позволяет получать нужную информацию одним запростом и обрабатывать миллионы срок без потери производительности. Что в миллион раз важнее лени "создавать дополнительную таблицу"

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

    Сериализованные данные стоит хранить в бд только в очень крайнем случае.
    На данном этапе вообще забудь про такую возможность и учись работать с БД правильно.
    Ответ написан
    9 комментариев
  • Правильное экранирование кавычек для CSV?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше использовать fputcsv и не пытаться сделать хитрее, чем уже придумали умные люди.
    Ответ написан
    Комментировать
  • Возможно ли в php закомментить кавычку с помощью решётки(#)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    И если так возможно сделать, тогда как убрать символ коммента из php?

    НИКАК
    Надо не символы убирать, а запросы нормально писать, чтобы ниакие символы не мешали.

    Я же тебе давал ссылку, где написано, что делать. А ты опять всякую дурь читаешь.
    Ответ написан
    2 комментария
  • Если вставлять фрагменты php кода в html разметку - плохо, то что тогда хорошо?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В любом утверждении важно понимать контекст.
    А также учитывать, что 95% говорящих вообще не понимают, что говорят.

    Речь идет о том, что перемешивать логику приложения и логику отображения - плохо.
    Но если чисто для логики отображения, то пхп применять при выводе хтмл можно.

    Если у тебя при запросе в БД тут же вываливается хтмл - это так и есть, извращение.
    Если ты, как аккуратный пионер, сначала получил все данные, а потом приинклюдил файл шаблона, в котором пхп занимается только выводом полученных раньше данных - то сделал все правильно и со временем освоишь работу с настоящими шаблонизаторами.
    phpfaq.ru/tech/tpl
    Ответ написан
    Комментировать
  • Почему 31 февраля переводится в 3 марта?

    DevMan
    @DevMan
    используйте DateTime::getLastErrors() для проверки.
    как пример: https://ideone.com/ddxW1J
    Ответ написан
    Комментировать
  • Я разучился понимать работу кода?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Самый простой способ отловить этот баг - это добавить в error_log:
    1. Длину $some_var (скорее всего, этого будет достаточно)
    2. Код каждого символа. (Здесь и раскроется парадокс). Должно быть: 109 97 103 105 99

    Гипотетический вариант решения
    $some_var = trim($some_var);
    Ответ написан
    3 комментария
  • Как сдклать так чтобы мне каждую секунду прибавлялся баланс в базу и обновлялся на сайте каждую секунду?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Надо хорошенько запомнить то время, когда не было ничего, ноль на счете, ни шекеля в кармане.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $last = pathinfo ('web.pages.page', PATHINFO_EXTENSION);
    Ответ написан
    Комментировать
  • Как это чище записать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Специально для любителей заменять array_key_exists на isset
    isset() не возвращает TRUE для ключей массива, указывающих на NULL, а array_key_exists() возвращает.


    Линчно я бы не стал ничего менять. Код читается, выполняет свою функцию. Можно извратиться, и сделать цикл, или использовать неподходящую функцию. Вопрос - ЗАЧЕМ.

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

    Работает - ничего не трогай. Не на версисаж код пишешь
    Ответ написан
    3 комментария
  • Как отсортировать массив за цифрами?

    Stalker_RED
    @Stalker_RED
    У функции sort есть флаги сортировки.
    sort($data, SORT_NATURAL);

    Демка: ideone.com/34siec
    Ответ написан
    Комментировать
  • Какие принципы SOLID здесь нарушены?

    @vgbege
    сразу бросается в глаза O+I я бы сказал
    представь, что после нужно будет считать площадь только маленьких фигур (area < 3) или добавится интерфейс с текстурой и нужно будет считать только пушистые.

    не, формально принцип O пока еще не нарушен, и класс Box можно расширять, добавляя в потомках getTotalAreaSmall и getTotalAreaFluffy. но Box уже сейчас выглядит не просто как Box (который просто хранит фигуры), а как BoxThatCountsColored, а его потомки будут называться BoxThatCountsColoredAndSmallAndFluffy например :)
    Ответ написан
    4 комментария
  • Как передать ошибку пользователю из класса?

    php666
    @php666
    PHP-макака
    при использовании механизма исключений никаких return не должно быть
    отучайтесь мыслить функциями и их возможностями
    Ответ написан
    3 комментария
  • Как работает функция построения дерева?

    судя по распечатке массива, где-то ошибка: функция предполагает, что в неё передаётся хэш ( то есть массив, у которого ключи - значимы), а у вас приведён список ( ключи не несут информации ).
    Может, поэтому и непонятен результат работы функции. $arr должен быть таким:
    $arr = [685 => [
        'id' => 685,
        'title' => 'Комплектующие к Apple',
        'parent' => 0
      ],
      691 => [
        'id' => 691,
        'title' => 'Запчасти к iPad',
        'parent' => 685
      ],
      692 => [
        'id' => 692,
        'title' => 'Запчатси к iPhone',
        'parent' => 681
      ]
    ];

    Плюс в последнем элементе подозрительное значение у ключа parent ( больше подходит 685 ).
    Ответ написан
    Комментировать
  • Как сделать неодинаковое количество записей в двух столбцах mysql?

    @zhaar
    Фигня такой подход - появится еще одна мадам, придется переделывать структуру таблицы?
    Делаешь 2 таблицы - users и messages
    users
    id, name

    messages
    userid, msgid, message

    и работаешь с ними через джойны.
    Ответ написан
    Комментировать
  • Как реализовать подобную пагинацию на php?

    DevMan
    @DevMan
    сделать можно, без особых проблем. но при этом вы напрочь убьёте часть юзеров. это вам надо?
    Ответ написан
    1 комментарий