• У меня не правильный код?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Код тут действительно неправильный, причем по очень многим параметрам. Много бессмысленных телодвижений, инъекции, плюс условие можно записать оптимальнее. Так что помимо исправления конкретной опечатки от Rsa97, надо править этот код целиком
    $sql = "SELECT * FROM blocks WHERE user_id = ?";
    // выполняем запрос без инъекций. если версия РНР не новая, надо будет дописать эту функцию самому
    $result = $conn->execute_query($sql, [$id]);
    // получаем запрошенную строку, без всяких num_rows и foreach
    $row = $result->fetch_assoc();
    // получаем $block_level, даже если в $row пусто
    $block_level = $row["type"] ?? 0;
    // match - новое выражение в РНР начиная с 8.0 версии. в сто раз аккуратнее чем забор из elseif
    $block_text_type = match ($block_level) {
        1 => "Незначительная блокировка",
        2 => "Частичная блокировка",
        3 => "Полная блокировка",
        default => "Нет блокировок",
    };
    Ответ написан
    2 комментария
  • Как записать base64 в таблицу?

    @d-sem
    Если возникла необходимость заполнять базу данных файлами, то возможно, что базы данных тут не нужны.
    Сохраняйте ссылки на файлы.
    Ответ написан
    Комментировать
  • Как перебрать селекторы через for?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Поменять кавычки с " на `, которые включают режим шаблонных строк.

    Но ващет проще document.querySelectorAll и перебрать уже как массив, без таких извращений.
    Ответ написан
    2 комментария
  • Как получить массив в массиве, в одном запросе?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Комментировать
  • Как экранировать sql запрос внутри texarea?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это очень просто сделать.
    Надо всего лишь освоить подготовленные выражения.
    Например, почитав вот тут https://habr.com/ru/articles/662523/

    И все запросы, в которых участвуют переменные, выполнять только таким образом.
    А texarea там, или tinymce - это уже без разницы.
    Ответ написан
    1 комментарий
  • Почему при удалении куки возникает ошибка Warning: Cannot modify header information?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы решить эту проблему, надо научиться пользоваться интернетом.
    В частности, освоить такой сложный навык, как взять сообщение об ошибке, вставить в адресную строку своего браузера, и нажать enter
    И после этого с удивлением обнаружить, что объяснений этой ошибки существует несколько миллионов.
    Например https://ru.stackoverflow.com/questions/284578/

    И заодно не помешает научиться задавать вопросы. Чтобы не спрашивать про то, что вы и так знаете.
    Ответ написан
    4 комментария
  • Как оптимизировать таблицу с JSON строкой в mysql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сам по себе вопрос бессмысленный, поскольку вообще ничего не сказано ни о данных, ни об их структуре. Ни о проблемах, которые вызывают необходимость такой "оптимизации".
    Так что на него можно ответить только так же абстрактно.
    Превращать JSON в EAV глупо.
    Так что вопрос здесь не в том, размазывать ли JSON по строкам, а в том, нужен ли он здесь вообще.

    Если в JSON поле лежат структурированные данные, то их в обязательном порядке надо развернуть в обычную таблицу/связанные таблицы.
    Если же лежит всякий мусор навалом - то можно оставить, но при этом придется делать отдельную таблицу или куда-то ещё записывать эталонную структуру этого JSONа, чтобы не оказалось, что одно и то же значение пишется под десятью разными ключами. Но опять же, судя по постановке вопроса, скорее всего автору нужна одна нормальная таблица с нормальными столбцами.

    Кроме того, никакого "login" в качестве идентификатора быть не должно, а должен быть первичный ключ.
    Ответ написан
  • Зачем указывать адрес?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    если приложение итак находится на машине, имеющей свой адрес

    Какой из? Даже у машин с одной сетевухой всегда два адреса - второй всегда 127.0.0.1. А вообще могут быть машины с двумя, тремя, ... N сетевухами...
    Ответ написан
    2 комментария
  • Как решить php выдает ошибку при подключении к БД?

    syamskoy
    @syamskoy
    У вас код написан с синтаксисом PHP 8, а запускаете вы код на более старой версии PHP, которая не понимает этот синтаксис. Конкретно речь идёт об именованных аргументах. Обновите PHP или пишите без имен аргументов.
    Ответ написан
    Комментировать
  • Как вынести запросы rest api на постоянное соединение?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ тут очень простой - никак.
    Мало того, что вешать все запросы на одно соединение просто глупо, когда БД может обрабатывать их тыщи. И та же нода, если делается по-уму, то использует пул соединений, а не одно.
    Но, главное, РНР так не работает.

    И проблема здесь не в количестве соединений, а в том, кто писал код.
    Если в коде используется только одно соединение за все время работы скрипта (а не открывает новое соединение на каждый запрос, как у всех гениальных скриптописателей), и база данных устроена по уму (не тормозит), то хватит даже самого дохлого хостинга с лимитом в 5 одновременных подключений. Просто потому что любой запрос к рест апи должен работать не дольше 0.01 секунды. И любые проблемы будут появляться только при частоте обращений больше 100 в секунду.

    Соответственно, вместо фантазий про "одно соединение" надо переделывать кривой код и базу данных.
    Ответ написан
    Комментировать
  • Vcc и Vdd, Vss и Vee как распознать где плюс, а где минус на схемах?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    Всё элементарно просто. Набираете в поисковой строке Гугла такой текст - 1602 datasheet. Гугл выдаёт вам почти 4000000 ответов. Выбираете тот, который нравится. Мне понравился вот этот - https://www.openhacks.com/uploadsproductos/eone-16...
    Третья страница этого даташита содержит исчерпывающий и (главное!) точный ответ на ваш вопрос:
    646bc37a97154080252001.jpeg
    Точно так же поступайте и в дальнейшем - тем самым вы сохраните наше время для действительно интересных и важных вопросов (вместо того, чтобы быть при вас личным поисковым оператором), заодно и научитесь гуглить. Возможно, не сразу, возможно с тысячной попытки, но таки научитесь.
    Ответ написан
    2 комментария
  • Усиливает ли коммутатор сигнал ethernet?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Если я вставлю в каждом 100метре один коммутатор

    то будет полная фигня и отсутсвие линка. Задача решается принципиально другим способом.

    - берется план завода
    - выделяется место для создания центрального узла (серверная) в соттветствии с местнвми реалиями. Поскольку сама по себе сеть нафиг не нужна - значит, она тянется для чего-то. Значит, сервера будут.
    - от серверной в локальные узлы (точки расположения управляемых коммутаторов) тянется оптика. На относительно небольшое расстояние пойдет более дешевая многомодовая..
    - от локальных коммутаторов растягивается сеть
    - если хотите бить на сегменты - бить можно на центральном узле, поставив туда микротик
    Ответ написан
    2 комментария
  • Экранирование sql запросов, достаточно ли функции?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Эта функция не самописная, а цельнотянутая. Причем из самых смрадных помоек интернета.
    К защите от инъекций не имеет вообще никакого отношения.

    - trim() ни к инъекциям, ни к защите отношения не имеет
    - stripslashes() просто бессмысленная функция, которая только портит данные
    - htmlspecialchars() не имеет отношения к SQL. Применяется при выводе данных, а не при получении
    - real_escape_string() - единственная функция, которая имеет отношение к SQL, но при этом вообще не предназначенная ни для каких защит.

    Попробуйте на основании этой информации самостоятельно оценить полезность вашей функции.

    Возьмем классический пример
    $_GET['id'] = '1;DROP TABLE Students;';
    $id = formatstr($_GET['id']);
    $sql = "SELECT * FRPM Students WHERE id=$id";

    И посмотрим, помогло ли ваше самописное экранирование предотвратить хоть что-то (спойлер: нет).
    (да, та функция, которую лично вы используете для выполнения запросов, выполняет только один запрос за раз. И вместо инъекции вы получите ошибку. Но это не отменяет сам факт получения инъекции.)

    Как правильно все отметили выше, для защиты от инъекций используются подготовленные запросы, в которых все переменные заменяются на специальные маркеры, и передаются отдельно.
    Ответ написан
    Комментировать
  • Когда новичку нужно изучать как работает интернет, после изучения базы JS?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Уважаемый пользователь.
    У тебя из 10 вопросов 9 вопросов про то. как стать разработчиком и поменьше учить.
    Прекрати такое поведение.

    Не хочешь учиться - выбери другое направление, кроме ИТ полный мир возможностей.
    Ну или учи свою верстку, работай всю жизнь джуниором, никто тебя за уши в сеньоры не тянет и не заставляет.
    Хочешь - учи, не хочешь - не учи.
    Читай вакансии и требования в вакансиях, зачем тебе советы рандомных людей из интернета, если ты постоянно спрашиваешь почти одно и тоже, хотя тебе уже отвечали.
    Ответ написан
    18 комментариев
  • Как работает замыкание в js?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    function createCounter() { 
        let counter =0; 
       counter = counter - 10  
        const myFunction = function () { 
            counter = counter+1; 
            return counter 
        } 
        return myFunction 
    } 
    let z = createCounter() // Вернули в переменную z функцию "myFunction" у которой в замыкании есть counter.
    // counter внутри на данный момент равен -10.
    
    // Вызвали функцию и вывели результат в консоль.
    // Так как внутри функции counter берётся из замыкания, то при вызове функции получаем
    // -10 + 1
    console.log(z()) // -9
    
    // В данном примере - бесполезный ничего не делающий вызов.
    // То есть создаётся ещё один НОВЫЙ счётчик, со своим замыканием, но он никуда не сохраняется.
    createCounter() 
    
    // Снова вызвали функцию и вывели результат в консоль.
    // -9 + 1 
    console.log(z()) //  -8


    где я допускаю ошибку

    Судя по всему Ваша ошибка в том, что Вы считаете, раз снова вызвали функцию createCounter - то это на что-то влияет. Но нет. Это отдельный новый вызов нового счётчика, который потом в данном примере нигде не используется.

    Второй вопрос откуда берется counter при втором вызове console.log(z())

    Да всё оттуда же. Из замыкания. Когда Вы в первый раз вызвали функцию createCounter и сохранили результат её работы в переменную z - Вы в переменную z поместили функцию myFunction, у которой есть своё собственное замыкание на counter.
    При каждом вызове z() будет вызываться та созданная функция со своим замыканием и оперировать с counter из него.

    При новом вызове createCounter возвращается НОВАЯ функция myFunction у которой своё независимое от предыдущих вызовов замыкание.
    То есть createFunction это как фабрика, которая выпускает одинаковые изделия(счётчики от -10, в данном случае), но изделия не зависят друг от друга.
    Ответ написан
  • Как правильно организовать поиск по большому кол-во бд?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Как сделать поиск максимально производительным?
    Вопрос из серии "какая машина самая крутая?". Нет решения которое подходит под любой вариант базы и структуры, иначе все только одним им и пользовались, логично?

    Есть несколько больших postgresql таблиц(по ≈ 1млн строк в каждой).
    Это таблицы среднего размера, ничего большого в них нет. Миллион записей это средняя таблица со статистикой, все должно работать достаточно быстро и без каких-то особых танцев.

    Пользователь вводит номер, ему выдаётся инфа из бд.
    Ну так сами пробовали сделать 20-30 рандомных запросов и посмотреть скорость, explain, использование индексов? Или мы "боимся заранее"?

    Что использовать? Асинхронность? Многопоточность?
    Мозги, используйте мозги, это гораздо эффективнее...
    Ответ написан
    Комментировать
  • Как лучше\проще реализовать работу с серийными номерами\лицензиями чтобы не особо пиратили?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Нишевый софт не пиратят. Не надо никому. В нишевом софте продают саппорт. Да, он и без саппорта работает, но бывает так, что разраб намеренно закладывает некий косяк, который происходит редко, но случившись, все обращает в тыкву (Nakivo)
    Второй вариант (MS, Autodesk) - постоянная серверная проверка. Запускается программа - обращение к серверу лицензий. Нет записи - прости-прощай, не остановишь жизнь (C) (Это, разумеется, отламывается и вариант для тех, кто не боится прилета)
    Ответ написан
    4 комментария
  • Как вызвать код php на всех страницах?

    Newto
    @Newto
    Обычно делается единственная точка входа index.php Все запросы на сайте обрабатываются через этот файл. Таким образом одно включение startup.php в index.php или другом файле, включаемом в index.php, будет действовать на все остальные файлы вашего проекта. Но это работает только при условии правильной архитектуры. Если же у вас проект образца 2000-х готов, когда каждая страница обрабатывается отдельным файлом, то вам ничего не останется кроме того как startup.php включать в каждый файл инклудом отдельно.
    Ответ написан
    Комментировать
  • Как узнать какие порты блокирует провайдер и как обойти UDP блокировку?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    В Туркменистане белый IP тебе ничем не поможет :) Когда ты за NAT - у тебя заблокированы все порты, а работают только те, которые явно проброшены. Но опять же - обычно исходящие соединения разрешены (в Туркменистане конечно может быть и не так).
    Ответ написан
    4 комментария
  • Почему используется разделение зеленой пары при обжимке по типу T586B?

    @aleks-th
    Традиция, так сделано для совместимости не более того.
    Распиновка разьема совместима с древней проводной телефонией,
    Чтобы была совместимость, с проводной аналоговой телефонной линией - нужно задействовать два средних контаката.
    Тогда в розетку RJ-45 можно воткнуть RJ11 от обычного телефона если есть такая задача.

    В телефонной линии сигнал передавался по одной средней паре.
    Потом появились умные телефоны где было две или три пары, для совместимости опять же использовалась средняя пара под аналоговый сигнал.

    Так что это просто традиция, проводная телефония в основном отмерла, а совместимость кабелей осталась.
    Ответ написан
    Комментировать