• Как перевести пароли с md5 на bcrypt?

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

    @alexalexes
    Обрабатывать пришедшие данные налету или перезаписывать в файлы?
    Зависит от того, хватает ли выделенной оперативной памяти PHP скрипту если попытаться сформировать тело $xml_post_string с бинарником. Если размер файлов, перекодированных в base64 в большинстве случаев заведомо меньше чем возможности ОЗУ скрипта, то смело можете налету обрабатывать.
    Если нет, то принимаете все меры предосторожности, чтобы скрипт не хапнул лишних данных, вызывая переполнение выделенной ОЗУ, (если такая ситуация случится, то скрипт умрет молча, не выдав исключение). Записываете временный файл из $_FILES, порционно формируете другой временный файл с форматом $xml_post_string. Потом присоединяете данные этого файла к curl и отправляете.
    Ответ написан
    Комментировать
  • Организация базы данных mysql?

    @alexalexes
    Смотрите, как реализовывается связь "многие ко многим".
    То есть, вам нужна промежуточная третья таблица.
    partner_and_product_type
    part_id - идент. партнера
    prod_type_id - идент. типа продукции.
    Тогда сможете вносить на любого партнера несколько типов продукции.
    Ответ написан
    2 комментария
  • Как сделать 2 рабочих стола на 2 мониторах со своими активными окнами?

    @alexalexes
    В Windows вы не развяжите органы управления, чтобы мышь и клавиатура была своя на каждый рабочий стол. Так что в каком-то виде виртуализация нужна, чтобы такое сделать.
    Ответ написан
    1 комментарий
  • Можете помочь с драйверами для матринки Intel dz77bh-55k?

    @alexalexes
    Тут вроде бы есть непропатченные агрегатором драйверов архивы.
    https://driver.ru/?H=DZ77BH-55K&By=INTEL
    Попробуйте установить драйвера, которые для windows 7 x64.
    PS: Сейчас трудно найти исходные архивы драйверов, которых не коснулась рука агрегаторов.
    Берегите такие файлы, если планируете до последнего замучить материнку или ноутбук.
    Ответ написан
    Комментировать
  • Почему SQL-запрос возвращает дубли?

    @alexalexes
    Выведите все свойства выборки - увидите разницу в строках.
    SELECT *
      FROM

    Нужны уникальные строки - придумайте как их проранжировать и отсечь лишние порядковые номера ранжа.
    Если лень разбирать, то используйте distinct, скорость выборки будет страдать, если строк и колонок много.
    Ответ написан
    3 комментария
  • Как избежать явного первичного ключа?

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

    @alexalexes
    Зависит от назначения блоков.
    Точные размеры, да, возможно, примените пиксели, а может и сантиметры или дюймы.
    Относительные размеры понадобятся - возьмете проценты.
    Растягивать относительно содержимого - вообще будет auto.
    Адаптивно будете работать - еще куча альтернативных размеров появится в медиа-запросах.
    Ответ написан
    Комментировать
  • Простая производная?

    @alexalexes
    Чисто дилетантский разбор примера по школьным воспоминаниям:
    (y - w * x) ^ 2 = y ^ 2 - 2ywx + (wx) ^ 2
    Смотрим, что будет с каждым слагаемым правой части выражения, если применить производную относительно w:
    y ^ 2 = будет константой, сразу забудем про нее.
    - 2yx = коэф. первого порядка (смотрим в школьные правила, что-то происходит с линейными функциями).
    2x ^ 2 w = коэф. второго порядка (смотрим в школьные правила, что-то происходит с параболой).
    Получим:
    - 2yx + 2x^2 w
    Что-то вынесем за скобки:
    2x (-y + xw)
    Красиво напишем минуc:
    -2x(y - xw)
    Ответ написан
    1 комментарий
  • Как отфильтровать массив php через foreach?

    @alexalexes
    Вы еще извращеннее вывод могли придумать, чтобы избегать накопления вывода в отдельной переменной, чтобы код был максимально неподдерживаемый для разработки?
    Вот решение:
    <?foreach ($arResult["PARTNERS"] as $partners) {if($partners['NAME']=='test')continue;?>
    Ответ написан
    1 комментарий
  • Как добавить текст к value при отправке?

    @alexalexes
    Добавляете еще одно скрытое поле с id="field_name_hidden", видимому полю присваиваете id="field_name_showed". Добавляете форме свой обработчик события onsubmit.
    <form .... onsubmit="my_submit(e)">
    ...
    <label>Имя</label>
    <input id="field_name_showed" type="text"  value=""> <!-- Поле, которое видит пользователь -->
    <input id="field_name_hidden" type="hidden"  value=""> <!-- Скрытое поле для отправки -->

    function my_submit(e)
    {
      e.preventDefault(); // останавливаете выполнение сабмита
      document.getElementById("field_name_hidden").value = document.getElementById("field_name_showed").value + " (добавленный текст)"; // добавляете в скрытое поле формы имя и что хотели еще.
     e.target.submit(); // перезапускаете сабмит формы
    }

    На стороне сервера перехватываете значение поля field_name_hidden.
    Ответ написан
    Комментировать
  • С помощью чего можно написать CMS?

    @alexalexes
    Берете любой готовый курсач по теме "Создание интернет магазина" из курса "Сетевые информационные технологии".
    Например, такой (не факт, что рабочий).
    Смотрите, чтобы в приложениях к курсачу были все исходники css/js/php/html.
    Если поделка запустилась и выполняет базовые действия с регистрацией, наполнением корзины, и возможно, создания заказа. То вы получили минимальный стенд, чтобы посмотреть как оно работает без CMS.
    PS: На бою использовать крайне не желательно, если только вы уже знаете все подводные камни, на которые натыкаются студенты и как доработать это напильником.
    Ответ написан
    1 комментарий
  • Как пересобрать массив с элементами?

    @alexalexes
    Если вы видите, что пишите один и тот же код повторно, значит, пора общую часть кода выносить в функцию или метод. И эта ситуация может случиться не обязательно в модуле валидации.
    Пишите базовые функции:
    а) проверка обычной строки на минимум и максимум по длине;
    б) проверка радиокнопки;
    в) проверка чекбокса;
    г) выпадающего списка.
    Все остальные функции будут вызывать что-то из этого базиса и допроверять свойства поля, например, email вы проверяете функцией А на корректность длины, а потом валидность по регулярке. Если длина не та, то предупреждения выведете из функции А, а регулярку не станете проверять, а если косячит по регулярке, то уже будет предупреждение, что email некорректен.
    Ответ написан
    1 комментарий
  • В каком виде хранить данные о товарах в бд?

    @alexalexes
    В таблице param задавайте тип данных этого параметра, а таблице product_param весь набор полей данных, который нужен будет для описания любого параметра. Могут быть не только типы, стандартные для БД, но и по предметной области (интервалы, габариты и тд).
    param (id, type_data /*тип данных параметра или размерность (лучше размерность вынести еще одним свойством)*/, name)
    product_param (product_id, param_id,
    value_int -- целое
    value_int2 -- целое для типов интервалов целых (с value_int по value_int2 )
    value_str -- строка
    value_date -- дата
    value_date2 -- дата для типов интервалов дат (с value_date по value_date2)
    )
    Ответ написан
    Комментировать
  • При выборке двух таблиц с БД одним запросом, на выводе получаются дубликаты. В чем может быть проблема?

    @alexalexes
    Если просто нужен флаг, что товар в корзине, то достаточно этого запроса.
    SELECT p.*,
                case
                   when exists(SELECT 1 from cart c where c.products_id = p.id)
                   then 1
                   else 0
                end is_exists_in_cart -- есть товар к корзине? 0 - нет, 1 - есть
    FROM table_products p

    Если нужны параметры товара, а не только его наличие, то как минимум будет такая конструкция:
    SELECT p.*, c.*
    FROM table_products p
    left join cart c on c.products_id = p.id

    PS: Конструкция запроса может сильно меняться от того, какие свойства вам нужно извлечь, чтобы вывести в итоговую выборку.
    Ответ написан
    Комментировать
  • Не могу отследить http запрос при нажатии на кнопку сайта?

    @alexalexes
    Если это страница сайта, то берете браузер Chrome. Открываете панель разработчика F12, открываете вкладку Network, включаете прослушивание, устанавливаете вывод всех типов запросов. И жамкаете нужную кнопку, ни один запрос не проскочит без регистрации.
    Ответ написан
    1 комментарий
  • Как зупустить таймер по окончанию?

    @alexalexes
    Создайте функцию получения времени следующего понедельника
    function init_counter_time()
    {
    var d = new Date();
    d.setDate(d.getDate() - (d.getDay() + 6 ) % 7 + 7);
    d.setHours(0);
    d.setMinutes(d.getTimezoneOffset()); // компенсируем смещение временной зоны у пользователя.
    d.setSeconds(0);
    d.setMilliseconds(0);
    return d.getTime(); // обратите внимание, что время извлекается по таймзоне +0000!!!
    }

    И используйте при инициализации:
    // var countDownDate = new Date('10 October 2020 21:00').getTime();
    var countDownDate = init_counter_time();

    и при обнулении счетчика:
    if (distance < 0) {
           // clearInterval(x);
          countDownDate = init_counter_time();
        }
    Ответ написан
    1 комментарий
  • При переносе скрипта из .html файла в .js он перестает работать. Почему?

    @alexalexes
    DOM еще не доступен, когда скрипт пытается работать с его элементами.
    Два пути решения:
    а) Перенести подключение js файла после тега body.
    б) Изменить работу скрипта так, чтобы работа с DOM началась после загрузки DOM-дерева.
    Ответ написан
    1 комментарий
  • Как обернуть заголовок товара в тег a?

    @alexalexes
    Попробуйте тег a тоже поместить в the_title().
    <?php the_title('<a href="'.the_permalink().'" class="wpb-wps-product-title"><p class="pro title">', '</p></a>') ?>
    Ответ написан
  • Почему так рано удаляется временный файл?

    @alexalexes
    public function  getTemplatePath(где аргумент $template?)
    Ответ написан