• Какие проблемы могут возникнуть при работе программы с файлом БД из удаленной папки?

    @alexalexes
    Вариант с стандартным сервером БД, решающий все вопросы выше пока исключен.

    Вы не ищите легких путей. Перестаньте мыслить файлами с общим доступом в качестве хранилища. Эту роль как раз целиком и полностью берет полноценная СУБД в вашем кейсе.
    Ответ написан
    Комментировать
  • Как сделать такую штуку в HTML?

    @alexalexes
    Можно честно спиратить из vk.com плашку "Новые сообщения".
    <h4 class="im-page--history-new-bar _im_unread_bar_row">
    :before
    <span>Новые сообщения</span>
    :after
    </h4>
    Ответ написан
    Комментировать
  • Как извлечь данные записи бд по кнопке?

    @alexalexes
    В href записываете get параметр id строки.
    <a href="?id=1">см. запись</a>
    Если текущий список php используется для вывода всего списка, то скрипт нужно модифицировать так, что принимая параметр id, он начал работать по логике вывода сведений одной строки. Нет параметра - выводим все.
    if(isset($_GET['id']))
    {
      // тут код или вызов функции для работы с одной записью
    }
    else
    {
      // тут код или вызов функции для вывода всего списка
    }

    В ветке кода, где работаем с одной записью, подставляем get параметр в запрос:
    msqli_prepare("текст запроса ... where id = ?"); // ставим в нужное место запроса параметрические метки
    msqli_bind_param("i", $_GET["id"]); // передаем параметр на место меток-вопросов, в каком порядке они идут
    msqi_execute();
    // msqli_fetch функция и форматированный вывод сведений

    PS: msqli_* примерно накидал, смотрите документацию, как их вызывать. Идея и порядок кода примерно такой будет.
    Ответ написан
  • Как сформировать массив, длина которого будет равна количеству элементов, удовлетворяющих условию?

    @alexalexes
    Самое ленивое исправление - заменить n на k в двух местах.
    Console.WriteLine("\nЭлементы нового массива: ");
    for (int i = 0; i < n /* тут заменить на k */; i++)
                {
                    Console.Write(n_numbers[i] + " ");
                }
    
                Console.WriteLine("\nЗначение среднего арифметического нового массива: " + SearchAverage(n_numbers, n /* тут заменить на k */));
    Ответ написан
    6 комментариев
  • Как сверстать блок, чтобы дочерние элементы переносились на новую строку с учетом фиксированной кнопки в углу?

    @alexalexes
    Как упомянуто в соседнем ответе, будет очень костыльно и чисто для спортивного интереса.
    К тому же, есть ограничение на фиксированный размер элемента, которое вам не нужно.
    <style>
        div.container
        {
          display: flex;
          flex-wrap: wrap;
          width: 770px;
          height: 90px;
          background-color: green;
          overflow: hidden;
        }
        div.container > div
        {
          width: 60px;
          height: 25px;
          background-color: #df1245;
          text-align: center;
          margin: 5px;
          padding: 5px 0;
        }
        div.container > div:nth-child(n + 22) /*этим селекторам задаем свойство сортировки элементам, которые идут после кнопки "показать еще" если контейнер будет адаптивным, придется прописывать кучу вариантов nth-child */
        {
          order: 2;
        }
        div.container > label.more
        {
          display: block;
          width: 130px;
          height: 25px;
          margin: 5px;
          padding: 5px 0;
          text-align: center;
          order: 1; /* У кнопки стоит такой индекс сортировки чтобы оказаться между видимыми и невидимыми элементами */
          background-color: #78d412;
        }
        div.container label.more span.less
        {
          display: none;
        }
        #show-more-state
        {
          display: none;
        }
        #show-more-state:checked ~ div.container
        {
          height: auto;
        }
        #show-more-state:checked ~ div.container label.more
        {
          order: 3;
          margin-left: auto;
        }
        #show-more-state:checked ~ div.container label.more span.more
        {
          display: none;
        }
        #show-more-state:checked ~ div.container label.more span.less
        {
          display: initial;
        }
      </style>
      <input id="show-more-state" type="checkbox"/> <!-- Этим чекбоксом запонимаем состояние кнопки, чтобы можно было оттолкнуться стилями от превдокласса :checked -->
      <div class="container">
        <label class="more" for="show-more-state"><span class="more">ПОКАЗАТЬ ЕЩЕ</span><span class="less">СВЕРНУТЬ</span></label>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
        <div>ITEM</div>
      </div>
    Ответ написан
  • Как быть с 4 уровневой вложенностью кавычек в HTML?

    @alexalexes
    На более вложенном уровне экранирования нужно два символа экранирования \
    Первый символ экранирует символ экранирования для следующего уровня.
    Второй символ экранирует кавычку, чтобы не включало закрытие кавычки на уровне PHP.
    $value = '<form method="post">
    <button type="submit" onclick="return confirm(\'Вы уверены, что хотите сменить статус на \\\'Доставлен\\\' ?\')">Доставить</button>
    </form>';

    Вариант 2. Чтобы забыть об экранировании на уровне PHP, можно воспользоваться синтаксисом heredoc, который позволит вставлять любое константное содержимое без явного экранирования.
    $value = <<<ANY_RANDOM_SYMBOLS_FOR_BORDER
    <form method="post">
    <button type="submit" onclick="return confirm('Вы уверены, что хотите сменить статус на \'Доставлен\' ?')">Доставить</button>
    </form>
    ANY_RANDOM_SYMBOLS_FOR_BORDER;
    Ответ написан
    1 комментарий
  • Как исправить ошибку закрытия таба при попытки ввода информации в input?

    @alexalexes
    На элемент inputa type="number" повесить обработчик события клика с вызовом остановки всплытия события.
    PS: Ссылка для получения полного понимания механизма всплытия/погружения событий.
    Ответ написан
    Комментировать
  • Как изменить высоту срабатывания скрипта?

    @alexalexes
    Прибавьте или убавьте к одному из этих операндов.
    pageYOffset < document.documentElement.clientHeight
    Ответ написан
    Комментировать
  • Какой монитор выбрать для программирования 2021-2022?

    @alexalexes
    А причем здесь программирование?
    Вы рассматриваете мониторы, чтобы вам было комфортно играть.
    На любом игровом мониторе можно заниматься программированием в качестве побочной деятельности (как и любым занятием, связанным с вычитыванием и исправлением текста).
    Для комфортной работы с текстом важна достаточная плотность пикселей на экране. Для 24 дюймов FullHD приемлемо, но уже маловато, лучше смотреть от 2K разрешение, для 27 дюймов уже точно нужно 2K и выше.
    Частота кадров тут не важна, хоть 50 Гц, хоть 75, или 144 - для работы с текстом все равно.
    Технологии Low Blue Light, Flicker-Free будут полезны, так как придется пялиться по 8-10 часов в день в экран.
    Из технологий матриц - лишь бы только не классический TN, если будет IPS или VIA - уже супер.
    Всё, больше требований для текста нет. Возможно, подобрать шрифты в редакторе кода, да понять нужно ли включать сглаживание шрифтов.
    Ответ написан
    Комментировать
  • Как понять хорош ли код?

    @alexalexes
    Для анализа производительности необходимо в вашем скрипте поставить контрольные точки, в которых будут логироваться текущее действие. Так можно понять, на что обратить внимание.
    Например, можно составить такой лог:
    0 мс: начало скрипта
    12 мс: начало чтения файла
    24 мс: конец чтения файла
    30 мс: запрос единицы товара
    34 мс: обновление цены единицы товара
    35 мс: запрос единицы товара
    36 мс: обновление цены единицы товара
     ....
    12345 мс: конец скрипта.

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

    @alexalexes
    Все, что можно реально сделать с dimm разъемом, если позволяет фантазия:
    1) Добавить PCIe разъем или парочку SATA для SSD или других накопителей.
    2) Поставить ноутбучную память на настольную материнку.
    Добавить еще одну линию для новой планки ОЗУ - собственно, материнская плата является тем самым переходником между ОЗУ и процессором, в прямом смысле этого слова. Она тупо пробрасывает проводники от контактов процессора до контактов планок ОЗУ. Хотите больше слотов памяти - поставьте другой переходник - материнскую плату, если, конечно, характеристики процессора позволяют (его контроллер памяти).
    Ответ написан
    Комментировать
  • Как убрать одну из прокруток?

    @alexalexes
    CSS свойство элемента overflow дробится на overflow-x и overflow-y.
    Подрегулируйте свойство overflow-x или overflow-y у контейнера .table__wrap

    Чтобы оставить возможность прокручивать контейнер, но не отображать сами полосы.
    Есть определенные CSS-хаки, но они специфичны для каждого браузера: https://qna.habr.com/q/18012
    Ответ написан
  • Как обратиться к id элемента в коллекции?

    @alexalexes
    У вас уже есть коллекция элементов. Зачем вам еще работать с id, если вы их не знаете?
    Просто пробегаетесь по коллекции и что-то там делаете с содержимым каждого элемента, это сразу отразится на DOM (если, конечно, при получении коллекции вы не клонировали элементы).
    let elem_count = elems.length;
    for(let i = 0; i < elem_count; i++)
    {
      let elem = elems[i];
      // что-то сделать с elem
    }
    Ответ написан
  • Насколько сложный пароль стоит иметь от БД?

    @alexalexes
    Второй пароль уязвим, если вы на всех системах, которые администрируете, устанавливаете пароль по похожей маске. Злоумышленнику достаточно узнать, как строится пароль к одной системе, чтобы иметь представление, как подбирать пароль к остальным. Злоумышленник будет использовать ровно ту логику, по которой вам удобнее запоминать пароль.
    Лучше не понижать энтропию ни у какой части пароля, использовать только генераторы случайных символов.
    Ответ написан
  • Какую ОЗУ и какой максимум можно добавить в ноутбук?

    @alexalexes
    У серии ноутов NP300, обычно, потолок 8x2 Гбайт ОЗУ (макс. планки PC3-12800, DDR3 без L).
    Можно комбинировать планки разной емкости, но желательно, чтобы хотя бы одной скорости они были, тогда есть шанс запуститься в полном составе.
    Ответ написан
    Комментировать
  • Как вызывать событие при клике на дочерний элемент?

    @alexalexes
    Если стоит цель обработать клик на конкретном элементе или на его контейнере, то повешайте обработчик на один из этих элементов, а не на весь документ, иначе замучаетесь идентифицировать target.
    let elem = document.querySelector('.elem'); // Берем нужный контейнер
        elem.addEventListener('click' , function(e) // вешаем обработчик только на elem, за счет всплытия события, обработчик будет срабатывать на всех дочерних элементах
        {
          alert('k');
        });

    Если уж хотите оставить обработчик на документе, то идентифицируйте target.
    document.addEventListener('click' , function(e)
        {
          let elem = document.querySelector('.elem');
          if(   e.target == elem // кликнули на сам контейнер elem
             || e.target.tagName == 'SPAN' && e.target.parentNode == elem // или кликнули на какой-то элемент span, непосредственный родитель которого есть наш контейнер elem
            )
          {
            alert('k');
          }
        })
    Ответ написан
  • Как хранить закупочную цену в интернет-магазине?

    @alexalexes
    Элементарно. Если какой-то атрибут может менять значение со временем, то он обретает вид табличных данных.
    Таблица "Цена":
    id_cost - идентификатор цены;
    id_cost_next - следующая цена;
    id_good - идентификатор товара (внешний ключ таблицы "Товары");
    id_delivery - идентификатор поставки (внешний ключ таблицы "Поставки");
    id_type - тип цены: розничная/закупочная (внешний ключ таблицы "Типы цен");
    date_set - дата/время установки цены;
    id_currency - идентификатор валюты: р. руб/евро/доллар (внешний ключ таблицы "Валюта").
    value - значение цены.

    При добавлении нового значения цены необходимо предыдущей записи цены по текущему товару устанавливать id_cost_next равный текущему значению id_cost.
    Текущая цена на товар будет определяться id_cost_next is null, ретроспективные - id_cost_next is not null.
    Самая ранняя установленная цена по товару будет определяться по min(id_cost) в пределах текущего товара.
    Ответ написан
    2 комментария
  • Что значит и как работает аргумент e в данном коде?

    @alexalexes
    У второго параметра replace, когда он используется в качестве функции есть в документации раздел по этому поводу.
    В параметр e передается результат работы регулярки.
    То же самое, что дает метод match применительно к строке.
    Ответ написан
    1 комментарий
  • Как перебирать массивы, которые находятся внутри других массивов?

    @alexalexes
    Итераторов for/foreach в JS вагон и маленькая тележка. Выбирайте, что по душе.
    Самое простое, что можно применить:
    for( let post of _data)
    {
      let body = post.body;
      // что-то сделать с body
      for(let block of body.blocks)
      {
        // что-то сделать с block
        for(let curr_data of block.data)
        {
         // что-то сделать с data в block
        }
        // что-то сделать с block
      }
      // что-то сделать с body
    }
    Ответ написан
    3 комментария
  • Нужно ли проверять длину значений, приходящих от пользователя?

    @alexalexes
    Всегда полезно проверять мин. макс. параметры всех значений и кидать исключение в случае чего.
    А вообще, есть кейсы, где лучше поругаться на слишком большую длину сообщения.
    Например, когда будете сохранять это сообщение в СУБД MySQL в поле типа данных varchar(10000) с превышением длины, то СУБД в случае превышения длины строки по тихому сохранит первые 10000 символов, а переполненную часть - нет. Так что лучше проверить длину сообщения, и если она не соответствует регламентированной, то не давать зеленый свет для обработки.
    Ответ написан
    Комментировать