• Как экранировать sql запрос внутри texarea?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Подготовленные выражения PDO и MySQLi.
    Ответ написан
    1 комментарий
  • Как экранировать sql запрос внутри texarea?

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

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

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Нет, рекурсия работать не будет. Гит увидит, что внутри каталога лежит вложенный репозиторий и проигнорирует его. А в своей базе пометит этот подкаталог как поддерево (subtree), чтобы не сломать.

    Вы пытаетесь соорудить какой-то жуткий костыль только лишь потому, что поленились изучить инструмент, в котором работаете. Поэтому для вас Git сейчас представляется как некая шайтан-машина, которой вы скармливаете команды, которые не понимаете, и в результате получаете ещё более непонятные «неожиданные результаты». Просто потратьте несколько дней, чтобы изучить азы. Не зубрите непонятные команды, а постарайтесь понять логику гита. А она — эта логика предельно проста и гениальна.

    не является сложной задачей что-либо сломать в своем проекте

    Сломать что-то в гите довольно сложно. Вам может только показаться что всё сломалось, но это лишь потому, что вы не понимаете, что делаете.

    каким-то образом снес половину коммитов

    Коммиты в гите — это неизменяемые сущности. Можно лишь создать новые «на замену», но старые не исчезают. Коммиты невозможно удалить без специальных команд очистки мусора.
    Вам показалось что коммиты исчезли, но на самом деле они все остались в репозитории, вы просто их не видите в текущей ветке. Но всё легко откатывается назад, используя журнал Reflog.

    Поэтому было бы неплохо как-либо сохранять прошлые версии Git репозитория

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

    Мой вам совет: Пройдите 16 коротких бесплатных уроков и полу́чите просветление.
    Ответ написан
    2 комментария
  • Что дает горизонтальный скролл?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    body дал overflow - x hidden, не помогает

    А просто overflow?
    Не могу понять что ломает верстку

    В дев режиме браузера удаляйте блоки по очереди, как скролл пропадёт - виновник найден.
    Ответ написан
    3 комментария
  • Почему vs code выдаёт такое?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    В любой непонятной ситуации тыкаешь ctrl+click и читаешь, что там написано.

    В данном случае это ложное срабатывание на попытку переписать window.name. Можешь им баг запилить.
    Еслиб ты сделал так var { name, surname, age } = myUser, то это было бы реальной ошибкой: ты неявно бы менял name окна, но для const это не актуально.

    Ну и, по-хорошему, не стоит заводить переменные в глобальной области. Если ты используешь js-модули или хотя-бы завернёшь свой код в блок или функцию - такой проблемы не возникнет.
    Ответ написан
    1 комментарий
  • Как обойти капчу при при парсинге на PHP?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Конструкция парсера незамысловата

    Вы действительно думали, что можно просто так прийти и 3 строчками кода спарсить ресурсы, где работают отдельные команды для того, чтобы их не парсили?

    Подскажите, пожалуйста, что можно сделать, чтобы спарсить информацию?

    Подключить сервис расшифровки капчи. С таким "незамысловатым" скриптом Вам придется достаточно часто пополнять счет этих сервисов :)
    На прокси можете не тратиться, ибо Вас будут ловить раньше :)
    Ответ написан
  • Файл конфига php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Очень хороший вопрос, только вы путаете файл с настройками и файл первоначальной настройки приложения.
    Вам нужны оба.
    1. файл c настройками
    Их должно быть два.
    Первый файл называется config.sample.php, он содержит только один массив, который заполняется пустыми/дефолтными значениями и может содержать не только настройки БД но и содержать другие секции:
    <?php
    return [
      'db' => [
        'hostname' => '',
        'username' => '',
        'password' => '',
        'database' => '',
      ],
    ];

    Этот файл добавляется в репозиторий.

    Второй файл называется config.php и он создается руками каждый раз при установке CMS на новом сервере. В него пишутся актуальные настройки для каждого сервера.
    Этот файл не добавляется в репозиторий (а добавляется, соответственно, в .gitignore).

    2. Файл первоначальной настройки приложения.
    В него идут команды, которые пишутся на любой странице: подключение к БД, старт сессии, всякие инклюды и прочее. Кроме того, в этом файле должен быть код
    if (!file_exists('config.php'))
     {
         $msg = 'Создайте файл config.php на основе config.sample.php и внесите в него настройки';
         throw new RuntimeException($msg);
     }


    Таким образом система будет помогать программисту, если он забыл создать config.php с актуальными для конкретного сервера настройками.

    И вот этот файл, назовем его init.php, уже и подключаем во все остальные файлы.

    Кстати, начиная с 8 версии РНР можно писать просто
    $conn = mysqli_connect(...$config['db']);
    В этом случае ключи массива $config['db'] будут использоваться в качестве имен параметров функции - очень удобно
    Ответ написан
    Комментировать
  • Почему в php нельзя уточнить класс аргумента при имплементации интерфейса?

    LSP нарушается - интерфейс требует чтобы реализация в качестве аргумента могла принимать любую реализацию ArgInterface, а вы пытаетесь ограничится только одной.
    Ответ написан
    Комментировать
  • Почему в php нельзя уточнить класс аргумента при имплементации интерфейса?

    vabka
    @vabka
    Токсичный шарпист
    Потому что это бы нарушало принцип подстановки Барбары Лисков.

    Интерфейс предполагает, что ты можешь принимать любой объект, который реализует интерфейс ArgInterface.
    => Если ты сузишь тип, то ты уже по факту не сможешь поддерживать контракт.

    По тому при реализации интерфейса можно только расширять тип принимаемых аргументов, но не сужать.
    Ответ написан
    Комментировать
  • Почему при вложении тега address в тег p не применяется стиль?

    modelair
    @modelair
    unsocial
    в данном случае спецификация HTML не позволяет вставлять тег address в p.
    спецификация говорит, что тег привязан к определенному article или body для уточнения.
    также она говорит, что не все что в p будет в p

    если посмотреть в devtools (что я вам рекомендую делать всегда), то видно, что этот тег отрисован после p.
    ну и в целом это освещено в поиске.
    тут
    Ответ написан
    2 комментария
  • Как кастомизировать ошибки валидатора чтоб они выдавали синоним названия поля?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    https://laravel.com/docs/10.x/validation#customizi...
    Редкий случай, когда obligatory комментарий от JhaoDa действительно уместен.
    Ответ написан
    2 комментария
  • Как правильно делать запросы в цикле?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    it depends

    • если запросы зависимые, то в цикле
    • если запросы можно выполнить "параллельно", то можно асинхронно сделать сразу все 4 запроса и подождать самый медленный


    например через multi curl, тогда все 4 запроса будут выполняться за время самого медленного из них, а не за сумму времени, удобно через Guzzle Async

    $promise1 = $client->getAsync('http://www.example.com/foo1');
    $promise2 = $client->getAsync('http://www.example.com/foo2');
    $promise3 = $client->getAsync('http://www.example.com/foo3');
    $promises = [$promise1, $promise2, $promise3];
    
    $results = GuzzleHttp\Promise\settle($promises)->wait(); // тут все результаты


    в обоих случаях не понятно, зачем таймаут, тк синхронно второй запрос начнется только ПОСЛЕ выполнения предыдущего, а в асинхронном варианте они просто выполнятся "одновременно" и вы получите результат сразу от всех запросов... таймаут ни к селу ни к городу
    Ответ написан
    1 комментарий
  • Есть несколько визуально одинаковых блоков. Как сделать, чтобы у них все параметры в сss были одни, а фоновые изображения разные?

    MrDecoy
    @MrDecoy Куратор тега CSS
    Верставший фронтендер
    как правильно присвоить доп класс, чтобы это работало

    Во-первых, не существует "правильно". Если работает и никого это не смущает - значит решение приемлемое.
    Во-вторых, зависит от того, придерживаетесь ли Вы какой-то методологии или нет. Поэтому ответ будет в наиболее распространённом варианте - будто бы придерживаетесь БЭМ.

    .block-name { // название класса блока - block-name
      // основные стили
    }
    
    .block_type_codestyle{ // добавляем модификатор type со значением codestyle (потому что блок про кодстайл, хотя это не лучший подход для выбора названия класса, но для примера пойдёт)
      // стили, специфичные для этого блока. Например, конкретное фоновое изображение.
    }


    Однако, такой подход подойдёт для статических сайтов, но не подойдёт для сайтов, у которых контент может меняться через систему управления контентом - CMS.
    В таком случае, ссылка на изображение должна устанавливаться не в стилях напрямую, а где-то в HTML. Как правило - inline стилях.
    То есть:
    <div class="block-name" style="background-image: url('...')" >...</div>
    .

    Однако, так же стоит учесть нюанс, что изображение могут быть контентно значимыми (но вроде бы не Ваш случай). То есть изображение, которое насёт полезную нагрузку для информирования пользователя.
    В таком случае, это должны быть не фоновые картинки, а img.
    Ответ написан
    3 комментария
  • Можно ли вставлять свёрстанные блоки на другие страницы HTML?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Нужно верстать их снова и дублировать стили, или же я могу просто копировать уже свёрстанные блоки

    но тогда будут разные названия классов и уже получиться не по БЭМ

    При это БЭМ наоборот намекает - использовать повторно повторяющиеся блоки...

    но тогда будут разные названия классов

    Можно сделать так:
    .price.price--one .price-card .price-card__name
    .price.price--two .price-card .price-card__name

    Повторяющийся блок:
    .price-card .price-card__name
    Дополнительная стилизация "повторяющегося блока".
    .price.price--one .price-card .price-card__name

    UPD:
    Обратите внимание на ответ zkrvndm
    Ты можешь использовать iframe для отображения одного и того же блока на множестве страниц.

    Для конкретно Вашей задачи я таким бы не занимался (БЭМ это итак решает), а вот для SEO (органического продвижения) фреймы будут очень кстати, они позволят избежать склейки страниц в выдаче.
    Ответ написан
    1 комментарий
  • Как сделать в MySQL изменение поля строки через время?

    Lastor
    @Lastor
    В чем сила, брат? В ньютонах.
    Вообще это очень нерационально гонять mysql почем зря каждую секунду.
    Более целесообразно при выборке вместо поля suc проверять разницу текущего времени с полем date.
    например
    select * from tableName where `date` > now() - interval 10 day

    А если suc принципиально нужен, то:
    select id, login, `date`, (`date` > now() - interval 10 day) as suc from tableName
    Ответ написан
    Комментировать
  • Как при переустановке Windows перенести браузеры без потери данных?

    Sanes
    @Sanes
    У всех браузеров есть синхронизация с их серверами.
    Ответ написан
    2 комментария
  • Как это сверстать?

    @leeroyjenkins176
    img {
    border-radius: 50%;
    border: 8px solid #fff;
    }

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

    @alekssamos
    Программист любитель
    curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');

    При каждом запросе.
    И возможно нужно будет передавать referer
    Ответ написан
    1 комментарий
  • Как из коллекции, получить Input в котором произошло изменение?

    Stalker_RED
    @Stalker_RED
    form.addEventListener('change', function(evt){
      console.log(evt.target, evt.target.value);
    });
    Ответ написан
    Комментировать