Задать вопрос
  • Что делать если не задаётся бэкграунд на nav?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    Что значит "не задаётся бэкграунд"? Всё накидывается и работает в соответствии с тем, что указано в css.
    У nav белый фон, у списка внутри - серый, согласно универсальному селектору
    * {
        box-sizing: border-box;
        background: #E5E5E5;
    }
    (без чёткого понимания всех нюансов этого селектора использовать его не рекомендуется).
    Ответ написан
    3 комментария
  • Можно ли постить свои фриланс работы?

    an-tar
    @an-tar
    Full stack web developer
    Правило хорошего тона - спрашивать. Кто-то согласится, а другой будет против. Также может зависеть от юридической стороны вопроса -содержание договоров, NDA и т.п.
    Ответ написан
    Комментировать
  • Можно ли постить свои фриланс работы?

    pozZzitiv
    @pozZzitiv
    Дизайнер и перфекционист
    Кратко: можно, если это не было прямо запрещено.

    Если устно или в переписке была озвучена просьба не выкладывать, то чисто по-человечески следует пойти навстречу. Если просят не выкладывать, но очень хочется — ищите компромисс (убрать упоминание фирмы клиента, выложить лишь часть и т.п.).

    Если запрет прописан в договоре, то нельзя выкладывать.

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

    Jacen11
    @Jacen11
    ссылку на файл указывают в бд
    Ответ написан
    Комментировать
  • Как сложить значения с одинаковым классом js?

    politon
    @politon
    HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
    let elements = document.querySelectorAll('.right-form-calculator__cost');
    const totalSum = [...elements].reduce((sum, current) => {
      return sum + parseFloat(current.innerText);
    }, 0);
    let calculator__sum = document.querySelector('.right-form-calculator__sum');
    calculator__sum.innerHTML = 'Сумма '+totalSum+' руб'
    Ответ написан
    3 комментария
  • Как грамотно сделать обработку ислючений в php?

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

    Основных правил при обработке исключений три:
    1. Не использовать исключения там, где они не нужны. Например, при проверке пользовательских данных.
    Собственно, эмпирическое правило звучит так: функция должна бросать исключение, если она не может выполнить ту работу, для которой она предназначена.

    Отсюда сразу становится понятно, что для функции, которая должна проверять введенные данные, наличие ошибок в них не является исключительной ситуацией. А совершенно штатной. И обеспечивается штатными же средствами. По результатам проверки пользователю просто отправляется ответ, что данные неверны, безо всяких исключений. В нормальной структуре проекта этим занимается контроллер.

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

    2. Системные ошибки обрабатывает глобальный обработчик исключений, логируя саму ошибку, а на клиент отправляя статус 500 и какое-нибудь абстрактное сообщение о проблеме на сервере. Это самое важное в системных исключениях - текст ошибки никогда, не при каких обстоятельствах не уходит наружу.

    Пример такого исключения - когда запрос в БД порождает ошибку.

    3. Пользовательские исключения, там где они нужны, обычно обрабатываются по месту, но есть нюансы.
    Собственно, под обработкой исключений часто понимают два разных действия:
    - собственно обработку, когда программа совершает какие-то действия, чтобы нивелировать негативный эффект. Например, если не удалось подключение к какому-то сервису, то либо попробовать подключиться к другому, либо просто подождать и попробовать снова.
    - простое информирование пользователя

    Для информирования можно действительно ловить исключение через try..catch и писать какое-то свое сообщение.
    Но можно и автоматизировать этот процесс, вот две статьи, которые показывают примеры, как это можно сделать:
    https://angelovdejan.me/2022/11/24/centralized-exc...
    https://habr.com/ru/articles/688202/
    Ответ написан
    Комментировать
  • Как сделать диаграмму полукругом?

    Stalker_RED
    @Stalker_RED
    Простая дуга в SVG
    Длина закрашенной части это радиус * π * проценты / 100.
    Если "живое" поведение не нужно, то можно выбросить весь js код с обработчиком инпута, а заранее рассчитанное число захардкодить в свойство stroke-dasharray в атрибуте фигуры или в css.
    Ответ написан
    Комментировать
  • Как работает htmlspecialchars()?

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

    Эта функция заменяет спецсимволы, которые являются управляющими в контексте HTML, на безобидные HTML-сущности. Вот и всё.
    Чисто визуально управляющие символы будут выглядеть так же, как и должны, но в коде не будут представлять ни малейшей опасности.

    Для XSS важно, будут ли экранироваться одинарные кавычки или нет, если одинарные кавычки используются для ограничения атрибута.
    Пример

    <?php $name = "' onclick='alert(\"pwned!\")"; ?>
    <input value="<?=htmlspecialchars($name) ?>"> Не важно. Весь текст так и заключен в двойные кавычки
    <input value='<?=htmlspecialchars($name) ?>'> Важно. Закрыли одинарную, вписываем, что хотим

    Во втором случае этот код отрендерится, как
    <input value='' onclick='alert(&quot;pwned!&quot;)'>
    (но при этом &quot; отрендерятся в двойные кавычки, и в onclick будет уже валидный яваскрипт
    alert("pwned!")

    А с взведенным флагом ENT_QUOTES мы получим
    <input value='&#039; onclick=&#039;alert(&quot;pwned!&quot;)'>

    И хотя значение внутри атрибута отрендерится, как ' onclick='alert("pwned!"), но оно все целиком будет внутри атрибута value.

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

    К счастью, РНР уже позаботился о вас и ваших друзьях. Начиная с версии 8.1, флаг ENT_QUOTES ставится по умолчанию. И приведенный выше пример будет работать только на устаревших версиях. Так что ручное добавление уже уходит в область легаси-практик.

    Чтобы не ломать пальцы, каждый раз набирая всё это htmlspecialchars ENT_QUOTES, толковые джуны всегда пишут пользовательскую функцию-макрос, типа
    function esc($var) {
        return htmlspecialchars($var, ENT_QUOTES);
    }

    Правда, надолго с этой функцией не задерживаются, потому что она годится только при обучении. А любой проект сложнее, чем домашняя страничка про любимого котика, в обязательном порядке уже должен для вывода использовать специальный шаблонизатор, например Twig. Где весь вывод идет с помощью специального оператора, который уже по умолчанию экранирует HTML
    <input value="{{$name}}"> Не важно. Все уже проэкранировано до нас

    Важно помнить, что это экранирование работает только в контексте HTML.
    Если выводим данные внутри кода яваскрипт, то htmlspecialchars поможет как мертвому припарки. И в этом случае надо использовать json_encode.

    Ну и разумеется, надо не забывать комбинировать все варианты экранирования.
    Например, код яваскрипт, который пишется в атрибут HTML тега, надо весь целиком экранировать c с помощью htmlspecialchars. А данные для этого кода - c с помощью json_encode:
    <button onclick="<?= htmlspecialchars("window.open(".json_encode($name).")", ENT_QUOTES) ?>">
    Ответ написан
    3 комментария
  • 123456789123456?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    Ну дык flex-контейнер у вас div.server-header, а его дочерние элементы - это div без класса и div.server-item.
    Так вот Nomad List и стрелка находятся внутри div-а без класса. Каким образом к ним должен применяться flex, если у их родителя нет таких стилей?
    Научитесь пользоваться DevTools - смотрите исходный код и стили и все встанет на свои места.
    Ответ написан
    Комментировать
  • Мне кажется или Map странно себя ведёт?

    @Scream034
    Новичок в разработке
    Это происходит потому, что в JavaScript массивы и объекты являются ссылочными типами данных, а не примитивными. Когда вы создаете массив key и добавляете его в Map, вы сохраняете ссылку на этот массив в качестве ключа. При попытке получить значение из Map по ключу [1, 2], вы создаете новый массив [1, 2], который уже не равен массиву key, сохраненному в Map. Поэтому вы получаете
    undefined. Верно объяснил?
    Ответ написан
    1 комментарий
  • Как организовать хранение своих наработок и полезных кусков кода, инструкций?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Шикарный сервис посоветовал akelsey

    Тем не менее, когда-то тоже столкнулся с такой задачей. Решением было сделать сайт на базе WordPress.
    Для меня это очень удобно, так как WP расширятся в любом направлении и поддерживает то, что мне нужно. Из перечисленного вами там уже есть готовые теги, категории и поиск. Так же база знаний для вас self-hosted, что бывает важно. Для форматирования кода есть готовые плагины. Часть статей можно сделать общедоступными, чтобы помочь другим. Подобные сайты вы наверняка находили в интернете уже уйму раз.

    Но вариант не из простых, конечно же. Больше как альтернатива. Конкуренцию с Notion или Joplin выдержать сложно.
    Ответ написан
    1 комментарий
  • Как организовать хранение своих наработок и полезных кусков кода, инструкций?

    akelsey
    @akelsey
    Использую joplin, есть на всех платформах, работает без сервера, один бинарь, локально либо синхронизироваться в облака, использует markdown, поиск.
    Ответ написан
    Комментировать
  • Как правильно верстать используя bootstrap?

    ThunderCat
    @ThunderCat Куратор тега CSS
    {PHP, MySql, HTML, JS, CSS} developer
    Как вообще задавать фикс значения используя бутстрап?
    Никак, он не для этого.

    Создавать свой класс? Нормально ли вообще создавать свой класс и юзать его в перемешку с версткой на bootstrap?
    Да, создавать, да, нормально.

    Если да, то как организовывать такие классы в файловой структуре, ведь они будут созданы только в том случае, если возможностей бустрапа не хватит.
    Добавляете файл /assets/css/style.css, подключаете после бутстрап.
    Ответ написан
    Комментировать
  • Как правильно верстать используя bootstrap?

    @alexalexes
    При использовании bootstrap вы не можете мыслить фиксированными шириной.
    У вас есть 12 колонок - 12 долей единиц ширины экрана, и есть с полдюжины разных размеров экранов.
    Самый маленький, малый, средний, большой и очень большой.
    И логика расстановки классов такая:
    "На большом экране и больше у меня слайдер будет шириной 6 из 12 колонок,
    на среднем 8 из 12 колонок,
    от малого и меньше 12 из 12 колонок".
    С этой логикой и навешиваете нужный набор классов на контейнер слайдера.
    JS код не должен фиксировать размер контейнера в пикселях, нужно ему позволить расширяться по bootstrap сетке.
    Ответ написан
    Комментировать
  • Зачем для кеширования использовать Redis, если можно сделать файловое кеширование?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вы очень узко понимаете понятие кэширования.
    И забываете о том, что из кэша не только читают, но в него еще и пишут.
    в .php файлах эффективнее хранить не кэш, а какую-то статичную информацию, которая редко изменяется (скажем, только при деплое), и при этом общую для всех пользователей. При соблюдении этих условий кэширование в .php файлах вполне себе используется.

    Но понятие кэша гораздо шире. Кэшироваться может и специфичная для конкретного пользователя или запроса информация. В этом случае никаких .php файлов не напасешься.

    Кроме того, перезапись файлов - это не атомарная операция. И получать ошибку синтаксиса, пока файл еще не записался, а его уже инклюдят, никто не хочет.
    Плюс состояние гонки, когда два процесса пытаются записать в один и тот же файл.

    Еще одна причина, не главная, но все равно важная - масштабирование. Один сервис редиса можно использовать с несколькими инстансами РНР. Плюс сам редис можно масштабировать на несколько физических инстансов.
    Ответ написан
    Комментировать
  • Как присвоить класс тегу body?

    Stalker_RED
    @Stalker_RED
    // определяем есть ли элемент с классом .stories-slider-in
    const hasSlider = !!document.querySelector('.stories-slider-in');
    // переключаем .name в зависимости от hasSlider
    document.body.classList.toggle('name', hasSlider);
    Ответ написан
    Комментировать
  • Как перехватить все существующие типы исключений?

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

    Отдельно следует отметить, что за использование try catch чтобы тупо написать "Получена ошибка" надо бить по рукам. Так никогда не надо делать. Это глупо и бессмысленно. РНР и сам прекрасно выведет и $e->getFile(), и $e->getLine(), и даже $e->getMessage(), и помогать ему в этом не надо.

    Исключение надо ловить только тогда, когда есть определенный сценарий обработки. Например, в случае, если test() выполнилась с ошибкой, то вызвать test2().
    Но главное - внутри блока catch ничего не выводить пользователю.
    Общением с пользователем должны заниматься только специально предназначенные для этого блоки программы. А не любая строчка, которой вдруг захотелось это сделать.

    Поэтому в данном конкретном случае ваша задача еще больше упрощается - не надо ловить вообще никакое исключение.
    Ответ написан
  • Как сделать минималистичную тему для слабого пк?

    @Drno
    Ничего менять ненадо. Все эти темы бесполезны и только мешают обычно.
    Выставьте как предлагают наилучшие быстродействие
    Ответ написан
    Комментировать
  • Как сделать генерацию страницы на сервере?

    Sanes
    @Sanes
    Установите CMS. Со своим велосипедом вы не скоро реализуете. Т.к. компетенции у вас ноль.
    Ответ написан
    Комментировать
  • Как вынести в отдельный файл кастомную директиву Vue 3?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    export default {
      // Когда привязанный элемент будет примонтирован в DOM...
      mounted(el) {
        // Переключаем фокус на элемент
        el.focus();
      }
    }
    Ответ написан
    4 комментария