• Почему получаю xhr.status 0?

    @Merzley
    check_advertising.php

    Случаем, на Мозилле не стоит AdBlock?
    Ответ написан
  • Почему остаётся пункт "Используйте кеш браузера" в Google PageSpeed?

    @Merzley
    Гугл всё равно считает, что время кеша слишком маленькое. Не нашел информации о том, сколько времени и для каких типов файлов гугл считает нормой, поэтому попробуйте поставить не 24 часа, а, скажем, год. По идее должно помочь.

    UPD
    Да, 86400 сек == 24 часа
    Ответ написан
    1 комментарий
  • Как изменить стили css по условию php?

    @Merzley
    <?
    $arStatusCss = [
      1 => 'btn-fresh',
      2 => 'btn-hot'
    ];
    ?>
    
    <?php foreach ($products as $product): ?>
    <div class="<?=$arStatusCss[$product['status_id']]?>">
      <?=$product['related_id'];?>
    </div>
    <?php endforeach; ?>
    Ответ написан
    Комментировать
  • Какие элементы выпадающего списка видит пользователь?

    @Merzley
    Вся суть на самом деле сводится к вычислению координат текущего выделенного элемента списка и сравнению этого значения со значениями прокрутки контейнера.
    Накидал что-то похожее и постарался в комментариях объяснить что там происходит. https://jsfiddle.net/05dmtxz6/1/ Надеюсь, поможет.
    Ответ написан
  • Что не так с командой create function?

    @Merzley
    Во-первых, для типа VARCHAR обязательно указывать его длину. Например, VARCHAR(255).
    Во-вторых, раз вы создаете функцию, то в теле обязательно явно указывать операцию RETURN(). Т.е. весь ваш SELECT нужно обернуть в RETURN().
    В-третьих, функция не может возвращать несколько полей как результат. Функция всегда возвращает одно значение с типом, указанным с помощью RETURNS. Т.е. если вам надо возвратить все данные пользователя в виде отдельных полей, то функция не подходит, нужно создать представление. Если нужны все поля, но в виде одной строки, то все их надо добавить в CONCAT(). Если нужно вернуть только объединенное ФИО, то и SELECT к таблице здесь не нужен.
    Ответ написан
  • Laravel.Комманда php artisan migrate выдает ошибку?

    @Merzley
    Вероятнее всего как раз драйвер и не установлен. Проверьте, установлен ли пакет php-pdo-mysql.
    Ответ написан
  • Почему XDebug не видит, что в переменной, на точке останова?

    @Merzley
    Дело в том, что точка остановки это точка которая БУДЕТ выполнена, а не УЖЕ выполненная. Т.е. когда XDebug останавливается на строчке
    $arr = [0,1,2,3,4,5];
    это означает, что эта строчка только БУДЕТ выполнена. Соответственно, поскольку до этой строчки переменная $arr нигде не объявлена, то до выполнения это строчки переменной вообще не существует. Переменная создается во время выполнения этой строчки.

    UPD
    Если вопрос заключается в том, почему переменной не существует до выполнения строчки
    $arr = [0,1,2,3,4,5];
    то представьте гипотетическую ситуацию
    function TestFunction(){
        if ($_REQUEST['some_key'] == 1)
            return [1,2,3,4,5];
        else if ($_REQUEST['some_key'] == 2)
            return '12345';
        else if ($_REQUEST['some_key'] == 3)
            return 12345;
        //и т.д.
        else
            return null;
    }
    
    $arr = TestFunction();
    
    var_dump($arr);


    В этом случае в переменную $arr могут попасть кардинально разные значения, зависящие исключительно от того, что пришло в запросе. PHP не в состоянии предсказать, какой тип переменной создавать для $arr до того как выполниться функция TestFunction(). Именно поэтому в PHP переменные не существуют до первого присвоения. Это особенность любого языка с динамической типизацией.
    Ответ написан
    Комментировать
  • Как раскрывать блок по ссылке с хешем на другой странице?

    @Merzley
    Можно сделать так:

    Каждому элементу .acc-head добавить data-атрибут с необходимым хешем. Например, data-hash="#block1"

    В скрипт добавить код, который будет читать текущий хеш, пришедший в URL, а затем "кликать" по нужному элементу.
    //Ищем элемент
    var selector = '[data-hash="'+window.location.hash+'"]';
    var jqElement = $(selector);
    //Проверяем, нашли то что нужно, или нет
    if (jqElement.length === 1){
        //Если нашли - кликаем
        jqElement.click();
    }

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

    @Merzley
    Перенесите session_start() в начало файла. Дело в том, что до вызова session_start() переменной $_SESSION вообще не существует. Поэтому выполнение функции save_file() всегда выглядит так:
    • Пустая ли переменная $_SESSION['files'] - всегда да, т.к. переменной $_SESSION не существует
    • запускаем сессию - появляется переменная $_SESSION, в которой есть элемент ['files'], хранящий данные из прошлого запроса
    • очищаем элемент ['files'] - стирается всё, что приходило в прошлых запросах
    • помещаем туда данные текущего запроса

    При последующих запросах всё повторяется, поэтому и получается, что в сессии только одна запись сохраняется
    Ответ написан
    3 комментария
  • Как из input взять слова с помощью javascript?

    @Merzley
    //находим инпут
    let domInput = document.querySelector('селектор-который-найдет-нужный-инпут');
    //получаем строку, записанную в инпут
    let strInputText = domInput.value;
    //разбиваем строку на слова
    let arWords = strInputText.split(' ');
    
    //Сейчас в массиве arWords каждый элемент - отдельное слово из тех, что были в инпуте
    
    arWords.forEach(function (word) {
        alert(word);
    })
    Ответ написан
    Комментировать
  • Php + json как получить все id?

    @Merzley
    Попробуйте так:
    $url = file_get_contents ('https://newvideo.tv/api/category-list?api_key=[your_api_key]&cat=film');
    $decode_url = json_decode($url, true);
    
    foreach($decode_url['data'] as $id){
        $currentId = $id['kinopoisk_id'] ;
    
        $url2 = file_get_contents ('https://newvideo.tv/api/videos?api_key=[your_api_key]&kinopoisk_id='.$currentId);
        $decode_url2 = json_decode($url2, true);
    
        foreach($decode_url2['data'] as $full_info){
            echo $full_info['title_ru']; echo '<br>';
            echo $full_info['year']; echo '<br>';
            echo $full_info['poster']; echo '<br>';
            echo '<hr>';
        }
    }


    UPD
    Единственное, 9к запросов за дополнительной информацией могут занять достаточно продолжительное время. Для генерации страниц на лету такой вариант не подходит.

    UPD2
    Во втором запросе забыл поменять $id['kinopoisk_id'] на $currentId
    Ответ написан
    Комментировать
  • Почему этот кусок кода приводит к 500 ошибке на сайте?

    @Merzley
    В PHP имя переменной не может начинаться с цифры. Переименуйте переменную $2hour.
    Ответ написан
    3 комментария
  • Работа с selected в php где ошибка и как исправить?

    @Merzley
    Можно сделать так:
    В самом начале добавить массив (ID=>что-надо-подставлять) со всеми возможными вариантами

    $arDataSelectOptions = [
        1 => 'data-select-options="5,6,7,8,9,10"',
        5 => 'data-select-options="3,5,7"',
        10 => 'data-select-options="8,9,10"',
        ...
        'default' => 'data-select-options="1,2,3,4,5,6,7,8,9,10"'
    ];


    А затем строчку
    if($g['id'] == "1") { $usd = 'data-select-options="5,6,7,8,9,10"'; } else { $usd = 'data-select-options="1,2,3,4,5,6,7,8,9,10"'; }

    заменить на
    if(isset($arDataSelectOptions[intval($g['id'])]))
        $usd = $arDataSelectOptions[intval($g['id'])];
    else
        $usd = $arDataSelectOptions['default'];
    Ответ написан
    Комментировать
  • Notice: Array to string conversion, как исправить?

    @Merzley
    $bd=array($bd);
    В этой строчке переменная $bd становится массивом с одним элементом - тем, что раньше лежало в этой переменной.

    $result2 = json_decode(file_get_contents('https://api.vk.com/method/messages.getLongPollHist...'.$bd.'msgs_limit=200& ...

    А в этой строчке переменная $bd, которая сейчас является массивом, присоединяется к строке. Отсюда и предупреждение.
    Ответ написан
    Комментировать
  • Как сделатьотдельный php.ini для каждого проекта на Ubuntu?

    @Merzley
    Согласен с предыдущим ответом про докер. Но если хочется все-таки конфигами обойтись, то в Apache это делается достаточно просто. В nginx тоже, просто с ходу не напишу как. В общем, для Apache:
    Под каждый проект делается отдельный VirtualHost с отдельным конфигом в папке /etc/apache2/sites-available. И для каждого VirtualHost`a можно прописывать изменения стандартного конфига PHP. Эти изменения будут применяться только для запросов к этому VirtualHost`у.
    Вот что у меня было прописано для битрикса:
    php_admin_flag short_open_tag On
            php_admin_value opcache.revalidate_freq 0
            php_admin_value mbstring.func_overload 2
            php_admin_value mbstring.internal_encoding UTF-8
            php_admin_value max_input_vars 10000
            php_admin_value upload_max_filesize 5M

    Для изменения версии PHP достаточно отключить модуль Apache с одной версией, а с другой - подключить:
    sudo a2dismod php7.2 && sudo a2enmod php7.0
    Ответ написан
    Комментировать
  • Json, $jquery ajax Где найти документацию для даунов?

    @Merzley
    На самом деле все не так уж сложно.
    Что происходит при вводе URL в адресную строку в браузере? Если очень упрощенно, то:
    1. Браузер отправляет запрос по этому URL
    2. На сервере отрабатывает PHP и возвращает браузеру некую информацию (в большинстве случаев HTML)
    3. Браузер выводит эту информацию на экран.


    В случае с AJAX общая суть остается той же:
    1. JavaScript (вместо адресной строки) просит браузер сделать запрос по некоторому URL
    2. Браузер отправляет запрос по этому URL
    3. На сервере отрабатывает PHP и возвращает браузеру некую информацию
    4. Вместо того, чтобы выводить информацию на экран, браузер передает её JavaScript
    5. Всё, данные находятся под управлением скрипта. и мы можем с ними делать что угодно.


    В самом простом виде AJAX-запрос с использованием JQuery выглядит так:
    $.ajax({
            url: 'some url' //URL, по которому будет сделан запрос
        }).done(function(dataFromPHP){
            //Сюда мы попадаем, если запрос завершен успешно
            //Все что PHP должен был вывести в браузер при классическом обращении 
            //через адресную строку браузера (текст, HTML, всё что угодно), 
            //будет прочитано JavaScript-ом и помещено в переменную dataFromPHP.
            //Далее мы можем свободно работать с этими данными.
            //К примеру, показать их с помощью alert
            alert(dataFromPhp);
        }).fail(function(){
            //Сюда мы попадаем, если по каким-то причинам запрос прошел не успешно
            alert('Не удалось произвести запрос')
        });


    Я выложил пару простых примеров использования AJAX на github: https://github.com/Merzley/ajax-examples. Для запуска ничего кроме PHP не требуется. Если что-то будет не понятно - обращайтесь
    Ответ написан
    Комментировать
  • Как удалить повторяющиеся значения в двумерном массиве?

    @Merzley
    Можно сделать так:
    //$arr - изначальный массив
    
            $arExistsTest = [];
            //здесь используется ссылка (&), чтобы можно было удалять вложенный ключ напрямую
           //т.е. чтобы можно было сделать "unset($value['TEST'])", 
           //а не "unset($arr[$key]['TEST'])"
            foreach ($arr as &$value){
                $currentTestValue = $value['TEST'];
                if (isset($arExistsTest[$currentTestValue]))
                    unset($value['TEST']);
                else
                    $arExistsTest[$currentTestValue] = true;
            }
    
            //На данном этапе из массива $arr были удалены 
            //все повторяющиеся значения "TEST",
            //встретившиеся второй раз и далее
    Ответ написан
  • Маркеры google map передвигаются при перемещений мышки, как это можно исправить?

    @Merzley
    У вас 2 раза создается объект "карта". В строке 149 (var mapOptions = ...) на самом деле создается объект не с опциями карты, а полностью готовая карта. Второй вызов new google.maps.Map(), да еще и с неадекватными опциями, как раз всё ломает.
    Исправленное будет выглядеть так:
    // store map locations list wrapper.
        var mapLocationsEl = $('.map-locations');
    
        // create a map object, and include the MapTypeId to add to the map type control.
        var map = new google.maps.Map(document.getElementById('map'), {
          center: {
            lat: 56.3010164,
            lng: 43.9399994
          },
          streetViewControl: 0,
          gestureHandling: 'cooperative',
          zoom: 12
        });
    
        // associate the styled map with the MapTypeId and set it to display.
        map.mapTypes.set('map_style', styledMap);
        map.setMapTypeId('map_style');
    Ответ написан
    2 комментария
  • Как правильно вывести данные из бд в массив?

    @Merzley
    Если коротко, то можно сделать так:
    $SQL = 'SELECT friend FROM `friends` WHERE id="'.$id.'" and value=1';
    $requestResult = mysqli_query($connection, $SQL) or die("Ошибка");
    $arFriends = [];
    while($resultRow = mysqli_fetch_row($requestResult)) {
        $arFriends[] = $resultRow[0];
    }
    echo $arFriends[0]; //Должно вывести 1
    echo $arFriends[1]; //Должно вывести 2
    // и.т.д
    Ответ написан
    1 комментарий