Задать вопрос
  • Сайты для государственных учреждений нужно делать только на Битриксе?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нет.
    Ответ написан
    Комментировать
  • Регистрация по номеру телефона?

    @knigaman
    Первый запрос = принимаем на сервере номер телефона, генерируем токен (случайная строка длиной, предположим, 64 символа - цифры, буквы большие и маленькие), отправляем его на клиент. Генерируем код доступа, отправляем его смской на телефон. В зависимости от логики можем и не отправлять (если допустим у нас метод для логина а такого юзера еще нет (он еще не зарегистрирован)).

    Второй запрос = отправляем с клиента токен (тот 64 символьный полученный от сервера) и строку с кодом из смс. Проверяем на сервере токен и код из смс, если все ок - пускаем в аккаунт.

    Примечания:
    1) токены и сами попытки входа должны жить определенное количество времени, предположим 5 минут.
    2) попытки ввода кода (неправильные вводы) должны быть ограничены разумным числом (ну допустим 5 попыток)
    3) если можно то лучше код сделать длиннее - хотя бы 6 цифр, а лучше 8 и более.
    4) попытки входа в аккаунт можно ограничить, но тогда будет можно абузить эту "фичу" и блокировать вход чувакам, тут выбираем меньшее из зол исходя из бизнес требований
    5) можно экономить на смсках и доставлять код в последних цифрах номера / голосовой озвучкой, отправлять в вк, ватсап, телеграм, вайбер

    500 айкью примечания для кое какой защиты от слива бюджета:
    1) можно юзать капчу (можно не всегда а когда начинается аномалия по отправке кодов - всплеск количества отправок)
    2) как уже и говорил разделение входа и регистрации
    3) ставим бот защиту от какого нибудь сервиса по защите от ддос/бот атак
    4) иногда можно не отправить код а отправить клиенту респонс что код отправлен, если клиент вводит код - скорее всего это атака. человек же запросит код повторно (потому что он тупо ему не пришел)
    5) иногда можно отправить код не сразу а через предположим, 30 секунд - если ввели код раньше - значит что-то не так
    Ответ написан
    9 комментариев
  • Почему не получается посчитать среднее значение диапазона, где используется ЕСЛИ?

    otdameskapizm
    @otdameskapizm
    Помог ответ? Отметь решением...
    В формуле для расчета поменяйте значения 160, 140 и прочие с текстового формата на числовой формат. И будет Вам счастье, а так Вы пытаетесь посчитать среднее от текста

    В файле, ссылку на который Вы прислали, уже все изменено)
    Ответ написан
    1 комментарий
  • Как в базу записывать конфиг настроек settings сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Не сочтите за грубость, но вас из крайности в крайность бросает. То вы не хотели связываться с бд так как это "слишком сложно" и хранили все в файлах, измываясь и над собой и над ребятами которые все это пытались как-то образумить... Сейчас есть большой шаг вперед - вы подружились с бд, но теперь, как в той поговорке - если в руках молоток - все кажется гвоздем... Конфиги из нескольких переменных проще хранить в файле настроек, например в формате JSON. Если уж очень хочется забить шуруп молотком - заведите табличку сеттингс, храните в ней пары ключ-значение, или вообще одну строку с тем же JSON.
    Ответ написан
    2 комментария
  • Как бороться с race condition при обращении к REST API во Vue?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Просто не давть пользователю повторно тыкать там, где это вызовет повторный запрос, пока идёт загрузка текущего?

    Но если хочется быть ленивым - можно просто обернуть запросы в leading debounce-promise.

    Все эти thunk и saga - полная ересь, порождённая богомерзким redux.
    Ответ написан
  • Возможно ли отправить в бд через sql запрос в формате BLOB, heic изображения?

    @aleksejjjjj
    Самое отвратительное из известных решений. В БД храним путь к файлу и любые мета данные. Файл лежит в файловой системе. Там его и конвертируем в любой удобный формат и разрешение. Никаких полумер. Картинкам в БД не место.
    Ответ написан
    3 комментария
  • Как преобразовать несколько массивов php в один?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    $input = [
      [2, 'скрипт холодного звонка по продаже услуг'],
      [2, 'продажи в переписке'],
      [2, 'автоматизация отдела продаж'],
      [2, 'заказать скрипт продаж'],
      [3, 'доставка еды из ресторана'],
      [3, 'еда из ресторана на дом'],
      [3, 'доставка еды из ресторана на дом'],
      [4, 'доставка товаров из китая в россию'],
      [4, 'купить в китае с доставкой в россию'],
      [4, 'доставка запчастей из китая в россию'],
    ];
    
    $output = [];
    
    foreach($input as $item) {
      if (!array_key_exists($item[0], $output)) {
        $output[$item[0]] = [];
      }
      $output[$item[0]][] = $item[1];
    }
    
    $output = array_map(fn($item) => join(', ', $item), $output);
    
    var_dump($output);
    Ответ написан
    1 комментарий
  • Как сохранить порядок номеров в запросе?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT * 
    FROM table 
    WHERE id IN (7, 8, 5, 4, 1)
    ORDER BY FIND_IN_SET(id, '7,8,5,4,1');
    Ответ написан
    Комментировать
  • Получение данных пользователя после авторизации через вк?

    @Gumus171991
    https://dev.vk.com/ru/api/access-token/getting-started - тут ты получишь информацию про авторизацию.

    Там есть пример ссылки для авторизации(пример: https://oauth.vk.com/authorize?client_id=1&redirec...). После перехода по этой ссылке появляется обычное окно для авторизации.

    После успешной авторизации тебя редиректит на страницу, которая передана в query-параметре "redirect_uri".(в ссылке выше). Это заранее подготовленная страница твоего сайта. После редиректа ты будешь на странице "example.com/callback?token=wfjnjfkefhhu&id=217321231"(к примеру). Здесь тебе понадобится query-параметр "token". С его помощью ты сможешь взаимодействовать с API вконтакте.

    https://dev.vk.com/ru/method/account - здесь описаны методы для взаимодействия с профилем вк с помощью токена.
    Ответ написан
    2 комментария
  • Как экранировать sql запрос внутри texarea?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это очень просто сделать.
    Надо всего лишь освоить подготовленные выражения.
    Например, почитав вот тут https://habr.com/ru/articles/662523/

    И все запросы, в которых участвуют переменные, выполнять только таким образом.
    А texarea там, или tinymce - это уже без разницы.
    Ответ написан
    1 комментарий
  • Чем отличается php код запускаемый cron от обычного php кода?

    @koder_1
    Битрикс программист
    На кроне лимиты побольше. Например, время выполнения скрипта.
    Некоторые переменные не доступны, пути к файлам нужно слегка по-другому получать, $_SERVER['DOCUMENT_ROOT'] не так работает.
    В целом, обычный php-код, настройки среды другие.
    Ответ написан
    Комментировать
  • Как показать определенное количество символов у ссылки а остальные скрыть?

    Sergei_Erjemin
    @Sergei_Erjemin
    Улыбайся, будь самураем...
    Давайте я погуглю за вас:
    https://webref.ru/recipe/2687
    Правда это не по числу символов, а в размер блока... но тем не менее... Для обрезки по числу символов, по хорошему, для корректной орфограии надо городить скрипт расстановки переносов &shi; и вычислять на каком месте сделать "обрезание" и установку многоточия...
    Ответ написан
    Комментировать
  • Занесение данных из формы в базу данных?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо выкинуть на помойку учебник, из которого взят этот код, пройти по ссылке, и написать нормальный на основе информации оттуда

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $conn = new mysqli("зачем", "вам", "это", "знать?");
    
    $name = $_POST["name"];
    $login = $_POST["login"];
    $pass = $_POST["password"];
    
    $sql = "INSERT INTO admins (login, pass, name) VALUES (?,?,?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("sss", $login, $pass, $name);
    $stmt->execute();
    
    $id = $conn->insert_id;
    header("Location: profile.php?id=$id");


    Пара замечаний
    • отдельная таблица админов обычно не делается, достаточно общей таблицы пользователей
    • id вставлять не надо, его должна генерировать БД
    • после успешной обработки прямого POST запроса обязательно должен быть редирект. Обычно это либо созданная учетка, или страница входа или список пользователей или что-то ещё
    • при обработке прямого запроса никаких echo в коде быть не должно
    Ответ написан
  • Как можно улучшить организацию дев окружения и деплоя при разработке библиотеки?

    @galliard
    Есть у композера такая фишка https://getcomposer.org/doc/05-repositories.md#path

    То есть можно прописать в свой основном composer.json репозиторий типа "path" и прописать там путь к папке с твоей библиотекой. Таким образом комит, пуш, создание релиза и composer update на локальном делать не придется, изменения в библиотеке сразу будут и в основном проекте.
    Ответ написан
    Комментировать
  • Какие моменты стоит учесть при рефакторинге проекта?

    Adamos
    @Adamos
    Если у вас пыховое приложение на древней версии, в нем стопудово куча дублирования кода и велосипедов там, где фреймворк предлагает готовое, отлаженное и стандартное.
    Нет смысла переписывать велосипеды на ООП только для того, чтобы потом понять, что из них нужно только вычленить (и все равно во многом переписать) бизнес-логику, а все остальное надо просто выкинуть.
    Кроме того, CRM - это куча однообразного контента и на фронте. Сразу перенести его на современный фрейм, в котором данные на бэке и фронте аккуратно синхронизируются, может опять-таки оказаться быстрее, чем мучить те велосипеды.
    Ну, а если все сделано в худшем стиле и комком - вовсе оставить копролит и переписать с нуля шаг за шагом. Именно для последующего развития и поддержки.
    Ответ написан
    1 комментарий
  • Как прижать кнопку к низу блока div?

    modelair
    @modelair
    unsocial
    <div class="buy_card">
      <div>
        <h1>До конца акции: </h1>
        <p id="tr_time"></p>
      </div>
      <button>Купить</button>
    </div>


    .buy_card {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: space-between;
    }
    Ответ написан
    1 комментарий
  • Как решить php выдает ошибку при подключении к БД?

    syamskoy
    @syamskoy
    У вас код написан с синтаксисом PHP 8, а запускаете вы код на более старой версии PHP, которая не понимает этот синтаксис. Конкретно речь идёт об именованных аргументах. Обновите PHP или пишите без имен аргументов.
    Ответ написан
    Комментировать
  • Как можно улучшить организацию дев окружения и деплоя при разработке библиотеки?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Данный вопрос не совсем относится к докерам или обновляениям папок через Шторм... а просто удобства с пакетом, который вы и саппортите

    Ошибки:
    - нужно писать тесты, чтобы предупредить ошибки :)

    Постоянные муки:
    - вообще, если библиотека супер-активно пишется и часто, то это немного отдаленно напоминает и нарушает принцип из чистой архитектуры "обращайтесь к стабильным зависимостям"

    Потому стоит подумать об архитектуре внешней либы так, чтобы ее изменения не были срочными,

    Совет:
    сделайте не композер пакетом, а просто как сабрепозиторий, тогда любой из проектов просто как сабгит подтянет... при этом из каждого можно будет ее редактировать и не тянуть как вендор :) все равно она в рамках ваших репозиториев, зачем пакет? :)
    Ответ написан
    2 комментария
  • Как можно улучшить организацию дев окружения и деплоя при разработке библиотеки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Докер.

    Вообще очень странно, что вы так долго могли усидеть на такой неудобной конструкции.
    99% разработчиков тестируют код локально, ничего никуда не "синхронизируя" и не "заливая".

    Железо при этом не имеет значения, а окружение как раз задается докером.
    Правда, говорят что под виндой (и, вроде бы, маком) какие-то до сих пор проблемы с докером, но в целом это совершенный уже мейнстрим.
    Если надо просто поколупаться в небольшом кусочке кода, то я запускаю встроенный сервер.
    Но для рабочих проектов - уже много лет только докер (но разрабатываю я под линуксом).

    Как вариант - можно попробовать Continuous Integration, который весь этот список от пуша до composer update на удалённом будет выполнять автоматом.
    Ответ написан
    6 комментариев
  • В каких ситуациях можно обойтись без плейсхолдеров в запросе?

    Adamos
    @Adamos
    Здесь уместна логика, как в анекдоте про бармена, который каждый день наливал проверяющему 90 грамм вместо заказаных ста. "Мне выгоднее тебе каждый день штраф платить, чем руку сбивать". Вот и программисту должно быть больно видеть приведенную конструкцию, а время, потраченное на рассуждения о том, безопасна она или нет, лучше потратить с большей пользой.
    Ответ написан
    6 комментариев