• Как сверстать таблицу с кнопкой в каждой строке?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    А в чем сложность?
    Ответ написан
    3 комментария
  • Как на jQuery удалить динамически созданный класс по таймеру?

    Get-Web
    @Get-Web Куратор тега JavaScript
    Front-End Developer
    У function свой this, поэтому передаем либо переменную, которая ссылается на нужный элемент:
    $(".js-answer").click(function() {
        let __this =  $(this);
        __this.addClass("current");
        setTimeout(function() {
            __this.removeClass("current");
        }, 1400);
    });

    Либо используем стрелочную функцию, которая не имеет своего this
    $(".js-answer").click(function() {
        $(this).addClass("current");
        setTimeout(() => {
            $(this).removeClass("current");
        }, 1400);
    });
    Ответ написан
    Комментировать
  • Как создать свой xml формат?

    Vindicar
    @Vindicar
    RTFM!
    1. Написать класс-реестр, который по имени тега определяет класс компонента.
    2. Написать базовый класс компонента, который умеет читать своё XML описание, выделять из него прописанные атрибуты (типа цвета, текста и т.д.), а также находить и создавать вложенные компоненты, если они есть. Для определения, какой класс нужно использовать для создания компонента, и нужен реестр.
    3. Отнаследовать от базового класса классы для поддерживаемых тобой компонентов. Они должны брать свои атрибуты (которые выделил базовый класс), а потом создавать и настраивать соответствующий элемент управления. Также они должны предоставлять способ подписаться на события, на которые ты хочешь реагировать, типа изменения поля ввода, клика по кнопке и т.д. И, разумеется, они должны быть прописаны в реестре компонентов, чтобы их можно было вкладывать друг в друга.

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

    @SvizzZzy
    $_SERVER['REMOTE_ADDR'] может некорректно показать ip из за настроек самого сервера. Если например сервер находится в докер контейнере, то без дополнительных настроек, remote_addr покажет ip контейнера, не пользователя. Тоже самое если ваш сервер сидит за каким то натом, например nuxt фронтом и тд. Это тоже нужно учитывать. В интернете куча советов на тему "remote addr показывает неверный ip".
    Ответ написан
    2 комментария
  • Почему у меня неправильно определяется IP пользователя?

    @rPman
    $_SERVER['REMOTE_ADDR'] устанавливает твой веб сервер, ему вы доверяете.
    Но, если пользователь заходит через прокси сервер - то тут будет выходной ip адрес этого прокси.

    Если прокси сервер не скрывает информацию о своих клиентах то
    $_SERVER['HTTP_X_FORWARDED_FOR'] и $_SERVER['HTTP_CLIENT_IP'] должны содержать ожидаемое, но это значит нужно доверять этому прокси серверу.

    Хочешь узнать реальный ip адрес, используй javascript в браузере пользователя (т.е. придется доверять уже пользователю в плане, а отреверсит ли он твой код и не подсунет что угодно).

    Cамый известный и достаточно надежный способ (его сразу отключают любые адекватные анонимизеры) - это WebRTC. Технология позволяет двум браузерам открывать прямое соединение (да еще и udp) друг с другом, а веб сервер только организует процесс. Т.е. подняв соответствующего клиента WebRTC (погугли, правда я для php с ходу готовой библиотеки не нашел) и организовав подключение клиента с этим твоим сервером, который представляется обычным веб клиентом), ты сможешь по тому, с какого ip адреса пришло соответствующее соединение, определить настоящий, даже если пользователь использует прокси.

    Это не защитит от vpn, тут никакими способами определить ip адрес пользователя не получится, потому что с точки зрения сетевых технологий, vpn - это как бы проводок пользовательского компьютера подключили к vpn-серверу, и никакие коммуникации не пойдут иначе, если пользователь не укажет иного (можно настроить маршрутизацию на выход через разные шлюзы в зависимости от геолокации, кстати этим можно воспользоваться, разместив кучу своих серверов в разных локациях и, обращаясь к ним из браузера клиента, сравнивать ip адреса)
    Ответ написан
    2 комментария
  • Как передать динамический текст в switch-case?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    switch (path)
    {
        case not null when string.Equals($"{context.Culture}/some-page", path):
            break;
    }
    Ответ написан
    Комментировать
  • CMS для небольшого веб-проекта?

    Sanes
    @Sanes
    Отзывы это те же самые комментарии. Wordpress подойдет.
    Ответ написан
    1 комментарий
  • После регистрации пользователь в базу таблицы users не попадает..В чем проблема?

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

    Во-первых, при создании соединения с БД, надо сказать ПДО, чтобы он сообщал об ошибках.
    $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    Во-вторых, временно, на период разработки, включить отображение ошибок РНР. Чтобы тупо увидеть, если произошла какая-то ошибка.
    ini_set('display_errors', 1);

    И в-третьих, начать собственно отладку.
    Для начала убедившись, что РНР код в принципе запускается, и проблема в нем, а не в форме.
    Для этого в самом начале action.php пишем большими буквами
    die("пхп хотя бы запустился");
    И если после нажатия на кнопку мы этот текст не увидели, то начинаем тупить в свою форму - а с чего она вообще должна что-то посылать в файл action.php (и попутно задаваться вопросом - а какое отношение наш вопрос имеет к php и sql?)?
    Если форма отправляется аяксом, то смотрим ответ пхп в инструментах разработчика, вкладка Сеть.

    Если обработку формы мы начали, то заезжаем внутрь условия
    die("начали обработку формы");

    И так далее, отслеживаем работу своего кода, выполняется ли он вообще, и содержат ли переменные нужные значения.

    А в целом, конечно, код очень жестокий.
    Вот прямо хочется спросить -
    зачем здесь функция test_input?
    зачем здесь try {}catch (){echo 'Error : '.$e-getMessage();}?
    зачем class Auth extends Database?
    почему showMessage - это часть класса Database? Ну вот серьёзно, каким местом вывод сообщения в браузер в виде HTML хоть как-то относится к работе с базой данных?

    Чтобы сделать этот код минимально осмысленным, надо
    выкинуть класс Database
    в класс Auth добавить
    public function __construct($pdo){
                $this->conn = $pdo;
        }

    и выкинуть из него require_once 'config.php';

    В config.php оставить только соединение с PDO
    в action написать
    require 'config.php';
    $user = new Auth($pdo);

    и выкинуть условие при регистрации, оставив только
    $user->register($name,$email,$hpass);
    $_SESSION['user'] = $email;

    И тогда этот код станет минимально осмысленным
    Ответ написан
    Комментировать
  • Как убрать спам с сайта?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Это не "в wordpress", а твой провайдер вставляет. В любой незащищённый трафик.
    Можешь писать ему заявление чтобы прекратил это делать.
    А для сайта можешь выпустить ssl-сертификат и перевести его на "безлопастный" протокол (https).
    Ответ написан
    2 комментария
  • Как выбрать данные, если нет в одной таблице, то взять из другой?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    COALESCE?
    SELECT
        comment.*,
        COALESCE(users.avatarInGames, usersCache.avatarInGames) AS avatarInGames,
        COALESCE(users.gameId, usersCache.gameId) AS gameId
    FROM comment
    LEFT JOIN users ON comment.UID = users.userId
    LEFT JOIN usersCache ON comment.UID = usersCache.userId
    WHERE comment.status = 1
    ORDER BY comment.OID DESC;

    COALESCE(users.avatarInGames, usersCache.avatarInGames) AS avatarInGames avatarInGames берет из users или если его там нет, то возьмет из usersCache.
    Ответ написан
    2 комментария
  • Как сгруппировать по двум полям?

    @alexalexes
    SELECT TOP (100)   
    [error_number] ,
    [error_desc],
    COUNT([error_number])as total      
    FROM Db.tab_error
    group by error_number, error_desc

    Добавить и в select, и в group by.
    Группировка не распадется, если у всех одинаковых error_number строго одно и тоже содержание error_desc.
    Если error_desc не обладает таким свойством, то придется использовать оконную функцию:
    SELECT TOP (100)   
    [error_number] ,
    [error_desc],
    COUNT(*) over (partition by [error_number]) as total      
    FROM Db.tab_error
    Ответ написан
    1 комментарий
  • Как функционируют сайты для взрослых?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    1. Работают вполне законно там, где они хостятся. Где вы там увидели нарушение закона? Вот с чернухой борются активно и глобально - это да.
    2. С других сайтов тырят и пользователи заливают - это кто по-проще. А у кого есть деньги и вкладываются серьезно - сами снимают/организуют съемки и заказывают студиям.
    3. Стандартный абузоустойчивый хостинг в странах, где адалт контент разрешен и хостер разрешает.
    4. Конечно окупаемо - иначе бы не было их столько. Но есть нюансы - это как и везде. Например та же дикая конкуренция. А так - примерно 3/4 трафика интернета всегда было адалтом.
    Ответ написан
    1 комментарий
  • Названия в классов: я могу раздавать их рандомно или есть некая традиция, игнорирование которой считается плохим тоном?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    В программировании есть традиция давать сущностям понятные имена.

    При этом, что такое "понятное имя", каждая команда договаривается самостоятельно. Кто-то пишет только на грамотном английском, кто-то использует колхозную транслитерацию. Один и тот же элемент на разных проектах может называться по-разному, потому что у них разная предметная область (например, menu/navigation). И так далее.

    Дополнительно, существуют и схемы наименования, самая популярная - БЭМ.

    С точки зрения же механики, браузеру совершенно всё равно, что написано у вас в классах (за исключением небольших технических ограничений, описанных в спецификации).
    Ответ написан
    Комментировать
  • Как отлаживать javascript без console.log?

    psixodyb
    @psixodyb
    Хочу, чтобы мой сын стал полубогом Frontend'a
    Видео
    Мне оно помогло научиться дебажить правильно.
    Ответ написан
    Комментировать
  • Как изменить атрибут html элемента через css селектор?

    miraage
    @miraage
    Старый прогер
    HTML аттрибуты нельзя менять через CSS. Только через JS.
    Ответ написан
    Комментировать
  • Где искать верстальщиков и бекендеров?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    не справился, пропал, дико задержал
    По тому что чисто версткой заниматься могут только от безнадеги полные неумехи/новички, или в другой крайней ипостаси - работники постигшие этот мир и им этот мир абсолютно понятен, и они здесь ищу только одного - огромных денег за свое бесконечно-вечное. С бэкендерами тоже сложно, на вольных хлебах это редкий зверь, а на фрилансе он пасется только с условием, что капуста за разовый напряг будет крупнее кочана на постоянном месте работы, ибо нафига тогда париться.

    Короче, на фрилансе и прочих вольных пастбищах чаще всего пасутся 2 типа: Индусы по доллару за пучёк, и профи (скорее всего тоже индусы, но постигшие мудрость Шивы), работающие за ценник сильно выше часовой оплаты на ставке.
    Ответ написан
    Комментировать
  • Как написать свой SSR?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    SSR - это когда сервер отдает уже готовый HTML без необходимости дополнительной загрузки скриптов и прочего. Т.е. статическая страница с формами.
    Как это работает:
    - Есть изначальная страница
    - Клиент тыкает на кнопку
    - Отправляется запрос на сервер
    - Сервер отдает HTML страницу с уже данными и другой информацией

    Что такое заполненные данные:
    - Если это постраничный вывод списка, то уже готовая страница списка - при нажатии на "Следующая страница" сервер отдает HTML где есть эта следующая страница с захардожеными числами
    - Если это таблица (tr/td/td), то полностью заполненная таблица

    Нет здесь никакой магии.
    P.S. js может быть, но смысл в том, что клиенту отдается уже готовая страница с заполненными данными.

    Это может быть полезно в случаях:
    - Когда выполнение js запрещено (безопасность)
    - Когда конечные пк (пользователей) слабые для js
    - Когда проще сделать так (например, ты не знаешь js)
    Ответ написан
    7 комментариев
  • Как намекнуть начальству, что agile не избавляет от тз?

    dapi
    @dapi
    Добрый день!

    27 лет в разработке IT. Исполнял роль разработчика, техлида, архитектора, владельца продукта, техдира, владельца бизнеса. Отвечу из своего опыта.

    > Как дать начальству понять, что они могут хоть 100 jira себе установить, хоть 200 совещаний в день провести, но им всё равно нужно самостоятельно планировать работу и отвечать за неё?

    1. Подготовить презентацию. Главное сконцентрироваться не на том что "так не пойдет", а на том что вы предлагаете. Покажите проблему и ваше решение. Отсюда будет видно насколько вы понимаете суть проблемы которую начальство пытается решить и поделитесь вашим предложением. Не отчаивайтесь если его не примут сразу или не примут вообще, это нормально. Если вы покажете что понимаете суть проблемы, готовые взяться за ее решение и у вас есть понятный план, то ваши шансы достаточно велики. Под проблемой я имею виду то что "100 jira не приводит к решению задач"
    2. Планировать работу самостоятельно, делегировать или не планировать, это руководство решит само. Я как руководитель вполне могу вообще ничего не планировать, а только убедиться в том что моя идея и цель донесена и понята соответствующими лицами и дальше мониторить происходящее. Например если я хочу чтобы мои подчиненные выросли и научились самостоятельно планировать.
    3. Начальство в любом случае отвечает за работу и ее результаты. Но у него есть разные рычаги как влиять на результат. Один из рычагов это сменить исполнителей.
    4. Если считаете что начальство не выполняет свои функции, скажите ему об этом (пункт 1) если вы считаете что ничего не изменилось эскалируйте вопрос далее (к начальству начальства). Для начала выясните какие функции у вашего начальства. Вполне возможно что в вашей компании составление ТЗ это функция разработчика (и это нормально).

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

    Понимаю вас )

    > А чтобы корректировать курс, почему-то проводят кучу совещаний, вместо минимального тз или тупо списка требований.

    Возьмите на себя составление ТЗ. Научитесь это делать. Это поможет вам вырости как профессионал. Даже если к вам пришли с готовым ТЗ вам, для начала, нужно его принять. А именно: убедиться что выявлены все заинтересованные лица, пройтись по функциональным и не функциональным требованиям и так далее.

    Это беспроигрышный шаг которые вас поднимает на ступеньку выше в профессиональном плане.
    Ответ написан
    Комментировать
  • Есть ли консоль управления сайтами ASP.NET Core для Линукс'а?

    вообще нет, но можно попробовать упороться в автоматизацию:
    Вариант раз:
    Написать соответствующие скрипты для ansible.

    Вариант два:
    Контейнеризироваться и использовать кубер или хотябы голый докер.

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

    Даже на винде трогать IIS Manager руками - не кошерно.
    Ответ написан
    4 комментария