• Как решить ошибку с Warning: count(): Parameter must be an array or an object that implements Countable in ....?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Эту ошибку возвращает count когда в него передается null. До версии php 7.2 вернет 0, а с версии php 7.2 будет описанная ошибка.

    Исправить можно, вот так
    $products = $this->getProductList();
    if ($products) {


    а лучше так
    $products = $this->getProductList();
    if (is_iterable($products)) {


    а еще лучше вот так
    $products = $this->getProductList();
    if (is_countable($products)) {

    но для этого варианта нужен или php 7.3 или полифил который можно найти в комментариях к описанию функции https://www.php.net/manual/ru/function.is-countable.php
    Ответ написан
    1 комментарий
  • Почему WordPress через некоторое время выполнения PHP скрипта дает 404?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Это не проблема WP. Это ограничение или веб-сервера или времени выполнения скрипта (гугли set_time_limit). Запускай парсер через cron, напрямую, без участия веб-сервера и увеличенным временем выполнения скрипта.
    Ответ написан
    Комментировать
  • Как проверить повторы в бд и не вносить запись при их нахождении?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Почитай про конструкцию: INSERT IGNORE ..

    $stmt = mysqli_prepare($link, "INSERT IGNORE INTO Users (a1, a2, a3, s1, s2) VALUES (?, ?, ?, ?, ?)");
    mysqli_stmt_bind_param($stmt, 'sssss', $a1, $a2, $a3, $s1, $s2);
    
    foreach($json['object'] as $item) {
      $a1 = $item['a1'];
      $a2 = $item['a2'];
      $a3 = $item['a3'];
      $s1 = $item['s1'];
      $s2 = $item['s2'];
      mysqli_stmt_execute($stmt);
    }
      mysqli_stmt_close($stmt);
      mysqli_close($link);
    Ответ написан
  • Архитектура БД и сортировка?

    orlov0562
    @orlov0562
    I'm cool!
    Штука в чем - насколько неправильно и награможденно выглядит база для решения моей задачи? Что убрать, а что добавить?

    Выглядит все нормально. Особенно если это все работает. Т.к. сделать структуру в бд это пол проблемы, нужно её еще наполнять и делать по ней выборки.

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


    1) Похоже, что ты изобретаешь паттерн EAV. Советую погуглить как его используют в связке с БД.

    2) Я не уверен, но могу предположить, что у тебя могут возникнуть проблемы на большом кол-ве товаров и составных фильтрах. Поэтому советую подумать какой реальный объем записей у тебя будет +/-. И сгенерировать это кол-во данных в базе. И тестить твое решение на нем.
    Ответ написан
    Комментировать
  • Есть ли разница в вариантах записи?

    orlov0562
    @orlov0562
    I'm cool!
    В MySQL вот такой приоритет операций: https://dev.mysql.com/doc/refman/8.0/en/operator-p...
    -- высший приоритет
    INTERVAL
    BINARY, COLLATE
    !
    - (unary minus), ~ (unary bit inversion)
    ^
    *, /, DIV, %, MOD
    -, +
    <<, >>
    &
    |
    = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
    BETWEEN, CASE, WHEN, THEN, ELSE
    NOT
    AND, &&
    XOR
    OR, ||
    = (assignment), :=
    -- низший приоритет


    скобки, позволяют его изменить
    mysql> SELECT 1+2*3;
            -> 7
    mysql> SELECT (1+2)*3;
            -> 9


    все тоже самое в твоем примере:
    `act_dt` > (NOW() - INTERVAL 30 DAY)
    `act_dt` > NOW() - INTERVAL 30 DAY

    разницы не будет, тк вычитание приоритетнее сравнения

    (`act_dt` BETWEEN '12.12.2019' AND '15.15.2019') AND valid='on' 
    `act_dt` BETWEEN '12.12.2019' AND '15.15.2019' AND valid='on'

    разницы не будет, т.к. BETWEEN приоритетнее AND, однако в этом примере, если в коде используется именно SQL я бы оставил скобки, чтобы визуально отделить BETWEEN
    Ответ написан
  • Как удалить из TXT файла, строчки где нет символа "@" используя PHP?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Для решения твоей задачи, тебе необходимо считать файл в переменную. Сделать это можно разными способами, но наиболее уместные тут, это: file и file_get_contents.

    Далее в случае с file_get_contents тебе надо или использовать регулярные выражения, для замены строк с помощью функции preg_replace и модификатором m в регулярном выражении, тем самым выполнить первую часть твоей задачи. Либо разбить полученный текст на строки с помощью функции explode по символу перевода строки. В результате получишь массив строк.

    В случае когда у тебя есть массив строк, тебе надо пройтись по нему и проанализировать строки на предмет вхождения подстроки. Заводишь новый массив, куда будешь складывать строки. Итерация делается с помощью for, foreach или while. Поиск подстрок делается с помощью функции strpos или mb_strpos. Соответственно если нет символа @, добавляешь строки в новый массив, если нет, то нет.

    Для того, чтобы убрать повторение строк, используй эту же строку в качестве ключа ассоциативного массива. Так же можно использовать функцию array_unique после того, как будет сделана первая часть задачи.

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

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет,
    я делал такие вычисления с помощью imagettfbbox
    Ответ написан
    Комментировать
  • Как сделать такую же верстку на bootstrap (скрин в описании)?

    orlov0562
    @orlov0562
    I'm cool!
    Ответ написан
    Комментировать
  • Почему не подключается БД к сайту laravel в docker?

    orlov0562
    @orlov0562
    I'm cool!
    похоже у тебя порт DB другой в env

    в docker-compose
    ports:
            - "8082:3306"

    а в env
    DB_PORT=8183
    Ответ написан
  • Можно ли хранить SQL запрос в переменной сессии PHP?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Хранить в сессии SQL запрос вполне безопасно.

    Обычно так не делают, потому что генерация запроса занимает ничтожно малое время в сравнении с выборкой данных. Для оптимизации, лучше оптимизировать запросы, и при возможности использовать кеширование результатов запроса или контента сформированного на основе этих результатов. Кеш запросов конфигурируется в настройках сервера баз данных. Кеш на стороне бекенда, может быть как кеш результатов запросов к бд, так и кеш контента который будет на основе этих результатов сгенерирован, для этого отлично подойдет Redis и Varnish.

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

    orlov0562
    @orlov0562
    I'm cool!
    Привет, ты не написал стек технологий которые собираешься использовать.

    Если, предположить, что ты имеешь ввиду только фронтенд, то ответ: никак.

    Если ты имеешь ввиду, что пользователь запустит некоторый процесс и не дождавшись его завершения закроет окно, то тебе надо гуглить про то как бэкэнд обрабатывает такие ситуации. Например в PHP: ignore_user_abort и fastcgi_finish_request

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

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    У меня указанный код отрабатывает так, как и ожидается, данные отправляет POST запросом.

    советую проверить, Function.php на наличие ошибок
    на время дебага закомментировать location.href = 'Vyzi.php'; или заменить на alert/console.log
    и добавить error коллбек, по аналогии с success

    так же попробуй открыть консоль разработчика в браузере (F12), перейди на вкладку Network и посмотри что отправляется и что возвращается в ответ
    Ответ написан
    Комментировать
  • Как изменить цвет ссылок при наведении курсора на данном сайте?

    orlov0562
    @orlov0562
    I'm cool!
    В момент hover-а, у тебя к li добавляется класс open, раскраска происходит через него, в этом правиле

    /wp-content/themes/certify/css/theme-menu.css?ver=5.2
    63 строка

    .navbar-overlapped .navbar-nav > .open > a, 
    .navbar-overlapped .navbar-nav > .open > a:hover, 
    .navbar-overlapped .navbar-nav > .open > a:focus {
        color: red;
    }
    Ответ написан
    Комментировать
  • Как вывести массив foreach в обратном порядке?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    у array_reverse есть второй параметр отвечающий за сохранение порядка ключей
    <?php
    $go = ['test1','test2','test3'];
    print_r(array_reverse($go, true));

    выведет
    Array ( [2] => test3 [1] => test2 [0] => test1 )

    более правильное решение если массив именно такой как ты указал, т.е. не ассоциативный
    <?php
    $go = ['test1','test2','test3'];
    
    for ($i=count($go)-1; $i>=0; $i--) {
         echo $i.' => '.$go[$i].'<br>';
    }

    выведет
    2 => test3
    1 => test2
    0 => test1
    Ответ написан
    Комментировать
  • Php сформировать массив?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    <?php
    $arr = [
     8=>array (
        'id' => '9',
        'master_theme' => 'Безопасность',
        'theme' => 'Светофоры',
      ),
      9 =>
      array (
        'id' => '10',
        'master_theme' => 'Безопасность',
        'theme' => 'Экологическая полиция',
      ),
      10 =>
      array (
        'id' => '11',
        'master_theme' => 'Благоустройство',
        'theme' => 'Благоустройство ВДНХ',
      ),
      11 =>
      array (
        'id' => '12',
        'master_theme' => 'Благоустройство',
        'theme' => 'Благоустройство водоёмов',
      ),
    ];
    
    $res = [];
    
    foreach($arr as $item) $res[$item['master_theme']][] = $item['theme'];
    
    echo '<pre>';
    print_r($res);
    echo '</pre>';


    результат

    Array
    (
        [Безопасность] => Array
            (
                [0] => Светофоры
                [1] => Экологическая полиция
            )
    
        [Благоустройство] => Array
            (
                [0] => Благоустройство ВДНХ
                [1] => Благоустройство водоёмов
            )
    
    )
    Ответ написан
    Комментировать
  • Почему после подключения RedBeanPHP перестают работать js?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет.

    RedBeanPHP сам по себе не может влиять на js. Всего скорее, у тебя происходит какая-то ошибка и в конечный html добавляется какой-то код (сообщение об ошибке, или трейс ошибки), который и ломает все.

    Открой конечный код html (Ctrl+U в браузере) и посмотри что выводится в месте подключения redbean. Предполагаю, что там ошибка или код обрывается, это и приводит к проблеме.
    Ответ написан
    Комментировать
  • В каких случаях стоит использовать redbeanphp?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет,

    RedBeanPHP - это ORM которая отличается от всех своих собратьев тем, что может на лету создавать и менять схему базы данных в режиме разработчика. В остальном это обычная ORM-ка, которых сейчас целая куча.

    В 95% фреймворков встроены собственные ORM-ки которые и надо использовать. В остальных 5% можно использовать все что угодно, хоть голый mysqli, хоть PDO, хоть ReadBeanPHP, главное чтобы тебе было комфортно. Я, например, когда надо что-то накидать "на коленке" использую Idiorm или Paris, удобнее чем PDO напрямую, покрывает 99% потребностей, легко читается, легко переписывается на что-то другое.
    Ответ написан
    Комментировать
  • Как через curl передать дополнительные параметры следующего вида?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    Привет

    Я думаю ты ищешь функцию http_build_query

    $url = 'https://site.com/?'
              .http_build_query([
                  'queryString' => [
                      ['name'=>'date', 'value'=>'2019-05-10'],
                      ['name'=>'showAll', 'value'=>true],
                  ],
    ]);
    echo $url;


    если перейти по такому url в $_GET окажется

    Array
    (
        [queryString] => Array
            (
                [0] => Array
                    (
                        [name] => date
                        [value] => 2019-05-10
                    )
                [1] => Array
                    (
                        [name] => showAll
                        [value] => 1
                    )
            )
    )
    Ответ написан
    1 комментарий
  • Как отправлять заголовок и url страницы в форме обратной связи?

    orlov0562
    @orlov0562 Куратор тега PHP
    I'm cool!
    можно добавить в форму любые скрытые поля используя html тег input с типом hidden
    <input type="hidden" name="url" value="тут-url-страницы">
    <input type="hidden" name="form-title" value="тут-название-формы">

    сами поля можно либо заранее заполнить через php, либо отлавливать event у формы "on submit" через js и заполнять их перед отправкой формы
    Ответ написан
    Комментировать
  • Стоит ли пытаться на данном этапе проходить собеседования?

    orlov0562
    @orlov0562
    I'm cool!
    Ответ "стоит"! И можно не ждать 18 лет, зимы или выборов. Готовь резюме. Ищи вакансии и подавайся везде где только сможешь. Всего скорее, первые собеседования будут неудачные, но с ними ты поймешь свои пробелы и сможешь подтянуть знания. Если не остановишься, то через месяц/два будешь с какой-никакой, а работой. Всего скорее первая работа будет в какой-нибудь зачуханой студии и от тебя будут требовать всего подряд, но это даже хорошо. Еще через пол-года, год повторишь поиски, когда станешь более опытным. Пока, советую перейти в режим поглощения навыков связанных с желаемой позицией и направить всю энергию именно на их развитие. Хорошее место и деньги, придут со временем. В общем, не жди у моря погоды, начинай ходить на собеседования, по ходу дела разберешься что именно нужно подтянуть, кто нужен на рынке, стоит ли тебе искать первую работы js-разрабом или пока может начать с верстки под wordpress и т.д..
    Ответ написан
    Комментировать