• Как правильно сделать модальное окно?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const openSelector = '[data-target]';
    const closeSelector = '.modal__close';
    const modalSelector = '.modal';
    const activeClass = 'modal--active';

    Делегирование, общий обработчик клика назначается один раз для всех:

    document.addEventListener('click', ({ target: t }) => {
      const open = t.closest(openSelector);
      if (open) {
        document.querySelector(`#${open.dataset.target}`).classList.add(activeClass);
      } else {
        t.closest(closeSelector)?.closest(modalSelector).classList.remove(activeClass);
      }
    });

    Отдельные обработчики для кнопок открытия и закрытия, назначаются каждой кнопке индивидуально:

    const onClick = (selector, handler) => document
      .querySelectorAll(selector)
      .forEach(n => n.addEventListener('click', handler));
    
    onClick(openSelector, ({ currentTarget: { dataset: { target } } }) => {
      document.querySelector(`#${target}`).classList.add(activeClass);
    });
    
    onClick(closeSelector, e => {
      e.currentTarget.closest(modalSelector).classList.remove(activeClass);
    });
    Ответ написан
    Комментировать
  • Как словить событие mouse2?

    fallus
    @fallus
    https://developer.mozilla.org/en-US/docs/Web/API/E...

    document.body.addEventListener('contextmenu', e => {
      e.preventDefault();
    });
    Ответ написан
    Комментировать
  • Как можно реализовать ,такое выпадающее меню?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    саму всплывашку абсолютом выравниваешь ровно поверх телефона. условно чтобы первая строка всплывашки совпадала с текстом кнопки. ну и в принципе все. сам dropdown реализуй как тебе будет удобно
    Ответ написан
    2 комментария
  • Как поменять цвет анимационного шарика?

    LenovoId
    @LenovoId
    svg, css,js
    .pagination .dots .select{
      background: нужный цвет
    }


    https://codepen.io/topicstarter/pen/XWjgZQb

    А вообще goo эффект просто делается, применяется фильтр SVG в котором всего две опции, гаусиан блюр + матрица цветов со смещением ...после чего применяем к нужному месту - как в моём примере - смотрите



    Вот к примеру goo эффект вообще без всякого SVG фильтра - смотрите



    Пример как у вас без всякого gsap

    Ответ написан
    2 комментария
  • Что делать, если удалилась таблица в базе данных?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Восстановить из резервной копии.
    А если нет резервной копии?
    EDmmM8eXoAE-dB3.jpg
    Ответ написан
    Комментировать
  • Где почитать про создание страницы по id?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Загуглите что такое php-роутер и как написать его самому. Роутер это именно то, что вам нужно, для решения задачи.
    Ответ написан
    Комментировать
  • Почему не работает код?

    @Alex_At_Net
    Обращайтесь, помогу - https://t.me/codecraft_phd
    Ваш код выглядит правильно. Я думаю, что лучше всего будет пропробовать распечатать запрос. Например, сохраните его в файл или в лог. Проверьте, что запрос с WHERE корректно собрался.
    Ответ написан
    3 комментария
  • Почему не работает код?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. НИКОГДА не публикуйте креды к базе!
    2. Не используйте подстановку данных в запрос через конкатенацию. Вместо этого используйте плейсхолдеры.
    Пример 1 (SQL инъекция):
    # Тут заэнкожено: '; DROP TABLE `users`; --
    curl -XPOST -H 'Content-type: application/x-www-form-urlencoded' -d'phone=%27%3B%20DROP%20TABLE%20%60users%60%3B%20--'

    Пример 2 (phone может содержать массив):
    curl -XPOST -H 'Content-type: application/x-www-form-urlencoded' -d'phone[]=+123'

    3. Не используйте глобальные переменные. Про это есть множество статтей.
    4. Если есть возможность - используйте \PDO, вместо mysqli.
    5. Не стоит объявлять функции/классы/трейты/интерфейсы по условию. Вместо этого используйте их по условию, но объявляйте без него.
    6. При работе с путями рекомендую пользоваться глобальными, вместо относительных, иначе этот самый путь будет зависеть от скрипта, с которого запустили ваш код, а не от того, где происходит работа с файлами.
    7. У вас конкурентно не безопасный код за счет того, что работа с файлами происходит в одном и том же каталоге, с одними и теми же именами файлов. Что будет если запустить два запроса одновременно на вытяжку всех пользователей? В лучшем случае один из запросов просто упадет с ошибкой что не может добавить в архив файл (это второй поток его уже удалил). Если будет запущено 2 запроса например на 1го пользователя и на всех - есть вероятность, что один из них вернет далеко не запрашиваемые данные)).
    8. Очень рекомендую разделить вашу обработку на 2 части:
    - Первая пусть записывает в файлики данные по пользователям при обновлении данных этих пользователей.
    - Вторая - вытягивает вытягивает только id требуемых для архивирования и уже добавляет их в архив. Имя архива стоит делать рэндомным, что бы избежать конкурентного доступа к одному и тому же файлу на запись.
    9. getUserses -> getUsers

    Конкретно по вашей проблеме: если я праивльно понимаю, вы в один и тот же архив запихиваете файлы на каждый запрос, грубо говоря один раз вытянув всех пользователей - дальше вы только обновляете их в архиве на 10к файлов, а не создаете новый архив.
    Ответ написан
    3 комментария
  • Как перевести пароли с md5 на bcrypt?

    @alexalexes
    Сморите по регламенту сайта, каков официальный срок действия пароля (если нет такого, то определяетесь с этим).
    1. Создаете в базе новое поле под bcrypt пароль, а также дату смены пароля.
    2. Делаете авторизацию использующую как md5, так и bcrypt если последняя задана.
    3. Разрабатываете систему оповещения для пользователей, у которых истек срок действия пароля.
    4. Ставите дату пароля такой же как и дату регистрации пользователя, если не использовали это раньше.
    5. При смене пароля пишете только bcrypt, md5 не используете, лучше сделать поле-флаг, что пользователь менял пароль уже по новой технологии.
    В течение пару периодов срока действия пароля будет постепенный переход на новый хэш.
    Активных пользователей придется как-то стимулировать, чтобы сменили пароль.
    Неактивные будут восстанавливать пароль, например, по email, если они вернутся на ваш ресурс и вы решите когда-нибудь больше не поддерживать md5 хэш.
    PS: Принудительно заставлять менять пароль пользователю - это не самый оптимальный вариант. Заменяйте хэш пароля по новому алгоритму, как только получили от пользователя исходный пароль, который валиден по старому алгоритму, например, в процессе авторизации.
    Ответ написан
    8 комментариев
  • Отправка денег на qiwi api?

    @kqlek
    Попробуйте без помогашки, вот так:
    $token = 'токен нельзя палить';
    
    $paramGet = [
        "id" => (string)(1000 * time()),
        "sum" => [
            "amount" => 8,
            "currency" => "643"
        ],
        "paymentMethod" => [
            "type" => "Account",
            "accountId" => "643"
        ],
        "comment" => "Testing",
        "fields" => [
            "account" => "+79114353887"
        ]
    ];
    $dataPostParam = json_encode($paramGet, JSON_UNESCAPED_UNICODE);
    
    $ch = curl_init("https://edge.qiwi.com/sinap/api/v2/terms/__idPROVIVER__/payments");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Accept: application/json',
            'Authorization: Bearer ' . $token
        )
    );
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $dataPostParam);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $sResponse = curl_exec($ch);

    Там где __idPROVIVER__ это идентификатор провайдера, см документацию.
    Ответ написан
  • Macbook Pro 2015 в 2020 аткуален?

    Zoominger
    @Zoominger
    System Integrator
    Актуальны даже 2012-е. Обновления прилетают, тормозов не замечено.
    Ответ написан
    Комментировать
  • Почему не работает регистрация?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Скажи, а кто писал эти комментарии? Кто этот гений, который советует ставить символы "в начале строки или в середине"?
    Я думаю, это без шуток, самый важный вопрос, без ответа на который твою проблему не решить
    Ответ написан
    2 комментария
  • На кого учиться программисту?

    Konata69lol
    @Konata69lol
    backend developer (php/go)
    Иди на работу, если ты уже "программист". В вузе только время потеряешь.
    Ответ написан
    Комментировать
  • Как устроиться на начальную должность в веб?

    Devilz_1
    @Devilz_1
    Frontend-Developer
    Как устроиться на начальную должность в веб?

    Ходить на собеседования. По большей части джунам не нужны портфолио (на то они и джуны). Сходите на парочку собесов и поймёте, что именно вам нужно знать для трудоустройства.
    Ответ написан
    3 комментария
  • Как сравнить пароль со старым md5?

    SagePtr
    @SagePtr
    Еда - это святое
    Можно хранить к примеру несколько видов хешей - старые md5 и новые, полученные функцией password_hash.
    А в самом коде проверять, если хэш начинается с $ - то это новый хэш, проверять его через password_verify, а если нет - то это старый хэш, проверять его примерно так:
    if (hash_equals(md5($password), $hash))
    Ну и в том случае, если хэш старого формата подошёл, то не просто пустить пользователя, но и сгенерировать из введённого им пароля новый хэш функцией password_hash и сохранить его в бд, чтобы со временем старые хэши заменились на новые.
    Ответ написан
    Комментировать
  • Как сравнить пароль со старым md5?

    @dzhebrak
    Если в бд у вас хранится md5-хеш пароля (что не рекомендуется), то сравнивайте пароли с помощью функции md5 https://www.php.net/manual/ru/function.md5.php
    Ответ написан
  • Как отправлять смс через php?

    @Kostik_1993
    Web Developer
    Ну можно юзать firebase, 10 тысяч входов по СМС в месяц бесплатно
    А вообще везде цены на СМС одинаковые.
    Ответ написан
    Комментировать
  • Как отправлять смс через php?

    @anton99zel
    29а класс средней школы №7
    У вас вопрос неверный.
    Вы спрашиваете про отправку через php, а по сути ищете наименее затратный способ.
    --
    Я себе сделал бесплатный от слова совсем, даже 600 смс и за те не плачу)
    правда, железо у меня уже было (домашнее).
    ---
    Нужно:
    1. Модем e3372
    2. Роутер Кинетик с usb
    3. Сим-карта Дэником, которая на тарифе за 0 рублей дает 600 смс просто так, либо мегафон или Yota дают условный безлимит на смс за 50 рублей. По сути блокируют отправку, если превышаешь лимит в час.
    4. Белые ip не нужны. Интернет на Сим карте тоже не нужен

    Модем прошиваем в hilink, на роутере включаем keendns, добавляем модем к этой службе, при включении будет выдан адрес в сети интернет и ssl, там же в роутере закрываем модем паролем.

    Далее к модему можно обращаться не только по локальной сети 192.168.8.1, но и из интернета (спасибо кинетик)

    Пишем php код, нужно написать несколько функций (отправка, получение, удаление, получение токена)
    Вот пример:
    //функция Отправки СМС
    function send($sms_phone, $sms_message){
      $xml = auth();
      $options = array(
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_USERPWD => 'admin:34543sdd4!@0',
        CURLOPT_URL => 'https://modem.ВАШЕ_ИМЯ.keenetic.link/api/sms/send-sms',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
        CURLOPT_HTTPHEADER => array("X-Requested-With: XMLHttpRequest",'Cookie:'. $xml->SesInfo,'__RequestVerificationToken:'. $xml->TokInfo,'"Content-Type:application/x-www-form-urlencoded; charset=UTF-8"'),
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => "<request><Index>-1</Index><Phones><Phone>".$sms_phone."</Phone></Phones><Sca/><Content>".$sms_message."</Content><Length>5</Length><Reserved>1</Reserved><Date>".date("Y-m-d H:i:s")."</Date></request>"
      );
      $curl = curl_init();
      curl_setopt_array($curl, $options);
      curl_exec($curl);
      curl_close($curl);
    };


    И сама отправка:
    send($sms_phone, $sms_message);
    На сервере нужно делать проверку номера и спам-защиту:
    Проверка можно делать тут, включая ограничения по региону:
    rosreestr.subnets.ru/?get=num&num=79152000200
    --
    Тем самым ваш сайт может слать смс.

    Вы можете отправлять и получать СМС в телеграм/из телеграм.
    Ничего не платите, если не беспределите, не рассылаете рекламу и не превышаете лимиты

    Для клиентов, когда важно передать именное смс, а не циферное, использую www.smsimple.ru
    В среднем отправка 2,30 рубля
    Ответ написан
    Комментировать