• Как решить вопрос ожидания в асинхронном программировании?

    @Akela_wolf
    Extreme Programmer
    Тут проблема не в асинхронном коде, а в том что обработка ваших данных занимает слишком много времени. Если бы у вас обработка данных была синхронной - была бы та же проблема.

    Таким образом, у вас 2 варианта:
    1. Увеличить таймаут на nginx (или кто там отвечает 502 Gateway timeout), чтобы он ждал ответа 10 минут. Пользователю при этом тоже придется ждать. На фронте в это время можно рисовать "крутилку" или запустить прямо в браузере тетрис :)
    2. Делать общение с фронтом асинхронным тоже. Пользователь загружает файл, файл уходит в обработку и фронту сразу же возвращается 200 OK + идентификатор задачи. Фронт с определенной периодичностью (10-30 секунд) опрашивает по идентификатору бэк "ну что, закончилась обработка?". И как только закончилась - бэк ему отдает итоговый файл. Пока обработка не закончилась - бэк может отдавать данные о количестве обработанных записей, что позволит фронту рисовать прогресс-бар, например.
    2а. Тоже самое что и в п.2, но уведомление о завершении задачи посылает бэк через WebSocket.
    Ответ написан
    Комментировать
  • Как прибавить к текущей дате дни?

    @Akela_wolf
    Extreme Programmer
    Во-первых, никогда, не собирайте SQL-запрос по кускам с помощью конкатенации строк. Это очень, очень, ОЧЕНЬ, плохой способ, за который тысячи разработчиков поплатились взломом сайтов через SQL-injection. Используйте параметры запроса.

    Во-вторых, у вас в запросе ошибка: INSERT и SET не могут использоваться совместно.

    В-третьих, проще всего воспользоваться функцией DATE_ADD, передавая ей количество дней как параметр, например так:
    $pdo->prepare("INSERT INTO `order`(user_id, date, date_end) VALUES(:userId, :date, DATE_ADD(:date, INTERVAL :days DAY))")
    	->execute(["userId" => 100,
    			   "date" => date("Y-m-d"),
    			   "days" => 10
    			  ]);


    Полный пример

    Обратите внимание: phpize.online предоставляет объект $pdo. Вам в вашем коде придется его инициализировать вручную, либо понять как использовать параметры вместе с тем объектом $db, который у вас есть. Если это Laravel - то он тоже умеет аналогичным образом подставлять параметры.
    Ответ написан
    4 комментария
  • Как прибавить к текущей дате дни?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В случае MySQL просто прибавить соотв. INTERVAL:
    INSERT INTO `order`
    SET ...
        date_end = CURRENT_DATE + INTERVAL :days_to_add DAY

    В других СУБД - использовать функцию DATEADD().
    Ответ написан
    Комментировать
  • Почему json_encode превращает число в строку?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Также вы можете использовать json_encode с флагом JSON_NUMERIC_CHECK

    echo json_encode($result, JSON_NUMERIC_CHECK);

    json_encode online
    Ответ написан
    Комментировать
  • Почему json_encode превращает число в строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что из PDO вернулась строка.
    https://qna.habr.com/q/968945
    Ответ написан
    Комментировать
  • Сущевствует ли JSON.assign(json, fieldJson)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На JS никак. JSON - это текстовый формат для обмена данными, для работы с ним нужно десериализовать строку в объект.
    Ответ написан
    Комментировать
  • Как декомпилировать или чем открыть файлы CGI?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    CGI (от англ. Common Gateway Interface — «интерфейс общего шлюза») — интерфейс, используемого внешней программой для связи с веб-сервером. Интерфейс разработан таким образом, чтобы можно было использовать любой язык программирования, который может работать со стандартными устройствами ввода-вывода.

    ELF (англ. Executable and Linkable Format — формат исполнимых и компонуемых файлов) — формат двоичных файлов, используемый во многих современных UNIX-подобных операционных системах, таких как FreeBSD, Linux, Solaris и др.

    Таким образом у вас программа для *NIX, написанная на каком-то компилируемом языке программирования, работающая с web-сервером через потоки ввода-вывода.
    Восстановить исходный код такой программы, чаще всего, невозможно. Можно декомпилировать её и изучить получившийся код на ассемблере, чтобы попытаться восстановить логику работы программы, но это требует соответствующих знаний и навыков.
    Ответ написан
    1 комментарий
  • Как распокавать JSON пакет?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Откуда "распокавать"?
    Они запакованы только на промежуточном сервере NPM, а туда попадают из открытых незапакованных исходников. К вам они тоже устанавливаются уже в распакованном виде - заменяйте что хотите в node_modules, только имейте в виду, что ваши изменения затрутся при обновлении пакета и их не будет у других разработчиков.
    Гораздо проще сделать форк и устанавливать его.
    Ответ написан
    Комментировать
  • Как сделать ежедневный бонус на PHP Mysql JS?

    @object_Object
    Писать код не стану, но опишу как реализовывал лично я. В бд к пользователю приставлял еще одну колонку (bonusTime). При регистрации ставится time() в эту колонку. Затем просто при отображении страницы скрипт проверяет прошло ли 86400 секунд. (24 часа) и если да то дает забрать бонус. При получении бонуса колонка bonusTime снова устанавливается на time().
    Ответ написан
    1 комментарий
  • Дублировать контент или динамически адаптировать на js?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Критерии "лучшести" какие?
    В поддержке обычно проще и очевиднее иметь дубль с говорящим названием: `.block__text` и `.block__text-mobile`, например. Иногда, если контент отличается прям сильно и в нескольких элементах, вплоть до замены самой корневой сущности: `the-hero`, `.the-hero-mobile`, хотя это крайний случай, конечно.

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

    DevMan
    @DevMan
    безопасно, если делать валидацию на сервере.
    иначе – опасно.

    хранить заказы/цены/etc в куках – верх тупизма.
    Ответ написан
    2 комментария
  • Почему жирность текста в css отличается от жирности текста в макете figma?

    Liatano
    @Liatano
    Для изменения жирности нужно подгрузить шрифт с этой жирностью. Браузер сам, конечно, может некоторым образом симулировать жирность или курсив, но если шрифт не системный для каждой жирности, начертания и их сочетаний нужно подгружать свои файлы. При этом их нужно еще корректно объявлять, например:
    @font-face {
    	font-family: 'Commissioner';
    	src: url('fonts/Commissioner/Commissioner-Regular.eot');
    	src: local('Commissioner Regular'), local('Commissioner-Regular'),
    		url('fonts/Commissioner/Commissioner-Regular.eot?#iefix') format('embedded-opentype'),
    		url('fonts/Commissioner/Commissioner-Regular.woff2') format('woff2'),
    		url('fonts/Commissioner/Commissioner-Regular.woff') format('woff'),
    		url('fonts/Commissioner/Commissioner-Regular.ttf') format('truetype');
    	font-weight: normal;
    	font-style: normal;
    }
    @font-face {
    	font-family: 'Commissioner';
    	src: url('fonts/Commissioner/Commissioner-Medium.eot');
    	src: local('Commissioner Medium'), local('Commissioner-Medium'),
    		url('fonts/Commissioner/Commissioner-Medium.eot?#iefix') format('embedded-opentype'),
    		url('fonts/Commissioner/Commissioner-Medium.woff2') format('woff2'),
    		url('fonts/Commissioner/Commissioner-Medium.woff') format('woff'),
    		url('fonts/Commissioner/Commissioner-Medium.ttf') format('truetype');
    	font-weight: 500;
    	font-style: normal;
    }

    имя у шрифта одно, а вот жирность разная. При этом лучше не забывать о разных браузерах а также о том,что шрифты могут быть в системе пользователя(в этом случае ничего грузиться не будет). В целом, формат .eot - это атавизм для IE, но до сих пор лежит в готовых паках до кучи.
    Ответ написан
    1 комментарий
  • Как отредактировать данные в php файлах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это бесполезное занятие и лучше сделать хранение этих данных в каком угодно хранилище. Если на сайте уже доступна mysql, то хранить в ней.

    Чтобы при помощи php можно через форму можно редактировать данные, они не должны лежать в РНР файлах.
    Ответ написан
    4 комментария
  • Как загружать для РФ один скрипт, а для других стран - другой?

    @d-sem
    Использовать любой сервис который позволяет определять регион по IP

    Или внешнее API, или библиотеки вида https://www.maxmind.com/en/geoip2-services-and-dat...
    Ответ написан
    2 комментария
  • Как написать сайт не веб-программисту без особых усилий?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Не являюсь врачом, однако появилась нужда провести трансплантацию человеческого сердца. Я умею вырезать фигурки из бумаги и зашивать носки, но резать и шить плоть у меня нет желания, получится слишком криво и потрачу много сил. Обращаться в ветеринарки не очень хочется. Может есть какое-нибудь решение. В стиле клиник и подобных вещей.
    Ответ написан
    3 комментария
  • Как написать сайт не веб-программисту без особых усилий?

    Adamos
    @Adamos
    Переписать вопрос, выкинув из него ненужное и указав конкретное: какие "нужные утилиты" планируются.
    Они, вполне возможно, давно реализованы в CMS или плагинах к ним, и писать их с нуля просто не требуется.
    Ответ написан
    Комментировать
  • Туплю в решении вроде бы простой задачи?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Как вам уже объяснили, ошибка тут
    if (i % j !== 0){ //тут
        b+=1
     }


    Но так как для вас она не очевидна объясню. Возмем ситуацию когда i=6
    и посмотрим как будет работать в данной ситуации внутренний цикл

    for (let j = 2; j < i; j++) {
          if (i % j !== 0){
            b+=1
          }
        }

    при j = 2 условие не сработает (и это правильно)
    при j = 3 условие не сработает (и это правильно)
    при j = 4 условие сработает (и это НЕ правильно)
    при j = 5 условие сработает (и это НЕ правильно)

    итого ваш алгоритм аж 2 раза посчитает что число 6 простое

    думаю теперь вам станет понятней в чем ошибка и вы отметите ответы от ThunderCat и Олег как верные))))

    ну и от себя добавлю - замените внутренний цикл на такой
    for (let j = 2; j <= i/2; j++){
    это в 2 раза уменьшит количество циклов. Почему это правильно предлагаю подумать самому))))
    Ответ написан
    8 комментариев
  • Почему неправильно работает сравнение?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос
    Сколько строк вернёт база данных, если в запрос передать несуществующий логин?

    Дополнительный вопрос
    Какой смысл вообще городить авторизацию, если любой придурок авторизуется без всякого пароля, через SQL инъекцию?

    Подробнее про вопрос секьюрности этого куска:
    Если переменная подставляется напрямую в запрос, то это значит что в нее можно дописать SQL, который будет делать совсем не то, что ожидалось.
    Например, если вместо имени пользователя написать что-то вроде имя' AND LEFT(password, 1) = 'a
    то тогда код напишет "Лоигн занят" если первая буква пароля - "а". Пара десятков таких запросов - и первую букву мы уже угадали. Тем же способом же достаём остальные и вот мы получили пароль любого клиента.

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

    Здесь надо делать так

    $input = json_decode(file_get_contents("php://input"), true);
    
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect(*информация БД*);
    $link->set_charset("utf8mb4");
    
    $stmt = $link->prepare( "SELECT login FROM sn_users WHERE login=?");
    $stmt->bind_param("s", $login);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    if ($row) {
        echo "Лоигн занят";
    } else {
        echo "Лоигн свободен";
    }
    Ответ написан
    7 комментариев
  • Как реализовать выбор значения списка из модального окна?

    Liatano
    @Liatano
    Как вариант создать обработчик,который будет регистрироваться в момент открытия модального окна (либо вешать на событие открытия,либо разместить в самой модалке).
    в итоге скрипт будет выглядеть как-то так:

    let elements = document.querySelectorAll('.modal-body li a');//делаем выборку строк,на которых нужна обработка клика
    elements.onclick = function() { //вешаем обработчик
        let id=this.id; //забираем id
        let inp=document.querySelectorAll('.form-group [name="parent_id"]'); //находим инпут
        inp.value=id; //втавляем id  в значение инпута
    };


    есть пара замечаний по верстке:
    • использовать тег <a> не для ссылок - плохая практика, теги нужно использовать по назначению
    • для верстки и скриптов лучше использовать классы либо id, привязка тегам в обоих случаях ведет к проблемам в будущем.
    • для хранения данных(в данном случае id) лучше использовать атрибуты data, которые были придуманы как раз для этого
    Ответ написан
    4 комментария