Ответы пользователя по тегу PHP
  • Почему файл заполнен?

    @alexalexes
    Две гипотезы.
    1. Ваш код генерирует "нулевой" результат, поэтому записывается null значение.
    Попробуйте искусственно записать null значение в буфер, без реальных данных.
    2. Код генерирует слишком большой результат, не влезает в оперативную память выполнения скрипта (переполнение возникает именно на выполнении minify_html). Как ошибка записывается null значение.
    Попробуйте уменьшить значение выделенной оперативной памяти так, чтобы хватало для работы кода, но не хватало на выполнение minify_html, понаблюдайте через memory_get_usage, как на каждом этапе используется память.
    Ответ написан
  • Имеет ли смысл разбирать чужие сложные скрипты для самообучения?

    @alexalexes
    Обзорно и структурно нужно понимать, как выглядит компонент, который подключаешь.
    А вот когда вы нарветесь на баг, или захотите чуть-чуть изменить функционал, которого нет в документации к компоненту, то сами захотите докопаться до того метода в компоненте, который его реализует, или создадите аналогичные по структуре методы, чтобы не портить стиль реализации этого компонента.
    Ответ написан
    Комментировать
  • Вычисления datetime if()?

    @alexalexes
    Если нужно в php сравнивать даты, то из базы отдельным полем приводите любую дату в формат YmdHis и можете сравнивать значения как строки:
    if($date < date('YmdHis'))
    {
    }

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

    @alexalexes
    Поставьте проверку реферера на той странице, где хотите закрыть.
    Ответ написан
    Комментировать
  • Как сделать правильно группировку под группами из базы?

    @alexalexes
    То, что вы хотите получить можно сделать таким запросом:
    select S.*,
         (select S1.location from services S1 where S1.main = S.main and (S1.list is null or S1.list = '')) head_index
    from services S
    order by head_index, S.list is null or S.list = '' desc, S.location is null or S.location = '' desc, S.location

    А потом вывести таким скриптом:
    $sql = "select S.*,
         (select S1.location from services S1 where S1.main = S.main and (S1.list is null or S1.list = '')) head_index
    from services S
    order by head_index, S.list is null or S.list = '' desc, S.location is null or S.location = '' desc, S.location";
    $res = mysqli_query($conn, $sql);
    $cat_index = 0;
    while($row = msqli_fetch_assoc($res))
    {
      if(is_null($row['list']))
      {
        if($cat_index > 0)
          echo '</ul>';  // закрытие списка
        echo '<p>'.$row['main'].'</p><ul>'; // название категории, начало списка
        $cat_index++; // считаем категорию, чтобы правильно закрывать списковые теги
      }
      else
      {
        echo '<li>'.$row['list'].'</li>';
      }
    }
    if($cat_index > 0)
      echo '</ul>'; // закрытие списка

    А вообще, многоуровневые списки делаются по-другому.
    Ответ написан
  • При отправке данных из js через fetch, php код не исполняется, в чем причина?

    @alexalexes
    В message.php:
    var_dump(date('d.m.Y H:i:s'));
    var_dump($_POST);
    exit();

    Посмотрите, меняется ли время и содержание поста. Если один раз, а потом не меняется, то копайте заголовки кеша для браузера.
    Ответ написан
    Комментировать
  • Как правильно работать с большим массивом: создавать новый или перезаписывать элементы старого?

    @alexalexes
    Выгоднее всего положить в базу данных, которая специализируется на ключ-значении данных, типа redis или memcached и там делать манипуляции - они на этом специализируются.
    Если с массивом работать напрямую, то выгоднее изменять существующий массив, в изменяющие функции передавать массив по ссылке, следить, чтобы методы при изменении массива не создавали новый массив, а работали с существующим.
    Будут провалы производительности у границ количества элементов кратные степени двойки (ссылка). Это плата за высокоуровневые фишки в виде ресайза массива, чего нет на низком уровне реализации интерпретатора PHP.
    Ответ написан
    5 комментариев
  • Какую кодировку выбрать для бд чтобы хранить фото?

    @alexalexes
    В базе данных, обычно, не хранят бинарные данные файлов.
    Кладете на файловый сервер файл, берете путь к этому файлу и записываете в поле таблицы.
    Если очень приспичило какой-то бинарник положить в поле таблицы, то для этого есть binary/varbinary type.
    Но злоупотреблять возможностью записывать безразмерные данные в одно поле не стоит - намучаетесь с бекапами.
    Ответ написан
    Комментировать
  • Как настроить кнопку удаления из бд?

    @alexalexes
    при желании ее удалять

    Скорее очищать данные работы программы. Вряд ли вы держите исходный код программы в таблицах БД, чтобы потом ее удалять.
    Не вполне понятно, как называются таблицы, которые вы хотите очищать (сами таблицы как объекты БД останутся, удалится только их содержимое). Но по вашему фрагменту можно что-то работающее при посте action=delete написать так:
    if(isset($_POST['action']) && $_POST['action'] == 'delete') // есть action и он равен delete
    {
        $link = mysqli_connect($host, $user, $password, $database);
        $sql = "DELETE FROM `program_day_1`"; // по одной инструкции удаления на каждую таблицу
        $res = mysqli_query($link, $sql);
        $sql = "DELETE FROM `program_day_2`";
        $res = mysqli_query($link, $sql);
        mysqli_close($link);
        header('location: program-admin.php');
    }
    Ответ написан
  • Как в текст из базы данных вставить шаблон?

    @alexalexes
    Если слайдер находится всегда в определенном месте статьи или есть фиксированные варианты расположения,
    то нужно доработать редактор статей, чтобы к статье можно было прикрепить список изображений (у одного элемента изображения должен быть путь к файлу, поле описания, порядковый номер в слайдере) как связанный ресурс статьи и генерировать слайдер автоматически по наличию этого ресурса (у самого ресурса слайдера должно быть свойство расположения слайдера - если есть варианты).
    Ответ написан
    1 комментарий
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    @alexalexes
    $str = 'Привет 2019 Мир!'; // написано в той кодировке, в которой сохранен файл (хрустальный шар говорит, что utf-8)
    $str = mb_convert_encoding( $str, 'windows-1251', mb_detect_encoding( $str ) ); // конвертируем в cp1251
    header('Content-Type: text/html; charset=windows-1251'); // Откуда трабла с кодировкой? - не соответствие сообщаемой кодировки в http-заголовке от сервера, с выводимым контентом от сервера. Исправляется явным указанием заголовка
    var_dump( $str ); // выводим в той кодировке, что выводит заголовок charset сервера в браузер (хрустальный шар говорит, что до указания header() было charset=utf-8)
    Ответ написан
    2 комментария
  • Почему не отправляется сообщение через curl когда при вставке итогового запроса в браузер - всё работает?

    @alexalexes
    1) Включить вывод ошибок php на любую непонятную ситуацию:
    // в начале php файла указывается
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

    2) Смотрите, что возвращает curl, и по ошибкам тоже:
    $result = curl_exec($ch);
    if($result === false)
    {
        echo 'Ошибка curl: ' . curl_error($ch);
    }
    else
    {
        var_dump($result);
    }

    3) Не светите данными авторизации в своих вопросах, особенно, всякими токенами доступа.
    ПС: curl_error.
    Ответ написан
  • Как взять каждое значение массива mysqli_fetch_array и занести каждое значение в строку таблицы mySQL?

    @alexalexes
    У вас:
    while($row=mysqli_fetch_array($res))
    {  
        // #########################
        // ####  начало тела цикла  #####
        // ##########################
        $iduser=$id;
        $idkat=$row['idkat'];
         // #########################
        // ####  конец тела цикла  #####
        // ########################## 
    }  
        $res=mysqli_prepare($bd, "INSERT INTO zakaz (iduser,idkat) 
     VALUES(?,?)");
     mysqli_stmt_bind_param($res, 'ii', $iduser,$idkat); // подставляем переменные, которые присвоились на ПОСЛЕДНЕМ прогоне цикла
     $result2=mysqli_stmt_execute($res);

    Как вы ожидаете:
    while($row=mysqli_fetch_array($res))
    {  
        // #########################
        // ####  начало тела цикла  #####
        // ##########################
        $iduser=$id;
        $idkat=$row['idkat'];
        $res2=mysqli_prepare($bd, "INSERT INTO zakaz (iduser,idkat) 
     VALUES(?,?)");
     mysqli_stmt_bind_param($res2, 'ii', $iduser,$idkat); // подставляем переменные, которые присвоились на ТЕКУЩЕМ прогоне цикла
     $result2=mysqli_stmt_execute($res2);
         // #########################
        // ####  конец тела цикла  #####
        // ########################## 
    }

    PS: Есть нюанс. Обработку второго запроса нужно вести по отдельному дескриптору $res2, чтобы не поломать дескриптор $res, по которому работает while.
    Ответ написан
    Комментировать
  • Делал форму обратной связи, вроде написал все правильно, но выводит ошибку заполните все поля, хотя все заполнил. Как быть?

    @alexalexes
    <form action="send.php">
    ...
    </form>

    Вы не указали метод отправки POST, соответственно, ваши переменные формы нужно искать в методе GET.
    <form action="send.php" method="POST">
    ...
    </form>

    Чтобы убедиться в этом:
    echo "GET:";
    var_dump($_GET);
    echo "POST:";
    var_dump($_POST);
    exit();
    Ответ написан
    Комментировать
  • Как решить проблему PDOStatement::execute(): SQLSTATE[HY093]?

    @alexalexes
    Если вы вставляете в запрос список числовых параметров, то можно провернуть такое.
    $product_list = [30, 32, 38];
    $query = " `productId` in (".join(', ', array_map(function($item){return int $item;}, $product_list)).")";
    $sql = "SELECT * FROM `products` WHERE ".$query;
    // Должен получиться запрос:
    // SELECT * FROM `products` WHERE `productId` in (30, 32, 38)
    // array_map тут нужен для принудительного перевода всех значений в числовой вид, обеспечив тем самым экранирование.
    $query = $db->query($sql);
    $products_data = $query->fetchAll(\PDO::FETCH_ASSOC);

    Если применять нормальную связку параметров PDO, как должны учить в учебниках:
    $product_list = [30, 32, 38];
    $in_params = [];
    for($i = 0; $i < count($product_list), $i++)
      $in_params[':productId'.$i] = $product_list[$i];
    // получили массив: $in_params = [':productId0' => 30, ':productId1' => 32, ':productId0' => 38];
    $placeholder_string = join(', ', array_keys($in_params));
    // получили строку $placeholder_string = ":productId0, :productId1, :productId2";
    $sql = "SELECT * FROM `products` WHERE `productId` in (".$placeholder_string.")";
    // Должен получиться запрос:
    // SELECT * FROM `products` WHERE `productId` in (:productId0, :productId1, :productId2)
    $query = $db->prepare($sql);
    $query->execute($in_params); // in_params в точности в таком формате, который нужен для связки параметров productId
    $products_data = $query->fetchAll(\PDO::FETCH_ASSOC);
    Ответ написан
  • Как обработать Hex код, чтобы создать pdf файл?

    @alexalexes
    Скорее всего так:
    $content = hex2bin(str_replace(" ","", "25 50 44 46 2D 31 2E 35 0D 0A 25 B5 B5 B5 B5 0D 0A 31 20 30 20 6F 62 6A 0D 0A 3C 3C 2F 54 79 70 65 2F 43 61 74 61 6C 6F 67 2F 50 61 67 65 73 20 32 20 30 20 52 2F 4C 61 6E 67 28 72 75 2D 52 55 29 20 2F 53 74 72 75 63 74 54 72 65 65 52 6F 6F 74 20 32 32 20 30 20 52 2F 4D 61 72 6B 49 6E 66 6F 3C 3C 2F 4D 61 72 6B 65 64 20 74 72 75 65 3E 3E 3E 3E 0D 0A 65 6E 64 6F 62 6A 0D 0A 32 20 30 20 6F 62 6A 0D 0A 3C 3C 2F 54 79 70 65 2F 50 61 67 65 73 2F 43 6F 75 6E 74 20 31 2F 4B 69 64 73 5B 20 33 20 30 20 52 5D 20 3E 3E 0D 0A 65 6E 64 6F 62 6A 0D 0A 33 20 30 20 6F 62 6A 0D 0A 3C 3C 2F 54 79 70 65 2F 50 61 67 65 2F 50 61 72 65 6E 74 20 32 20 30 20 52 2F 52 65 73 6F 75 72 63 65 73 3C 3C 2F 45 78 74 47 53 74 61 74 65 3C 3C 2F 47 53 35 20 35 20 30 20 52 2F 47 53 36 20 36 20"));
    // если записать в каталог сервера, то так:
    file_put_contents("file.pdf", $content);
    // если отдать контент браузеру, то так:
    header("Content-type:application/pdf");
    header("Content-Disposition:inline;filename='file.pdf");
    echo $content;
    Ответ написан
    1 комментарий
  • Есть ли смысл делать псевдо SPA на PHP?

    @alexalexes
    Гасить стандартное действие можно у ссылок, но это не освобождает от формирования url в ссылках.
    Параметры в ссылках нужно указывать такие, чтобы оно восстанавливало состояние страницы, если попытаться перейти по ней, а псевдо переход по ссылке менял адрес страницы без фактической перезагрузки (добавлял запись в историю url).
    Ответ написан
    1 комментарий
  • Как локализовать дату регистрации пользователя wordpress?

    @alexalexes
    Тут жестко задан формат:
    echo $datetime->format('F j, Y');
    Если хотите указать более общий вид, то задайте "d.m.Y".
    Ответ написан
  • Как решать эту проблему GD?

    @alexalexes
    ЧатГПТ может сколько угодно предлагать решения на основе GD, но одних только функций GD недостаточно для определения, что на рисунке есть что-то круглое.
    Предложенное решение прокатит, если фоновая область будет идеально одного оттенка без полутонов, чтобы чувствительности заливки фона хватило пометить его как прозрачный (что метод и предлагает).
    Ответ написан
    2 комментария