Задать вопрос
  • Как объединить массив массивов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Массивы сложить в массив (const arrs = [ arr1, arr2 ];), дальше есть варианты:

    const result = arrs[0].map((_, i) => arrs.flatMap(arr => arr[i]));

    или

    const result = arrs.reduce((acc, arr) => (
      arr.forEach((n, i) => (acc[i] ??= []).push(...n)),
      acc
    ), []);

    или

    const result = [];
    
    for (const arr of arrs) {
      for (const [ i, n ] of arr.entries()) {
        if (!result[i]) {
          result[i] = [];
        }
    
        for (const m of n) {
          result[i][result[i].length] = m;
        }
      }
    }
    Ответ написан
    1 комментарий
  • Можно ли сделать sysprep на Windows server 2016?

    borisdenis
    @borisdenis
    Ленив и вреден...
    Делаете бекап.
    Проверяете, что он действительно сделался и с него сможете восстановиться.
    На железном сервере ставите серверную винду (можно при желании даже версию винды повысить), делаете её дополнительным контроллером домена в существующем домене.
    Поднимаете на железном сервере те же службы что и на виртуальном (dhcp, dns и т.п. при необходимости перенастраиваете днс сервера у клиентских машин) и понижаете виртуальный сервер до обычного члена домена. Выключаете виртуальный сервер (можно даже после отключения перезагрузить физический) и проверяете, чтобы всё работало.
    Ответ написан
    3 комментария
  • Как очищать текст в 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 комментариев
  • Почему не рекомендуют использовать jQuery?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    Потому что jQuery создавался в свое время, чтобы упростить работу с чистым js (в то время это действительно было нужно). А сейчас смысла в jq нету. Потому что он уже ничего не упрощает. Сейчас на чистом js можно писать быстрее и проще.
    Ответ написан
    Комментировать
  • Можно ли настроить DHCP и статику одновременно?

    Zoominger
    @Zoominger Куратор тега Компьютерные сети
    System Integrator
    Сделайте ему привязку по MAC-адресу и не изобретайте велосипед.
    Ответ написан
    Комментировать
  • Segmentation fault c++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Чему равно n, когда вы заводите массив a[n]?
    Ответ написан
    7 комментариев
  • Как сделать, чтобы при удалении записей остальные id записей начинались с 0?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак не делать .
    Этот вопрос очень часто задают новички, от непонимания базовых принципов

    Ид вообще никогда не надо трогать.
    Менять ид в базе это все равно что ученикам в классе каждый раз давать новые имена, чтобы они всегда сидели по алфавиту

    Либо тебе это поле вообще не нужно, и его надо убрать, либо просто оставь его в покое и никогда не трогай его руками
    Ответ написан
    1 комментарий
  • Можно ли использовать законно неактивированую виндовс 10?

    ettaluni
    @ettaluni
    ERROR MEME
    Ну есть же лицензионное соглашение ты его читал когда принимал?
    Вы имеете право использовать данное программное обеспечение, только если у вас имеется соответствующая лицензия и программное обеспечение было должным образом активировано с использованием подлинного ключа продукта или другим разрешенным способом
    Ответ написан
    3 комментария
  • Почему не работает выборка WHERE в SQL запросе?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    первая подсказка - использовать подготовленные выражения
    вторая подсказка - вывести на экран ваш запрос, скопировать, вставить в консоль sql / пхпмайадмин и выполнить.

    выводит все записи из таблицы
    Могу предположить что данное поле не является уникальным значением и ничего удивительного что вы получаете ВСЕ записи, где категория = какому-то номеру.
    Ответ написан
    Комментировать
  • Бесплатен ли VirtualBox?

    @kalapanga
    Всё здесь https://www.virtualbox.org/wiki/Licensing_FAQ и дальше по ссылкам.
    Если я правильно понимаю, то собственно VirtualBox, распространяется под GNU GPL v2, которая не накладывает ограничений на использование. Если умудритесь только им обойтись - можно использовать.
    А вот VirtualBox Extension Pack распространяется под лицензией Personal Use and Evaluation License, которая не допускает использования в коммерческих целях. И это на него покупается Enterprise License, которая ещё включает поддержку.
    Ответ написан
    1 комментарий
  • Почему PHP8 требует определять переменные?

    @novichkovv
    Если у вас прилетают ворнинги и нотисы, значит у вас есть слепые зоны в приложении, варианты результатов выполнения кода в этих местах не полностью охвачены, что повышает вероятность непредсказуемых ошибок. Очень советую также смолоду начать использовать типизацию аргументов и свойств - это в разы повышает надежность кода. Если экономить время при написании кода, потом приходится затрачивать в разы больше времени при обслуживании. Так что при разработке усложняйте себе жизнь как можно сильней, это потом с лихвой окупится
    Ответ написан
    2 комментария
  • Как накидать логику работы будущей программы?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Вы не научитесь писать и проектировать программы, если самостоятельно не набьете на этом шишек.

    Переписывание программы заново - нормальный процесс, называемый рефакторингом. "На берегу", еще до начала написания кода, вы не будете видеть все тонкости и нюансы. Так что хлопанье себя по лбу и отправка кода в корзину = нормальный творческий процесс разработки.

    После нескольких таких заездов по граблям вы получите опыт - ошибки и трудности, с которыми вы начнете сталкиваться будут такие, что ни в книге сказать, ни на StackOverflow прочитать.
    Ответ написан
    1 комментарий
  • Как во vue вывести значение условия со строкой?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Разберитесь с приоритетом операторов.

    Давайте-ка скобок добавлю, чтобы яснее стало, что в каком порядке выполняется:

    ('ic' + true) ? 'on' : ('off' + '.svg')

    Ну и конечно писать подобные выражения в шаблоне - совсем не круто. Вынесите его в вычисляемое свойство или метод, например:

    computed: {
      className() {
        return условие ? 'icon.svg' : 'icoff.svg';
      },
      ...

    <p :class="className">
    Ответ написан
    1 комментарий
  • По DHCP раздается не та подсеть. Как решить проблему?

    semenenko88
    @semenenko88
    Системный администратор
    Да, если кто-то воткнул в вашу сеть свой dhcp, то так и будет.

    Клиент при включении отправляет широковещательный запрос, кто здесь dhcp сервер. Вот чей сервер первей ответит, тот и раздаст этому клиенту адреса.
    Ответ написан
    Комментировать
  • Не понимаю, что происходит внутри регистра после DIV. "Регистры ломаются"?

    @galaxy
    Числа из read() приходит в виде строк - последовательности ASCII кодов. Для 2 и 3 это будет 0x32 и 0x33 соответственно (я уже забыл, честно говоря, придут ли они вместе с "\n" или нет).
    Короче, вы делите ASCII-коды.
    Ответ написан
    Комментировать
  • Как правильно использовать mysqli_num_rows()?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это очень хороший вопрос.
    Ответ на него - никак не использовать.

    Да, в mysqli действительно есть специальная функция, которая может сказать, какое количество строк вернул запрос SELECT.
    Традиционно употребляется в двух случаях:

    а) когда это не нужно
    б) когда приводит к катастрофическим последствиям

    Первый вариант - это когда мы хотим узнать, вернул ли запрос хоть какие-то данные, или нет. Но на этот случай у нас есть сами данные. Зачем отдельно запрашивать их количество, если мы все равно будем эти данные получать в переменную, которую потом и можно будет использовать чтобы узнать, вернул ли запрос что-нибудь или нет.

    Второй вариант - если эта функция используется чтобы посчитать, сколько строк лежит в БД. В таком варианте это будет откровенное вредительство, поскольку данных может быть очень много, и все эти данные БД должна сначала получить у себя, а потом отправить в РНР. Заняв всю доступную память или даже вызвав фатальную ошибку нехватки памяти.

    Правильным решением этой задачи будет сделать запрос вида SELECT COUNT(*) FROM .... В этом случае БД сама внутри себя посчитает количество строк (очень быстро) и вернёт только одно число, которое не занимает оперативную память вообще.

    Вот и получается, что функция mysqli_num_rows() является либо вредной, либо бесполезной

    В данном случае надо сначала получить записи из БД
    // БЕЗОПАСНО выполняем запрос
    $stmt = $link->prepare("SELECT * FROM comments WHERE art_id = ?");
    $stmt->bind_param("s", $note_id);
    $stmt->execute();
    // получаем данные
    $result = $stmt->get_result();
    $comments = $result->fetch_all(MYSQLI_ASSOC);
    ?>

    А после этого уже их выводить
    <?php if ($comments): ?>
        <?php foreach ($comments as $row): ?>
             <?=$row['comment']?><br>
        <?php endforeach ?>
    <?php else: ?>
        Эту запись еще никто не комментировал
    <?php endif ?>


    Как видно, никакой mysqli_num_rows нам не понадобилось
    Ответ написан
    9 комментариев
  • Как лучше сделать авторизацию пользователей через JWT?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вы путаете JWT и сессии. Вся суть JWT в том, что в БД ничего писать не надо. Если вам нужно трекать пользовательские сессии и скидывать их, то JWT вам не подходит.
    Ответ написан
    Комментировать
  • Как выбрать тему для статьи на Хабр, которую будут читать?

    pragmatik
    @pragmatik Куратор тега Хабр
    Неправильно ты, Дядя Фёдор, бутерброд ешь...
    Нужно писать про то в чем хорошо разбираешься. Потому что, если ты будешь писать про то, в чем ты не разбираешься, на сайтах вроде Хабра, где есть система дизлайков, то ничего хорошего тебе это не принесет.
    Ответ написан
    2 комментария
  • Почему PHP не принимает символы / ' ` и смайлики в строке input и textarea для записи в БД MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы смайлы не вызывали ошибку надо выставить правильную кодировку
    чтобы никакие символы не мешали запросу, все переменные надо передавать в БД отдельно от запроса

    // правильно соединяемся
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli($host, $user, $pass, $db, $port);
    $mysqli->set_charset("utf8mb4");
    // правильно вставляем
    $sql = "INSERT INTO users (name, email, password) VALUES (?,?,?)";
    $stmt= $conn->prepare($sql);
    $stmt->bind_param("sss", $name, $email, $password);
    $stmt->execute();
    Ответ написан
    Комментировать
  • Практичное ядро сети будущего офиса на 200человек, какой опыт посоветуете из современных решений?

    CityCat4
    @CityCat4 Куратор тега Сетевое оборудование
    //COPY01 EXEC PGM=IEBGENER
    Хотите проблем - ну делайте "модно-стильно-молодежно". Не хотите проблем - делайте кабелем. wifi был придуман для носимых устройств и оправдан там, где прокладка сети уже невозможна - в старых офисах, на арендуемых площадях, в исторических зданиях.
    При проектировании сети всегда стоит закладывать на каждое место на одну розетку больше, чем было посчитано :) Узловые свитчи вязать оптикой. Серверную располагать так, чтобы "чужие здесь не ходят".
    Ответ написан
    7 комментариев