• Как записать данные с LocalStorage в таблицу?

    @alexalexes
    for(let i = 0;i < rows;i++){ // вы собираетесь сначала создать строку, а по кол-ву строк идут игроки, значит нужно брать число rows, а не cols
            let tr = document.createElement('tr');
      
          for(let j = 0;j < cols;j++){ // а тут cols, но тут еще нужна другая переменная для счетчика, i уже используется для индекса rows
            let td = document.createElement('td'); 
            if(j == 1) // мы ведь хотим добавить контент на вторую колонку (по индексу 1)?
            {
             td.innerHTML = localStorage.getItem(i + ""); // добавляем значение, "" - нужен, чтобы получить ключ по j в виде строки
            }
            tr.appendChild(td);
          }

    ЗЫ: Мне не нравится, что у вас некий массив очков вывален по индексам (которые 0-3) прямо в хранилище по ячейкам ключ-значение. Хорошо бы, чтобы этот массив лежал в одной ячейке хранилища под своим именем. Для этого этот массив нужно преобразовать в JSON и положить в отдельную именованную ячейку. И пользоваться значением этой ячейки нужно будет с кодированием и декорированием JSON строки.
    Ответ написан
    1 комментарий
  • Заморозка сервера в конец срока оплаты?

    @alexalexes
    У PHP сервера есть настройка в конфиге php.ini - макс. время выполнения скрипта - max_execution_time.
    Для долгоиграющих скриптов, обычно, разработчики либо в конфиге (повлияет на все скрипты), либо в htaccess (повлияет на скрипты в пределах каталога), либо в самом скрипте через функцию set_time_limit() корректируют этот параметр, чтобы таким скриптам хватило время на выполнение. Выкручивать этот параметр не нужно для всего сервера, иначе если в частонагруженных скриптах будут проблемы по зацикливанию, то их зависание скушает всю оперативную память сервера при многократном запуске.
    Ответ написан
  • Как ограничить длину массива?

    @alexalexes
    Можно старым добрым процедурным методом ограничить.
    function present () {
      if(visitinMagazine.length < 25)
        visitinMagazine.push(true);
      else
      {
       // что-то сделать при переполнении
      }
    }
    function absent() {
      if(visitinMagazine.length < 25)
        visitinMagazine.push(false);
       else
      {
       // что-то сделать при переполнении
      }
    }

    Или вам нужно чтобы сам тип данных "массив с ограничением" это делал?
    Ответ написан
    Комментировать
  • Как узнать есть ли на кнопке клас?

    @alexalexes
    1. Вставить класс.
    2. Передернуть поток выполнения JS, чтобы класс добавился в DOM, то есть вызвать вашу функцию внутри обертки setTimeout c нулевым временем ожидания.
    Ответ написан
    Комментировать
  • Возможно ли в electron-приложении защитить данные?

    @alexalexes
    Надежен до момента, пока пользователь не имеет возможность скопировать образ раздела жесткого диска с ОС и восстановить его где-нибудь на другом железе/виртуальной машине.
    От какого пользователя защищаетесь?
    От обычного пользователя, у которого нет прав на администрирование/восстановление ОС (или он это не умеет). Или от продвинутого, который за каждой мелочью правит конфиги и реестры, умеет переустанавливать ОС и делать восстановление из образа?
    Если нужно привязать софт к конкретному пользователю и к конкретному железу, то стараются собрать об окружении ОС, в которой выполняется софт, как можно больше сведений: версия ОС, какое имя текущего пользователя системы, идентификаторы процессора, материнской платы - этот набор данных представляет собой фингерпринт, который отправляется при каждом запуске софта на сервер разработчика софта и прикрепляется за учетной записью клиента софта в виде полных сведений, либо в виде хэша по значимым характеристикам (хэш получают только на стороне сервера). Если значимые параметры отличаются от того, что прислал клиентский софт, то значит есть факт изменения конфигурации оборудования и можно принять решение о блокировке софта/учетной записи (оно же лишение лицензии).
    Ответ написан
  • Куда передаются и как извлечь данные через FETCH()?

    @alexalexes
    Объясните простыми словами новичку в javascript, куда передаются данные через fetch

    Данные передаются из браузера (он же клиент) передаются на сервер.
    Постоянно вижу разные примеры кода и везде прописывают файл назначения разным

    Это не файл, это url - адрес на сервере, от которого любым способом запустится какой-то скрипт, который сможет сформировать ответ для браузера (то есть для клиента).
    Если в url указан путь к файлу на сервере, то сервер может отдать статичный файл - но для сервера не принципиально, что отдавать по какому url, можно настроить любые правила взаимодействия.
    А ловят данные вообще через какой-то "php://input"

    Сервер ловит обращение по url (он же запрос), выясняет по настройкам, что нужно сделать: запустить серверный скрипт, отдать статичный файл или ответить каким-нибудь статусом (например, 404). Если по url запрос попадает на запуск скрипта, то в этом скрипте вы можете обработать параметры запроса. Параметры запроса как правило вылавливают в $_GET или $_POST, либо парсят часть url, либо в дополнение смотрят вложения $_FILES.
    Либо в вашем варианте смотрят сырцы запроса через php://input, если что-то нестандартное нужно обработать.
    Тогда зачем вообще эти файлы, которые указывают в Fetch? Причем одни с абсолютным адресом, другие с относительным, где-то указывают расширение (html, json и т.д.), где-то вообще без него.

    Сервер может отдать разные данные клиенту. Где-то их можно забрать из файла статично, где-то сгенерировать ответ серверным скриптом динамично. А можно на статичные пути генерить динамичные данные, по виду url это мало чего говорит.
    Нужно создавать файл какой-то на сервере в который якобы будет передаваться эта информация из JS через POST запрос?

    Да, на сервере должен быть скрипт, который сформирует ответ, если для клиента нужно сформировать нечто динамическое, зависящее от параметров запроса.
    Я создаю, у меня не выходит ничего, значение, при чтении этого файла или php://input (file_get_contents("php://input")) после передачи POST пустое.

    Указываете на клиенте метод POST - на сервере ловите параметры методом POST он будет в $_POST.
    Отправляете параметры GET или вшиваете их в url - ловите параметры на сервере в $_GET.
    Вкладываете файл на клиенте - получаете атрибуты файлов на сервере в $_FILES.
    Все просто.
    На клиенте:
    fetch('/foranswer.php', { //указываете скрипт на сервере, который сформирует ответ для клиента
                                                method: 'POST',
                                                headers: {
                                                    'Content-Type': 'text/plain'
                                                },
                                                body: player.signature
                                            });

    На сервере:
    Скрипт foranswer.php
    <?php
    var_dump($_POST); // Посмотрите, а что вообще пришло в пост параметрах.
    // Например, вам нужен параметр param1, забираем его значение из поста
    $param1 = isset($_POST['param1']) ? $_POST['param1'] : null;
    // Если param1 задан - что-то делаем
    if(!is_null($param1))
    {
      // Например, при наличии параметра param1 нужно прочитать некий ресурс на сервере
      $out = file_get_contents("/file.txt");
      // и отдать его содержимое клиенту
      echo $out;
    }
    else
    {
      // Нет обязательного параметра, отдаем ответ клиенту, что что-то не так.
      echo "Нужен обязательный параметр param1";
    }
    ?>
    Ответ написан
    1 комментарий
  • Как произвести поиск по огромной базе моментально и вывести данные?

    @alexalexes
    каким методом можно моментально/быстро найти нужную запись с данными?

    Создаете индексы в базе данных по полям, которые используются в условиях запросов, и тогда будет скорость.
    PS: Конечно, лучше иметь представление, как ORM создает текст запроса SQL, а потом обращается с ним к СУБД. И как анализировать этот запрос SQL, иначе работа с ORM превращается в практику работы с магией.
    Ответ написан
    2 комментария
  • Что такое Yandex.Send?

    @alexalexes
    Ответ написан
    Комментировать
  • Почему indexOf возвращает первый элемент массива?

    @alexalexes
    finalRes у вас типа целого числа в данной ситуации. У него не будет метода indexOf. Нужен финт ушами, чтобы принудительно преобразовать его в строку:
    let finalRes = item.number + "";
    PS: Ставите ; в строках JS, игнорирование их может сыграть злую шутку.
    Ответ написан
    5 комментариев
  • Как поменять формат вывода json?

    @alexalexes
    Попробуйте использовать опцию JSON_FORCE_OBJECT в функции json_encode.
    https://www.php.net/manual/ru/json.constants.php
    Добавлено:
    Ну, тогда item-ы кодируйте стандартной функцией, а сборку массива делайте кастомную:
    $imported_items[] = json_encode($product, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_FORCE_OBJECT);
    ...
    $preview_items[] =  json_encode($preview_product, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_FORCE_OBJECT);
    ...
    file_put_contents(sprintf(IMPORT_FILE, $id), '['.join(',', $imported_items).']');
    file_put_contents(sprintf(PREVIEW_FILE, $id), '['.join(',', $preview_items).']');
    Ответ написан
    1 комментарий
  • Реализоват функцию, которая принимает первым параметром объект, вторым - массив из цепочки свойств, по которому нужно пройти, чтобы получить значение?

    @alexalexes
    Зачем создавать отдельную переменную result и присваивать ей obj

    Разработчик этой функции перестраховался, присвоив объект obj локальной переменной функции result, потому что знает, что из контекста функции можно изменять obj во внешнем контексте, если изменять свойства объекта внутри функции, и далее по тексту запланирована некая рекурсия. Однако, переприсваивание самого obj не повлияет на внешний контекст, в этом случае можно не создавать отдельную переменную result (если ничего не делать со свойствами объекта).
    сразу в блоке условия let result = result[chain[i]]

    Ну, мысленно или явно оттрасируйте этот момент:
    // не объявили result, считай он такой
    // result  = undefined
    for (let i = 0; i < chain.length; i++) {
        if (result) { // undefined интерпретируется как false
         let result = result[chain[i]] // сюда вообще не попадаем
        } else {
          result = undefined // сюда попадаем при каждом i, причем result идет во внешний контекст
        }
      }
    Ответ написан
    Комментировать
  • Появилась ошибка при создании статьи в modx, MIGX, как решить?

    @alexalexes
    Unable to create a directory at mkdir

    Ошибка явно указывает, что php не может создать каталог с помощью функции mkdir.
    Настройте права доступа php сервера к файловой системе.
    Только будьте аккуратны, нужно дать права на запись пользователю linux, от которого работает сервер php, внутри каталога '/assets/resourceimages/', но не в коем случае не дать права на запись вышестоящим каталогам для этого пользователя, иначе любой зловред вам автоматически создаст вирусные файлы при помощи php, если получит возможность загружать скрипты.
    Ответ написан
  • Как задать приоритет класса CSS выше класса передаваемого по API?

    @alexalexes
    Добавьте "капельку" специфичности (тип div у класса sw-review-bottom, возможно блок имеет другой тип).
    #sw-app div.sw-review-bottom {
      display: none !important;
    }
    Ответ написан
  • "Сырые строки" в php. Есть ли такое?

    @alexalexes
    Heredoc в php?
    $a = <<<THISISHEREDOC
    
    THISISHEREDOC;
    Ответ написан
    Комментировать
  • Какие скорости должны быть у RAM DDR4?

    @alexalexes
    nvme m2.0 pcie 4.0

    В данном случае, говорите про параметры энергонезависимого устройства хранения информации, в данном случае SSD.
    И в Crystal Disk Mark вы смотрите параметры скорости чтения записи блоков различного размера, которая изменяется в мегабайтах в секунду.
    ram ddr4

    В данном случае вы говорите про оперативную память. У нее есть частота работы чипов - измеряется в Мегагерцах, от которой зависит пропускная способность, измеряемая в мегабайтах в секунду или гигабайтах в секунду. По каждому значению частоты можно определить пропускную способность, если посмотреть спецификацию ddr.

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

    @alexalexes
    Сайты на таких CMS как ModX, обычно, переносят путем восстановления из резервной копии дампа файлов и базы данных, на которой была развернута CMS. Возможен перенос отдельных ресурсов, но если только разработчиком компонента предусмотрены функции импорта/экспорта данных по ресурсам этого типа компонента. Во всех остальных случаях - это очень проблемно, так как компонент может создавать не только страничные ресурсы, но и дополнительные поля, быть связанными с самописными чанками, сниппетами, плагинами.
    Ответ написан
    Комментировать
  • Как правильно вызвать функцию и отрисовать её содержимое в условии цикла без привязки к итерациям?

    @alexalexes
    Вы назвали переменную childBlock, а выбираете в нее все узлы - все выпадающие списки всех child.
    let childBlock = parentBlock.querySelectorAll('.select');

    Тогда уж делайте вложенный перебор. В этом случае будет понятно, на каком уровне foreach какие проверки вставлять.
    let childBlocks = parentBlock.querySelectorAll('.child');
    childBlocks.forEach(child) =>
    {
    // контекст одного элемента child
      let childSelects = child.querySelectorAll('.select');
      childSelects.forEach((select) =>
      {
       // контекст одного элемента select
      ...
       // конец контекста одного элемента select
      });
    // конец контекста одного элемента child
    });

    Точнее, вообще не так.
    Зачем вы выбираете селекты из всего parentBlock, когда нужен контекст текущей карточки.
    Селекты по текущей карточкe, в которой кликнули get, можно получить так:
    let childSelects = e.target.querySelectorAll('.select');
     childSelects.forEach((select) =>
      {
       // контекст одного элемента select
      ...
       // конец контекста одного элемента select
      });
    Ответ написан
    Комментировать
  • Как перевести дату в секунды если доступен только год?

    @alexalexes
    Вариант 1.
    1. Определите, что у вас - полная дата, или только год.
    2. Если только год, то приклейте 1 января.
    3. Конвертируйте в отметку Unix time как обычно.
    4. Если дата с фрагментом 1 января, то считаем, что известен был только год, выводим только год.

    Вариант 2.
    1. Определите, что у вас - полная дата, или только год. Результат сохраняем во временную переменную 1 - полная дата, 2 - только год.
    2. Если только год, то приклейте 1 января.
    3. Конвертируйте в отметку Unix time как обычно.
    4. Сохраните и отметку времени и результат выполнения шага 1 в отдельном поле (полная дата, или только год).
    5. Если полная дата, то конвертируем отметку времени в строковое представление, и берем всю строку. Если только год, то тоже конвертируем, но выводим только год.
    Ответ написан
    5 комментариев
  • Как лучше хранить заявки из форм в БД?

    @alexalexes
    А что вы так боитесь сделать в таблице кучу колонок?
    У записи заявки будет type_id - тип заявки, и в зависимости от этого будет использоваться разный набор колонок. Все колонки, которые опционально будут использоваться только в определенных типах будут с допущением null значениями.
    В основную записываем допустим имя, а в сводную то что придёт в формате ключ - значение.

    Имеет право на жизнь, но для разработчика будет сложнее сопровождать запросы. При написании запроса, если нужно вытащить или сравнить свойства заявок, будете писать на каждый такой момент подзапрос. Если захочется получать выборки с результатами в одну строку, то придется тоже использовать кучу подзапросов, возможно, сам текст запроса нужно будет формировать динамически.
    С точки зрения производительности. План запроса усложнится, нужно будет использовать индексы.
    2. Сохранять данные в json

    Если не будете использовать свойства, которые запишите в json для связывания таблиц, и формирования условий выборки, то можно использовать.
    Ответ написан
  • Как практиковать продвинутые темы js?

    @alexalexes
    Промисы отточить... легко.
    Создайте форму, в которую можно накидывать список файлов. Файлы можно накидывать в любой удобный для пользователя момент времени до отправки формы. Файлы отправляются на сервер сразу как только пользователь выбрал файл, не отправляя форму. Пользователь может отменить процесс отправки файла. Форму можно отправить после того, как все процессы отправки файлов завершены. Если один из файлов по какой-то причине не отправился, форму отправлять нельзя.
    Ставите в инструментах разработчика "Сеть" - скорость 3G. И испытательный стенд готов. Оттачивайте навыки написания промисов.
    PS: Также с любой другой темой. Ставите себе практическую задачу, способ решения которой возможен с использованием инструмента по теме (а то и смежных тем) - и навык закрепится.
    Ответ написан
    Комментировать