• Как сделать бэкап базы данных mysql с помощью php?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Для следует указать путь к исполняемому файлу:
    $path = 'C:\path\to\mysqldump\';
    exec("{$path}mysqldump --user={$user} --password={$pass} --host={$host} {$database} --result-file={$dir} 2>&1", $output);
    Ответ написан
    Комментировать
  • Как очищать текст в php?

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

    На самом деле этот вопрос встречается довольно часто. Вот например популярный ответ на Stack Overflow, который подробно разбирает этот распространённое заблуждение: https://stackoverflow.com/a/3126175. И основная мысль там:

    Понятие такой генерализованной "очистки данных" изначально бессмысленное и вредное.

    Особенно такой вот индусской функцией, которая сама по себе - пример редкого идиотизма: сначала заменяем символы < и > на HTML сущности... а потом бодро пытаемся вырезать HTML теги. Которых к этому моменту в тексте не останется ни одного!
    Или функция stripcslashes, которая здесь вообще ни к селу, ни к городу. Если я хочу написать сочетание \n, то с какой стати эта функция будет заменять его на перевод строки?
    Всё что можно оставить из этого безумного набора - это trim(). Да и то не всегда. Как правильно заметил Rsa97, могут быть случаи, когда лидирующие пробелы имеют значение, например, при выводе форматированного кода. Кстати, этим как раз грешит Хабр. Если запостить код с отступами, то первый будет "съеден"!


    Очистка

    Любая "очистка" (хотя правильнее говорить про форматирование), имеет смысл только в определённом контексте.
    И поэтому "очищать" надо только адресно, строго перед использованием в том или ином конкретном случае.

    Например, базе данных ни жарко, ни холодно от наличия HTML тегов.
    А проблемы могут начаться только при выводе данных в HTML. Но если мы будем предотвращать эти проблемы заранее, то просто попортим кучу данных. Поэтому форматировать данные для использования в контексте отрисовки HTML следет строго перед этой отрисовкой. То есть при выводе.
    Что и делают все популярные РНР шаблонизаторы автоматически.
    То есть вручную колупаться с "очисткой" вообще не нужно.

    Больше того, "очистка" HTML поможет данным, выводимым в яваскрипт, как мёртвому припарки. То есть опять же - всегда надо понимать, в какой именно контекст мы выводим данные, и форматировать соответствующим образом. В частности любые данные передавать в яваскрипт только через json_encode()

    И таких контекстов неисчислимое множество. Например, если мы используем переменную для передачи параметров в консольный скрипт, то надо обязательно обрабатывать её через escapeshellarg(). Если в регулярку - то preg_quote(). Имя файла для инклюда из переменной (хотя так делать вообще не стоит) надо хотя бы обрабатывать через basename(). И так далее.

    Валидация

    Если же наличие HTML тегов в поступающих данных противоречит техническому заданию, то надо заниматься не "очисткой", а валидацией: проверить регулярным выражением, есть ли в строке HTML теги. И если есть, то вернуть пользователю с сообщением об ошибке.

    Защита БД

    И кстати, по поводу "использую pdo".
    На всякий случай уточню, что само по себе использование PDO не защищает ни от каких проблем
    Важно помнить, что защита - это когда в базу данных отправляется строго константная строка запроса, полностью на 100% составленная из значений, прописанных в коде РНР, и в ней не используется ни одно значение, пришедшее в код извне. Причем PDO помогает здесь только наполовину, позволяя использовать в запросе подстановки вместо самих данных.
    Но при этом для всех остальных частей запроса - например имен полей - у ПДО нет никакой защиты и её надо организовывать самостоятельно. Либо проверяя по белому списку, лабо, по крайней мере, прогоняя через регулярку.
    Ответ написан
    13 комментариев
  • Как переписать данный код для версий PHP ниже 7.4?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    https://www.php.net/manual/ru/functions.arrow.php
    $res = array_map(function($post) { return $post['tab']; }, $page_data);
    Ответ написан
    Комментировать
  • Как удалить пустые строки в гугл таблице?

    Krasnoarmeec
    @Krasnoarmeec
    Попробуйте выделить строки целиком и удалить их, щёлкнув по ним правой кнопкой мыши и выбрав пункт "удалить" из выпадающего списка.

    В гугл-таблицах я не спец, но обычный Эксель видит разницу между строками, удалёнными клавишей "Del" и строками, удалёнными вышеприведённым методом.
    Ответ написан
    Комментировать
  • Как сделать такой абсолютный путь?

    DevMan
    @DevMan
    <img src="/img/image.jpg" > этого достаточно для работы на любом домене с любой схемой.
    если же реально нужно иметь домен в ссылке, то программно вычислять.

    также есть тег base.

    в общем все зависит от потребности.
    Ответ написан
    2 комментария
  • Как подключить (аналог php include) html файл в js?

    @zkrvndm
    Софт для автоматизации
    Если на сайте подключен jQuery, то просто используйте метод load, чтобы вставить HTML файл внутрь нужного вам блока:
    https://basicweb.ru/jquery/jquery_method_load.php

    Пример:
    $('.top-section').load('hello.html');
    Ответ написан
    1 комментарий
  • Как подключить (аналог php include) html файл в js?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    const sectionHtml = await fetch('hello.html');
    document.querySelector('.top-section').innerHTML += await sectionHtml.text();
    Ответ написан
    Комментировать
  • Как подключить (аналог php include) html файл в js?

    Stalker_RED
    @Stalker_RED
    Jesse Pinkman, если вы хотите сделать это из браузера, то в любом случае браузеру нужно сделать запрос, через xhr или fetch. И нет, встроенной такой опции нет, разве что iframe.
    Что "ужасного" в вашем способе?

    Можете вынести запрос в отдельную функцию, и вызывать в нужном месте, типа
    insertHtml('#target_block', '/hello.html')
    передавая только селектор блока или блок, в который нужно вставить, и url фрагмента.

    Есть и готовые скрипты такого рода, тот-же includeHTML от xmoonlight
    Ответ написан
    2 комментария
  • Как сделать вариативность в данном квизе?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Такой квиз – это дерево. На каждом шаге выбирается одна из ветвей.

    Можно добавлять ветви через поле типа "child" в каждом из вариантов:
    spoiler
    const quiz = {
      question: 'Выберите один вариант',
      choices: [
        {
          answer: 'мотоцикл',
          child: {
            question: 'Выберите модель мотоцикла',
            choices: [
              { answer: 'Гоночный', child: { ... } },
              { answer: 'Чоппер', child: { ... } }
            ]
          }
        },
        {
          answer: 'Машина',
          child: {
            question: 'Выберите модель машины',
            choices: [
              { answer: 'Ока', child: { ... } },
              { answer: 'Bentley', child: { ... } }
            ]
          }
        }
      ]
    },

    На практике не очень удобно описывать такую структуру глубоко – легко ошибиться со скобками и пр. В недавнем эксперименте я предпочёл описывать дерево в YAML – там просто отступами – и генерить скриптом из него уже нужную структуру в JSON.
    Ответ написан
    6 комментариев
  • Как убрать черный фон canvas?

    Fragster
    @Fragster
    помогло? отметь решением!
    Он прозрачный, просто ты его сам закрашиваешь:
    const clear = () => {
        c.fillStyle = "black";
        c.fillRect(0, 0, canvas.width, canvas.height);
      };


    тут в комментариях пишут, что можно заменить на clearRect, и это работает: https://jsfiddle.net/x0956rs3/
    Ответ написан
    6 комментариев
  • Как убрать черный фон canvas?

    kleinmaximus
    @kleinmaximus
    Senior Full-stack Javascript Developer
    Можно попробовать

    const clear = () => {
      c.clearRect(0, 0, canvas.width, canvas.height);
    };
    Ответ написан
    Комментировать
  • Для отправки сообщение боту нужен ли ssl?

    Nordic_Alf
    @Nordic_Alf
    PHP Developer
    Ты всегда обязан ставить шифрование первым делом для любого хостинга, для апишки телеграм-бота с использованием вебхука обязательно SSL нужен. Устанавливается бесплатно Let's Encrypt за 5 минут.
    Ответ написан
    Комментировать
  • Для отправки сообщение боту нужен ли ssl?

    SagePtr
    @SagePtr
    Еда - это святое
    Ну, если ругается на его отсутствие - значит, нужен. Да и без SSL как-то опасно, в трафик могут вклинить всё, что угодно (с SSL - могут только заблокировать, но не изменить).
    Ответ написан
    Комментировать
  • Как обновлять дату каждые n-дней, статический сайт?

    @antares4045
    Кроме как через JS на сегодняшний момент опций соверменный веб не предоставляет (кроме совсем экзотичных вариантов вроде открытия айфрейма на сервис, который вычисляет необходимую дату).

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

    <span class="myDate"></span>
    
    
        <script>
    const startDate = new Date('2021-08-06')  //устанавливаем дату начала интервала 
    const now = new Date() //определяем текущую дату
    const delta = Math.trunc((+now - +startDate) / 3 / 24 / 3600 / 1000); // вычисляем количество трёхдневных интервалов которые прошли с момента startDate
    
    const resDate = startDate
    resDate.setDate(resDate.getDate() + delta * 3) 
    //итоговая дата -- это стартовая дата + количево вычислиных трёхдневных интервалов, вычисленных на предыдущем шаге, умноженые на 3
    
    const dateTag = document.querySelector('.myDate') //находим тег, в котором должна оказаться новая дата
    dateTag.textContent = resDate.toLocaleString('ru', {day : '2-digit', month : 'long'})
    //устанавливаем дату в соответствии с форматом DD MMMM (можете подобрать любой другой) 
        </script>


    теперь при каждом обновлении страницы дата в поле будет соответствовать требованиям
    с точки зрения ux я бы порекомендовал прикрутить здесь ещё интервал, чтобы дата обновлялась сама по себе раз в 10 минут и без перезагрузки

    <span class="myDate"></span>
    
    
        <script>
    
    function updateDate(){
        const startDate = new Date('2021-08-06')
        const delta = Math.trunc((+new Date() - +startDate) / 3 / 24 / 3600 / 1000);
        startDate.setDate(startDate.getDate() + delta * 3)
        document.querySelector('.myDate').textContent = startDate.toLocaleString('ru', {day : '2-digit', month : 'long'})
    }   
    
    updateDate() //обновляем дату при загрузке станицы
    setInterval(updateDate, 10 * 60 * 1000) //затем обновляем данные каждые 10 минут
    
        </script>
    Ответ написан
    Комментировать
  • Как обновлять дату каждые n-дней, статический сайт?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Прописать какую-то дату как начало отсчёта, откуда далее трёхдневными шагами будет идти:
    const startDate = new Date(2021, 7, 8); // начало отсчёта
    const today = new Date(); // сегодня
    const daysPassed = Math.floor((today - startDate) / 864e5);
    const future = new Date();
    future.setDate(future.getDate() + 3 - daysPassed % 3);
    
    document.querySelector('span.myDate')
      .textContent = new Intl.DateTimeFormat(
        'ru-RU',
        { month: 'long', day: 'numeric' }
      )
      .format(future);
    Ответ написан
    3 комментария
  • Как обновлять дату каждые n-дней, статический сайт?

    @zkrvndm
    Софт для автоматизации
    JavaScript-ом запрашивайте дату с любого публичного сервера, их дохрена. Далее эту дату тупо подставляйте куда надо. При этом вы избежите привязки к дате компьютера пользователя.
    Ответ написан
    Комментировать
  • Как подключить html к wordpress?

    srabon
    @srabon
    HI, there I'm professional Digital Marketer.
    Manually convert your static HTML site to WordPress

    Step 1: Create a new theme folder and the necessary files. On your desktop, create a new folder to hold your theme files. ...

    Step 2: Copy the existing CSS to the new stylesheet. ...

    Step 3: Separate your current HTML. ...

    Step 4: Finalize your index.fp file. ...

    Step 5: Upload your new theme.
    Ответ написан
    Комментировать
  • Как сделать такое на canvas?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Эффект наз. starfield, вот разбирают как сделать на canvas. В простом виде: летят точки. Для красоты надо их сделать меньше числом, но каждой добавить размытие-свечение.

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

    Используя полупрозрачность и режимы наложения, можно отрисовав кругов 20 получить интересные эффекты:
    Ответ написан
    1 комментарий
  • Как сделать, чтобы телеграм-бот отвечал уже вычисленным числом?

    Vindicar
    @Vindicar
    RTFM!
    1. Поставь обработчик "входящее сообщение".
    2. Прогони текст сообщения через float(), а для надёжности можно попробовать использовать locale.atof() - оно понимает региональное форматирование. Например, в США сумма "5,000.00" а у нас "5 000,00", причем и там и там могут написать просто "5000". Выцепить все варианты будет непросто, но atof() для начала сойдёт.
    3. Рассчитай проценты.
    4. Ответь на сообщение рассчитанной суммой процентов.

    Вот и всё. Если хочешь код - изволь предоставить то, что написал сам (и оформить кнопкой </>).
    Ответ написан
    5 комментариев
  • Как синхронизировать github репозиторий в vscode?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Так нужно было не только файлы с кодом на флешку скопировать, но и сам локальный репозиторий, который в папке .git. И ты бы продолжил на другом компьютере коммитить в репозиторий. Git хранит свой репозиторий локально в папке проекта и интернет для работы с ним не нужен.

    А правильней было копировать ТОЛЬКО сам репозиторий на флешку. И не в виде папки, а одним файлом, так надёжнее и быстрее. Для этого даже специально придумали команду git bundle. Затем на новом компьютере распаковываешь файл пакета и восстанавливаешь рабочий каталог.

    Сам создал себе проблему на пустом месте, но она легко решаема:

    Если ты вернулся на рабочий компьютер, то просто удали все файлы с кодом из рабочей папки и верни туда файлы с флешки. Git сам увидит какие файлы были удалены и какие изменены или добавлены. ВСЁ.
    Останется закоммитить изменения и потом отправить их на гитхаб.

    Либо если ты нашел другой компьютер с интернетом, то клонируй туда снова свой проект с гитхаба (надеюсь ты не забыл сделать push перед тем как копировать файлы на флешку?) и потом так же очисти рабочий каталог и запиши изменённый проект на это место.
    Ответ написан
    1 комментарий