• Как решить проблему с открытием второго окна?

    lssssssssssl
    @lssssssssssl
    Напишите полный url вместо "/product". Например, window.open("https://www.google.com/product", "_blank")
    Ответ написан
    Комментировать
  • Каким образом можно перебрать массив в строке для поиска в IN?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Вы можете попробовать использовать JSON_CONTAINS следующим образом
    SELECT * 
    FROM table_1 T1 
    LEFT JOIN table_2 T2 ON JSON_CONTAINS(
        array_id, 
        CAST(T2.`id` AS JSON), 
        '$'
      );


    MySQL JSON_CONTAINS
    Ответ написан
    Комментировать
  • Каким образом можно перебрать массив в строке для поиска в IN?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Найти того гения, который придумал так хранить данные, и дать ему хорошенько по голове, чтобы он на всю жизнь запомнил, что так делать нельзя
    2. Сделать нормальную базу данных, где эти идентификаторы хранятся в таблице-связке
    3. Выполнить простейший стандартный SQL запрос.
    Ответ написан
    2 комментария
  • Почему выдает ошибку 1442?

    @Akina
    Сетевой и системный админ, SQL-программист.
    CREATE DEFINER=root@localhost
    TRIGGER bi_trigger_in_employees
    BEFORE INSERT ON employees 
    FOR EACH ROW 
    SET NEW.entpr_name = COALESCE( NEW.entpr_name, 
                                   ( SELECT ap_name 
                                     FROM companies 
                                     WHERE id = NEW.entpr_id 
                                     LIMIT 1
                                    )
                                  ),
        NEW.employee_name = COALESCE( NEW.employee_name, 
                                      ( SELECT CONCAT_WS(' ',np_surname,np_name,np_patronymic) 
                                        FROM people 
                                        WHERE id = NEW.employee_id
                                        LIMIT 1
                                       )
                                     );

    1) Суть ошибки - именно та, что написана в сообщении. Нельзя UPDATE таблицы, на которой определён триггер (и другие DML - тоже нельзя).
    2) Изменять вставляемые значения надо до вставки, а не после. Потому BEFORE триггер.
    3) По-хорошему, нужен ещё аналогичный BEFORE UPDATE триггер.
    4) Все SET выполняются в одном операторе (см. https://dev.mysql.com/doc/refman/8.0/en/set-variab...). А триггер из одного оператора обходится и без BEGIN-END, и без DELIMITER.
    5) При скалярном присвоении из подзапроса ВСЕГДА добавляйте LIMIT 1. А по-хорошему ещё и ORDER BY. На показанный код ни то, ни другое не влияет - всё равно одна запись, ибо отбор по PK. Но вдруг структура поменяется, а про триггер забудете? Начнутся ошибки - оно надо?

    тогда да, ошибка на бесконечный цикл. Но тут почему?

    Как это ни странно, но в теле триггера неизвестно, на какое событие определён триггер.
    Ответ написан
    1 комментарий
  • Как работает сессия в express?

    ArturAralin
    @ArturAralin
    Программист, Музыкант
    express-session отслеживает сессию через cookie. Возможно, вы не отправляете cookie, которые ранее получили от сервера и поэтому получаете каждый раз новую сессию.
    Ответ написан
    Комментировать
  • Как устранить ошибку socket io + nginx?

    SagePtr
    @SagePtr
    Еда - это святое
    const https = require('https');
    proxy_pass http://socket_call;
    Несовпадение
    Ответ написан
    Комментировать
  • Как в тригерах указать запись по событию UPDATE и при переменной равной 0?

    @Fomichevap
    SET @exec = SELECT execut FROM serv;
    IF @exec = 0 THEN
       INSERT INTO `trigger_serv` SET id = NEW.id;
    END IF
    Ответ написан
    Комментировать
  • Как реализовать бред заказчика?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Заказчику нужно чтобы было коробочное решение для установки его клиентам. Соответственно нужно понять как конечные клиенты могут это у себя разворачивать и сделать соответствующий сборщик под их потребности. Все. Задача не типовая, но не супер сложная
    Ответ написан
    5 комментариев
  • Как реализовать бред заказчика?

    vabka
    @vabka
    Токсичный шарпист
    Кажется, я понял, что вам нужно.

    1. Выделяете некоторые ядро сервиса, без которого он в принципе не может работать.
    2. Остальной код режете на независимые куски, которые можно будет динамически подключить при запуске - плагины. (То, что заказчик назвал классами)
    3. Пишете инструкцию по развёртыванию и автоматические скрипты / dockerfile / whatever

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

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

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Все стандартно. Во первых защищаетесь лицензией. Да это те люди которые юристы :)
    Второе это в модуль обновления встраиваете проверку.
    Третье ваше приложение должно быть что то типа 1с, гаранта или антивируса. То есть отключение от обновлений делает его тыквой
    Ответ написан
    Комментировать
  • Как реализовать продажу серверного приложения?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Допустим есть какое-то серверное приложение, которое желательно устанавливать локально на сервер.
    Краткий ответ - никак, но есть вариант.

    Почему?
    1. Мало кто будет ставить себе на сервер неизвестно что и платить за это деньги.
    2. Любой функционал, написанный одним разработчиком, может быть легко скопирован любыми другими разработчиками с помощью разработки того же функционала с "нуля".
    3. Если в вашем приложении вычисления и работа с данными, то лучше это делать SaaS-сервисом.
    4. Если данные нужно обрабатывать только у клиента приложения (в его серверной) в локальном режиме, то создаёте микро-модуль обработки данных (в котором "зашиты" нужные для обработки формулы и алгоритмы) с доступом к нему по ключу через локальный API-интерфейс (ВАЖНО: сам модуль - никогда не выходит в сеть!), полученному через ваш SaaS-сервис, и который будет продляться/обновляться через тот же SaaS-сервис (это как раз тот вариант...).
    Ответ написан
    Комментировать
  • Как передавать в запросе большой список данных постранично?

    @dooMoob
    1) Пагинация с помощью limit offset
    2) Пагинация с помощью cursor
    Ответ написан
    Комментировать
  • Как передавать в запросе большой список данных постранично?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Это называется paging
    Передаёшь серверу номер страницы page - номер страницы и количество элементов на странице.
    Сервер формирует ответ и возвращает клиенту
    Ответ написан
    3 комментария
  • Как расшифровать JWT токен?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JWT состоит из трёх частей, разделённых точками. Первая часть - заголовок, вторая - полезная нагрузка (payload), третья часть - подпись. Подпись представляет из себя шифрованный по ключу хэш от первых двух частей.

    При выдаче токена сервер генерирует заголовок и полезную нагрузку, записывает их в JSON и кодирует в модифицированный BASE64. Получается две строки. Эти строки объединяются через точку и от полученной общей строки вычисляется подпись. Конкретный алгоритм вычисления указан в заголовке. Далее подпись через точку присоединяется к строке и получается полный токен.

    При получении запроса с токеном сервер разделяет токен на части, распаковывает заголовок и находит алгоритм подписи. Затем он вычисляет контрольную подпись от первых двух частей токена и сравнивает её с полученной в токене. Если они совпадают, то токен признаётся правильным.

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

    Stalker_RED
    @Stalker_RED
    Токен состоит из трех частей разделенных точкой. Каждая часть кодируется немного модифицированным base64.
    Первые две раскодируются вообще без ключа. В конце подпись, кодированная ключом. В вашем примере это
    your-256-bit-secret (попробуйте там справа, где синенькое напечатать другой ключ и смотрите как меняется токен).

    <?php
    $key = 'your-256-bit-secret'; // ваш ключ
    $jwtToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
    $jwtArr = array_combine(['header', 'payload', 'signature'], explode('.', $jwtToken));
    
    var_export($jwtArr); /* -> разделяем по точкам
    array (
      'header' => 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
      'payload' => 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ',
      'signature' => 'SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c',
    ) */
    
    echo PHP_EOL . base64_decode($jwtArr['header']) . PHP_EOL; // декодированный заголовок
    // -> {"alg":"HS256","typ":"JWT"}
    echo base64_decode($jwtArr['payload']) . PHP_EOL; // декодированная нагрузка
    // -> {"sub":"1234567890","name":"John Doe","iat":1516239022}
    
    $calculatedHash = hash_hmac( // сами считаем хеш
    	'sha256',
    	$jwtArr['header'] . '.' . $jwtArr['payload'],
    	$key,
    	true);
    
    echo base64_encode($calculatedHash) . PHP_EOL;
    // -> SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV/adQssw5c=
    
    echo $jwtArr['signature'] . PHP_EOL;
    // -> SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    // Похоже? Там слегка модифицированный base64


    Третья часть - подпись. Если взять первые две части и получить sha265-хеш с использованием вашего ключа, то он должен совпасть с первой частью. Это подтвердит, что первые две части никто не изменял.

    Хоть бы вики почитал, в самом деле :)
    Ответ написан
    6 комментариев
  • Как составить регулярку на совпадение?

    @zkrvndm
    Софт для автоматизации
    Для разбора URL на составляющие существует функция parse_url(), технически было бы правильным сначала разобрать адрес на части, а уже потом проверять составляющие на соответствие каким-то условиям.
    Ответ написан
    Комментировать
  • Как составить регулярку на совпадение?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Может быть так? ^https\:\/\/\S+?\.domain.ru$
    Ответ написан
    1 комментарий