• Как сравнить 2 массива?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    UPD в соответствии с комментариями

    Самое простое, "решение в лоб"

    function getExcluded(array $users, array $emails): array
    {
        foreach ($users as $key => $user) {
            if (isset($emails[$user['email']])) {
                unset($emails[$user['email']]);
                unset($users[$key]);
                break;
            }
        }
    
        return [
            'emails' => $emails,
            'users' => $users,
        ];
    }


    Единственное, могут быть коллизии если в массиве users будут несколько массивов с одинаковым email
    При необходимости можно генераторы заюзать https://www.php.net/manual/ru/language.generators....
    Ответ написан
    8 комментариев
  • Как можно отследить изменение файлов в директории?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    В общем на PHP есть вот такой вариант https://habr.com/ru/articles/213895/
    Если не обязательно PHP то есть вот такое https://github.com/SpartanJ/efsw

    Если файлы таки меняются посредством http запросов, то просто делаешь класс слушателя и в нужных API методах дергаешь событие. Для Laravel https://laravel.com/docs/11.x/events, если на чистом PHP, то вызываешь в API метод который положит, нужные для обработки изменений, данные в очередь (например на редисе) и рядом делаешь демон, который из очереди будет вычитывать и что-то с этим делать
    Ответ написан
  • Выполняются оба метода из двух разных форм. Как исправить?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    попробуй поменять button type="submit" на button type="button" и повесить событие не на $('#form-import').submit а на $('#button-import').click

    перед этим можешь сразу проверить верстку на странице через инструменты разарботчика, что у тебя эти 2 формы действительно вписываются как 2 разные формы, а не херится верстка
    Ответ написан
    Комментировать
  • Laravel Request - как работает?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Потому что у тебя в request1 и в request2 лежит индекс одного и того же объекта https://www.php.net/manual/ru/language.oop5.refere...
    Ответ написан
    24 комментария
  • Как исправить ошибку Missing required parameter?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет!

    Вместо index.blade.php лучше бы ты предоставил как указан маршрут в web.php (f.e.) и не весь файл, а только один этот маршрут. Точно так же и с контроллером, все остальные методы кроме update можно было бы убрать.

    В ошибке сказано
    URI: admin_panel/services/{service} Missing parameter: service


    Я вижу несколько возможных причин:
    1
    action="{{ route('services.update', $services['id']) }}"
    указан не на той форме, которая отправляется (надо проверить html форму прежде чем нажать сабмит, если это так то надо привести отправляемую форму в порядок)
    2 в
    action="{{ route('services.update', $services['id']) }}"
    не всегда был
    $services['id']
    , а после добавления его в шаблон на фронте страница не обновлялась или закеширована (надо проверить html формы прежде чем нажать сабмит, если это так, то надо обновить страницу и проверить html формы еще раз, если в поле action все еще не подставлен айдишник, то надо выполнить php artisan view:clear на сервере и обновить страницу на фронте, если не помогает, то надо проверить, что измененный шаблон подкинут на сервер, а не лежит чисто локально
    3 таблица services не имеет primary key на id (надо выполнить миграцию, которая это добавит), можешь дополнить вопрос миграцией для создания таблицы services
    4 $services['id'] имеет значение null (надо дебажить и смотреть почему туда попадает такое значение, скорее всего оно будет таким потому что нужно поменять на $services->id но это не точно)
    Ответ написан
    5 комментариев
  • Как отследить прямое обращение к картинкам и выполнять php?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Если я правильно понял, то нужно, чтобы файлы отдавал nginx напрямую, а после этого нужно чтобы вызывался пхп код. Можно попробовать покопать в сторону post_action, эта директива позволяет выполнить дополнительные действия после того, как Nginx отдает ответ клиенту.

    Например что-то типо такого:
    server {
        //
    
        location ~* \.(jpg|jpeg|png|gif)$ {
            try_files $uri =404;
            post_action /post_handler.php;
        }
    }
    Ответ написан
    Комментировать
  • Почему при нажатии на кнопку слайдера картинка пропадает js?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет!

    Коммент выше решает твою проблему, а я с оффтопным моментом. Как-то странно что при движении влево переменная увеличивается, а при движении вправо уменьшается :D я бы поменял
    upBtn.addEventListener("click", () => {
      let index = cardIndex + 1;
      if (index >= cards.length) {
        index = 0;
      }
      show(index);
    });
    
    downBtn.addEventListener("click", () => { 
      let index = cardIndex - 1;
      if (index < 0) {
        index = cards.length - 1;
      }
      show(index);
    });
    Ответ написан
    1 комментарий
  • В чем ошибка в коде?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет, ознакомься с документацией

    https://laravel.com/docs/11.x/routing#dependency-i...

    И попробуй внести правки в свой код в соответствии с докой

    use Illuminate\Http\Request;
    
    Route::post('/contact/submit', function (Request $request) {
        return $request->all();
    })->name('contact-form');
    Ответ написан
    1 комментарий
  • Почему не работает POST-запрос от React(+Redux) к PHP?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Undefined array key "perem" on line 49


    $perem = $data['perem'];
    - вот тут у тебя нет в массиве data (а это переданный массив POST) нужной переменной.

    Пропиши
    var_dump($data);
    exit;

    перед
    $perem = $data['perem'];
    например и посмотри что там в принципе лежит (если будешь дергать из браузера то надо смотреть в разделе network response)

    UPD
    Не обратил внимание сразу, с фронта уходит

    Content-type: application/json


    PHP не умеет обрабатывать такое через суперглобальную переменную $_POST
    Поменяй либо получение данных с

    addTableNote($conn, $_POST);

    на
    $data = json_decode(file_get_contents('php://input'), true);
    addTableNote($conn, $data);


    либо с фронта отправляй как FormData
    Ответ написан
    2 комментария
  • Есть ли способ запустить vite/vue приложение без сервера?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    чтобы его можно было просматривать без сервера и без npm run preview

    Да, можно

    в vue.config.js нужно чтобы было
    module.exports = defineConfig({
      transpileDependencies: true,
      outputDir: "./pathToSource",
      filenameHashing: false,
    })


    выполнить npm run build
    в index.html прописать линки до js/css в pathToSource

    запустить vite/vue приложение без сервера

    Локально да, на проде все равно будет использоваться сервер, в твоем случае сервер вк видимо, но это частный случай
    а в общем случае, даже если не нужна никакая логика на бэке, то для этого все равно понадобится как минимум настроеный apache/nginx
    Ответ написан
    Комментировать
  • Как преобразовать UNION-запрос в простой?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Наркомания, но должно работать

    SELECT
        CASE 
            WHEN FirstField LIKE '*о*' THEN FirstField
            WHEN SecondField LIKE '*о*' THEN SecondField
        END AS Field
    FROM Table
    WHERE FirstField LIKE '*о*'
    OR SecondField LIKE '*о*';


    UPD
    Хорошо, продолжаем наркоманить :D

    С учетом комментария Vitsliputsli

    SELECT DISTINCT
        CASE 
            WHEN t1.FirstField  LIKE '*о*' THEN t1.FirstField
            WHEN t2.SecondField  LIKE '*о*' THEN t2.SecondField
        END AS Field
    
    FROM Table t1
    
    LEFT JOIN Table t2 ON 1=1
    
    WHERE t1.FirstField LIKE '*о*'
       OR t2.SecondField LIKE '*о*';


    Добавили distinct чтобы не было повторений, добавили join той же таблицы, по t1 проверяем подходит ли FirstField по t2 - SecondField. Единственный вопрос, а допустимо ли в этой задаче использовать join)

    PS разумеется запрос говна, про оптимизацию речи не идет
    Ответ написан
    1 комментарий
  • Как синхронизировать ТГ-канал и сайт?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Возможно ли

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

    Понимаю, возможно реализация платная

    Если вам нужна реализация, то формулируйте ТЗ и идите на фриланс
    Ответ написан
  • Почему может возникать mysql ошибка 2006, если timeout 28800?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Ещё пишут про буфер, однако у меня в данных SELECT * FROM joblist ORDER BY id DESC LIMIT 1, что не очень похоже на переполненный буфер.

    Это единственный запрос, который выполняется к этой базе?

    MySQL server has gone away - означает, что клиент потерял соединение с MySql сервером. Если есть другие запросы, которые сильно нагружают базу, то стоит попробовать увеличить буфер или настроить кластер или увеличить память. Если серьезной нагрузки нет, то стоит посмотреть в сторону смены сервера, на котором крутится mysql, на случай если проблема связана с сетью.

    Еще стоит глянуть что происходит в логах самого mysql, есть ли там что-то интересное.

    В качестве быстрого решения можно обернуть выполнение запроса в try catch, внутри catch пересоздать подключение и повторить попытку. Либо в catch делать запись например в файл что был фейл, завершать скрипт, а после перезапуска (например кроном) как-то это обрабатывать
    Ответ написан
  • Стоит ли работать в тех поддержке?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Стоит ли тратить время на развитие в IT с техподдержки?

    А почему нет? Эту работу тоже кто-то должен делать

    Есть ли там какое то карьерное развитие или это тупик?

    Разумеется, но лучше на 3 линию, да и в отделе поддержки тоже есть менеджмент, в который можно вырасти из специалиста

    или идти стажироваться тестировщиком/аналитиком вне компании

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

    Подытоживая. Если тебе совсем не нравится, то лучше уходи и доучивайся, если тебе норм, но хочется иметь в виду возможный рост в дальнейшем, то расти в поддержке есть куда, ди и путь в аналитику вполне не иллюзорен. Еще посоветую посматривать вакансии внутри компании и ходить собеседоваться на интересные тебе (хотя бы списываться с командами в которые открыта вакансия и пообщаться с ними)
    Ответ написан
    Комментировать
  • Почему unserialize возвращает пустое значение?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    "Тип гостиницы" 13 символов, а в сериализованной строке указано как 25


    Кириллица это мультибайтовые символы, там где у тебя русские буквы там будет занято 2 байта. Типгостиницы - 12 букв * 2 = 24 + 1 пробел = 25.

    Почему в админке эта же самая строка десереализуется?


    Если у тебя есть один и тот же код, который в разных окружениях работает по разному, то это значит, что либо
    1) код все-таки не одинаковый
    2) есть различия в настройках окружения (например php.ini, env, конфиги)

    unserialize(htmlspecialcharsback($value));


    Как тебе уже подсказали, если у тебя проблема решается через htmlspecialcharsback значит где-то до сериализации есть htmlspecialchars которого быть не должнопро который ты не рассказал в вопросе)
    Ответ написан
    Комментировать
  • Как сделать проверку на корректную вложенность в скобки ((([])){})?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    /**
     * @param {string} s
     * @return {boolean}
     */
    var isValid = function (s) {
        //hash function for partheses
        let map = { "}": "{", "]": "[", ")": "(" };
        let temp = [];
    
    
    
        //Iterates
        for(i in s){
            //if a index that matches a closing bracket - continue
            if(s[i] in map){
                //if the temp isn't empty, and the top of the stack is that closing bracket - pop it
                if(temp.length > 0 && temp[temp.length-1] === map[s[i]]){
                    temp.pop();
                }
                //else we break it - return false
                else{
                    return false;
                }
            }
            //else we push the opening bracket onto the stack
            else{
                temp.push(s[i]);
            }
        }
        //else we return true if the temp is empty
        return temp.length === 0;
    };


    Прямо в литкоде есть решения, можно открыть Solutions, отфильтровать по языку и читать с описанием, можно перейти к all submissions и выбрать самое быстрое решение.
    Ответ написан
    5 комментариев
  • Vue 3 Composition API как обратиться к функции через this.$refs?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Из дочернего объекта можно вызвать родительский через $emit.
    В родительском компоненте надо прописать
    <daughter-component
         @nextStep="nextStep"
    ></daughter-component>


    В дочернем компоненте
    valdiateStep(currentStepIndex){
        this.$emit('nextStep'); // если надо передать параметр то this.$emit('nextStep', param); 
    }


    Если компоненты не связаны как родитель-ребенок то есть смысл покопать в сторону vue event bus и Шина событий
    Ответ написан
    2 комментария
  • Как сделать коммуникацию front-end и back-end в реальном времени?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Попробуй покопать в эту сторону (запрос js stream data from backend)

    https://developer.mozilla.org/en-US/docs/Web/API/S...
    https://dev.to/bsorrentino/how-to-stream-data-over...
    Ответ написан
    Комментировать
  • Laravel всегда возвращает ответ 200?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Привет) Добавь

    use Illuminate\Http\Exceptions\HttpResponseException;
    use Illuminate\Contracts\Validation\Validator;


    и
    protected function failedValidation(Validator $validator)
        {
            throw new HttpResponseException(response()->json(
                [
                    'errors' => $validator->errors(),
                    'status' => true
                ],
                400
            ));
        }


    в StoreRequest
    Ответ написан
    8 комментариев