• Как лучше хранить константы в классе?

    New_Horizons
    @New_Horizons
    Бред:
    А чего бы енам встроенный в пхп не искользовать?

    https://www.php.net/manual/ru/language.types.enume...
    https://www.php.net/manual/ru/language.enumeration...
    Ответ написан
    Комментировать
  • Почему PHP так сравнивает строку и число?

    @Sleep
    Так происходит, т.к. вы используете операторы нестрогого сравнения, это означает, что перед сравнением php будет пытаться привести параметры к одному типу.
    Используйте строгое сравнение (===) и будет вам счастье
    Ответ написан
    4 комментария
  • Как скрыть пароль в php-коде?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Пароль нужно выносить из кода в отдельный файл конфигурации. Dotenv, например.
    Такой файл добавляется в .gitignore, не коммитится в общую кодовую базу и каждый разработчик будет наполнять его своими (или общими) данными. Ваш личный пароль не попадёт в чужие руки.
    Ответ написан
    31 комментарий
  • Как сделать чтобы этот код работал и правильно ли я вообще действую?

    @rPman
    Чтобы на вкладке response в devtools было json-представление, но чтобы на самой странице клиента(фронтенд) не было никакого json-а
    так не получится, браузеры не умеют json автоматически преобразовывать к пользовательскому виду.

    p.s. Если бы вместо json тебе подошел бы xml (тоже инструмент передачи структурированных данных) то можно было бы воспользоваться шаблоном xslt (их поддерживают все браузеры, стандарт старый), пример (кстати в доке ошибка, правильно - в браузере открывают xml файл, который преобразуется с помощью xslt в нормальный html, но в консоли будет только xml)

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

    p.s. есть еще base64 кодирование файла в самой ссылке, в консоли он тоже не отобразится но не уверен что тебе подойдет это, к тому же на сколько я помню браузеры в последние лет пять сломали этот механизм именно для стартовой страницы, проведи эксперименты если прямо надо

    Пример ссылки:
    data:text/html;charset=utf-8;base64,PHNjcmlwdD5hbGVydCgnaGknKTs8L3NjcmlwdD4=
    как видишь хабр такие ссылки режет, так как иначе это огромная дыра в безопасности (украсть куки можно)
    Ответ написан
    4 комментария
  • Как ввести переменную в цикл без предварительного назначения в PHP 8?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Это не глупо, это правильно! Это защищает от некорректного поведения, и даже взлома!

    И за использование неопределённых переменных нужно бить линейкой по рукам, что бы быстрее вырабатывался рефлекс инициализации.
    Ответ написан
    34 комментария
  • Как выбирать действие в зависимости от типа объекта?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Какая нафиг стратегия?
    Создать, отменить и зафиксировать – это не три разные стратегии! Это три разных действия. Вам маршрутизатор нужен, вероятно.
    Ответ написан
    1 комментарий
  • Как оставить в массиве элементы только соответвующие признаку?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    $data = json_decode($json, true);
    
    $result = array_filter(
        $data,
        function ($value) use ($params) {
            if(isset($params["payment"]) && !in_array($params["payment"], $value['payment_methods'])) {
                return false;
            }
    
            if(isset($params["reviews"]) && $params["reviews"] > $value['reviews']) {
                return false;
            }
    
            if(isset($params["amount"]) && $params["amount"] > $value['seller_buyer_limit_max']) {
                return false;
            }
    
            //Код для остальных фильтров если надо
    
            return true;
        }
    );


    Анонимную функцию можно вынести в переменную или отдавать какой то другой функцией. Например:

    function binanceFilterFn($params) {
        return function($value) use ($params) {
             if(isset($params["payment"]) && !in_array($params["payment"], $value['payment_methods'])) {
                return false;
            }
            //...
        }
    }
    
    $result = array_filter($data, binanceFilterFn($params));
    Ответ написан
    Комментировать
  • Как вставить кусок кода php без ошибки?

    ev_g
    @ev_g
    Web dev.
    Тебе нужно либо закрывать двойные кавычки, добавлять строку и открывать, либо взять переменную в {}.

    Пример 1:
    return "<span class=\"text-muted\">Show:</span> <select class=\"border form-control-sm text-muted\" onchange=\"window.location='" . $_SERVER['PHP_SELF'] . "?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>";


    Пример 2:
    return "<span class=\"text-muted\">Show:</span> <select class=\"border form-control-sm text-muted\" onchange=\"window.location='{$_SERVER['PHP_SELF']}?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>";


    Если нужно вставить вызов функции то только разрывать строку:

    return "<span class=\"text-muted\">" . myvalidate($LANG['g_00055']) . "</span> <select class=\"border form-control-sm text-muted\" onchange=\"window.location='" . $_SERVER['PHP_SELF'] . "?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>";


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

    Awilum
    @Awilum
    Частный разработчик, ментор и преподаватель курсов
    Реально
    Ответ написан
    Комментировать
  • Почему при prepare и execute ошибка?

    New_Horizons
    @New_Horizons
    Бред:
    Fatal error: Uncaught Error: Call to a member function fetchAll() on bool

    Куда уж понятнее)
    Ответ написан
  • Как объединить запись в базу?

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

    Во вторых - даже если такая беда приключилась - что мешает проверять наличие файлов в разделе добавления текстовых полей, перед инсертом?

    Ну и в третьих - какие-то проверки неплохо бы сделать перед вставкой, if (isset($_POST["name"])) это вообще смешно, я туда могу пробел вставить, или просто прислать пустое значение, как и в описание кстати... про сплошные дыры через инжекции вообще молчу, никаких проверок, про подготовленные выражения тоже никто никогда не слышал...
    Ответ написан
    Комментировать
  • Когда выполняется __destruct?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Может до, может после

    Данные серверу (пользователю) можно отправить через fast_cgi_finish_request, но приложение продолжит работать — очевидно объекты продолжат существовать столько, сколько нужно и удалены (если пришёл gc, а на объект никто не ссылается)

    Кроме того у вас может быть демон, который вообще не работает с веб-сервером… очевидно что объекты будут существовать без связи с клиентом

    В общем случае (классич работа приложения) после того как закончится выполнение — fpm прибьёт ваш процесс и объекты соотвественно — и будет вызван деструктор

    Вы можете и сами инициализировать деструктор через удаленние объекта через unset

    В режиме, когда пхп-скрипт работает достаточно долго (или в cli режиме или после finish request) — gc может прийти за брошенными объектами сам и вызвать деструкторы

    Почитать:

    https://abhishekjakhotiya.medium.com/php-fpm-shutd...

    https://www.php.net/manual/ru/features.gc.performa...
    https://developpaper.com/garbage-collection-mechan...

    gc = garbage collector = сборщик мусора
    Ответ написан
    Комментировать
  • Как исправить ошибку Uncaught Error: Call to a member function fetch_assoc()?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вылезла такая ошибка после переноса сайта:
    1) Первое что надо проверить - правильность данных для подключения на новом хостинге.
    2) Далее,
    <?php
    $conn = mysqli_connect("localhost", "root", "pass", "table");
    if ($conn === false) {
      die("Ошибка: " . mysqli_connect_error());
    } 
    mysqli_close($conn);
    ?>

    Если это полный код, и он как-то относится к коду в вопросе, то во первых $conn и $link - что-то одно неверно названо или используется, во вторых mysqli_close($conn); закрывает только что открытое соединение, и тогда вопрос - какой упоротый пингвин это писал?

    3) После require_once 'connect.php'; сделайте var_dump($link ); exit();, будет понятно установилось ли соединение, хотя по уму конечно же надо переписать подключение нормально. Ну и проверить какую переменную вы на самом деле должны использовать - $conn или $link ...
    Ответ написан
    Комментировать
  • Как запретить напрямую обращаться к скриптам?

    @galliard
    Делаешь папку src и public, в public кладешь index.php, а все остальное в src.
    В конфигурации сервера в качестве папки, где лежит сайт, указываешь папку public.

    Из файла index.php подключаешь все файлы как __DIR__ . '/../src/нужныйфайk.php'.
    Ответ написан
    Комментировать
  • Как в php задать одну переменную из нескольких?

    @entermix
    // PHP 7.4+
     $first = current(array_filter(array($c1, $c2, $c3, $c4), fn($value) => !is_null($value) && $value !== '')));
    Ответ написан
    3 комментария
  • Как отнять в php одно время от другого, если изначально значения времени являются строками?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    print DateTime::createFromFormat('H:i', '15:00')
        ->diff(DateTime::createFromFormat('H:i', '14:30'))
        ->format('%H:%i');
    // 00:30
    Ответ написан
    Комментировать
  • Как вывести в переменную данные из file_get_contents?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ошибка в использовании регулярок вместо нормального разбора XML, например через SimpleXML.
    В регулярке потенциальная ошибка в жадности. Если будет несколько записей product_name, то у вас выберутся все.
    Ну и вы берёте $product_name[0], а там лежит полное совпадение с регуляркой. Найденная подстрока находится в $product_name[1].
    Ответ написан
    1 комментарий
  • Как прибавить к текущей дате дни?

    @Akela_wolf
    Extreme Programmer
    Во-первых, никогда, не собирайте SQL-запрос по кускам с помощью конкатенации строк. Это очень, очень, ОЧЕНЬ, плохой способ, за который тысячи разработчиков поплатились взломом сайтов через SQL-injection. Используйте параметры запроса.

    Во-вторых, у вас в запросе ошибка: INSERT и SET не могут использоваться совместно.

    В-третьих, проще всего воспользоваться функцией DATE_ADD, передавая ей количество дней как параметр, например так:
    $pdo->prepare("INSERT INTO `order`(user_id, date, date_end) VALUES(:userId, :date, DATE_ADD(:date, INTERVAL :days DAY))")
    	->execute(["userId" => 100,
    			   "date" => date("Y-m-d"),
    			   "days" => 10
    			  ]);


    Полный пример

    Обратите внимание: phpize.online предоставляет объект $pdo. Вам в вашем коде придется его инициализировать вручную, либо понять как использовать параметры вместе с тем объектом $db, который у вас есть. Если это Laravel - то он тоже умеет аналогичным образом подставлять параметры.
    Ответ написан
    4 комментария
  • Как правильно сделать запрос ajax на javascript?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    На сколько правильное решение сформировалось в голове,
    Достаточно стандартное решение

    и как правильно отправить запрос ajax именно на ванильном js?
    XMLHttpRequest или fetch, по сути разницы нет, единственно надо учесть что данные через фетч по умолчанию попадут в php://input, а не в $_POST, либо нужно формировать запрос с формДата в качестве отсылаемой структуры данных.

    получается можно и без бекенда решить задачу?
    Нет. Не понятно откуда такой вывод...
    Ответ написан
    4 комментария