Задать вопрос
  • Как в php преобразовать строку с числом в строку?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В РНР это делать бессмысленно, поскольку во всех ситуациях, где понадобится число, РНР сам и преобразует.
    Ответ написан
    Комментировать
  • Как преобразовать массив?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В цикле. Все операции над массивами производятся в цикле.
    Создаёте новый пустой массив.
    Потом берете берете исходный массив, перебираете его в цикле, и добавляете в новый данные в соответствии со своими запросами.
    Ответ написан
    Комментировать
  • Как правильно деплоить mysql базу/миграции?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если это не хайдлоад, то есть 95% всех случаев, то никакой проблемы и нет, альтеры отработают быстро.
    В остальных случаях примерно такая схема и применяется, только непонятно, зачем всю базу-то гонять.
    https://github.com/github/gh-ost
    https://docs.percona.com/percona-toolkit/pt-online...
    Ответ написан
  • Есть ли смысл реализовывать интерфейс абстрактным классом?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я это понимаю так:
    Интерфейс - это публичный контракт. Информация для посторонних, для тех кто будет с классом взаимодействовать.
    Абстрактный класс - это внутренняя кухня, прототип для реализации.
    То есть одно другому никак не противоречит. Даже если абстрактный класс и интерфейс будут сильно похожи.
    Ответ написан
    Комментировать
  • Нужно ли в таких случаях делать защиту от инъекций?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нужно, разумеется.
    Это как в одном пошлом анекдоте про поручика Ржевского,
    - Запрос есть? Значит нужно.

    Если кажется, что защита слишком сложная, то либо вариант предложенный Сергей delphinpro в комментариях,
    $stmt = mysqli_prepare($connect, "INSERT INTO `bd` (`id`, `name`, `tel`) VALUES (NULL, ?, ?)");
    mysqli_stmt_execute($stmt, [$_POST['name'],  $_POST['tel']]);

    Либо, поскольку это ещё не везде работает, пишется маленькая функция на 5 строк, и кладётся в файл, где прописано соединение с БД
    function prepared_query($mysqli, $sql, $params, $types = "")
    {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    И дальше просто
    $sql = "INSERT INTO `bd` (`name`, `tel`) VALUES (?,?)";
    prepared_query($connect, $sql, [$_POST['name'], $_POST['tel']]);

    Просто, быстро, аккуратно, безопасно
    Ответ написан
    Комментировать
  • Как заменить часть строки данными из массива (php)?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    8 комментариев
  • Почему RedBeanPHP возвращает Array?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В РНР Array - это список значений
    Вы получили ровно то что хотели
    Ответ написан
    3 комментария
  • Как сделать что бы возвращало все значения RB php?

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

    Если думать совсем не получается, то надо пройти по ссылке из ответа на свой предыдущий вопрос, и прочитать там.
    Ответ написан
    5 комментариев
  • Для чего в проектах принудительно используют use?

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

    use \Framework\Main\UI\Extension;
    Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    Extension::unload([ 'vendor.module.components.cabinet.personal' ]);
    vs
    \Framework\Main\UI\Extension\Extension::load([ 'vendor.module.components.cabinet.personal' ]);
    \Framework\Main\UI\Extension\Extension::unload([ 'vendor.module.components.cabinet.personal' ]);

    и будешь постоянно спотыкаться в коде об эти палочки.

    А часть решается не просто, а очень просто: вместо того, чтобы писать код в Блокноте Виндоус, надо в кои-то веки освоить работу с нормальной IDE. Которая
    - автоматом скрывает блок use
    - по ctrl+наведение курсора показывает полный путь, а по ctrl-click сразу переходит в определение метода
    - подсвечивает неиспользуемые неймспейсы, и не проблема их удалить
    Ответ написан
  • Нужно ли выполнять асинхронные запросы чтоб ускорить выполнение кода на PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Когда я вижу такие вопросы, мне хочется плакать.
    "У меня микроскоп показывает только грязь на пальцах. У меня получится посмотреть вакуоли, если я приделаю к микроскопу ветряной двигатель?"

    Если код работает медленно, то надо не выдумывать какие-то фантазии про асинхронные запросы, а ускорить выполнение кода. Который должен выполняться максимум за 0.008 секунды
    Ответ написан
    2 комментария
  • Как задать 'none' по-умолчанию для null значения при создании таблицы?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    К созданию таблиц это не имеет никакого отношения.
    проблема вызвана незнанием элементарного синтаксиса SQL
    insert into product (name, quantity) values ('test4','10');

    A magic!
    Ответ написан
  • Что не так с json и есть ли отличия между 300 и (int)$a, если $a = "300"?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если сделать var_dump с переменными и var_dump с числами, то вернутся одинаковые данные:

    Разумеется, это не так.
    Весь этот вопрос - сплошная путаница и какие-то дикие суеверия.
    Сначала заявление что строки и числа var_dump выводит одинаково, потом вдруг что пробел имеет какое-то значение.

    Вам надо обязательно научиться проверять свои догадки. Причем проверять надёжно, а не как сейчас - тяп-ляп.
    Ответ написан
    Комментировать
  • Как быстро проверить, что строка - md5?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вы не на выставке современного искусства, чтобы рассуждать в категориях нравится-не нравится.
    По мне так с точки зрения производительности и эта проверка лишняя, база от двух-трех шагов поиска в оперативной памяти не развалится.
    Но с точки зрения валидации эта проверка имеет право на существование. Для этого просто взять регулярку, и проверить, без всяких "нравится-не нравится"
    Ответ написан
    Комментировать
  • Как изменять переменную каждый цикл?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это не нужно делать.
    "Переменная", имя которой может меняться в цикле - это индекс массива. Списка или коллекции.
    В данном случае a - это список, и обращаться к его элементам можно по индексам, a[1], a[2], и так далее

    Соответственно, код будет
    a = []
    i = 1
    while i <= 5:
      a[i] = i
      i += 1
    Ответ написан
    1 комментарий
  • Как изменить определённый элемент списка в цикле for?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну и для коллекции самый кондовый способ
    Надо, всё-таки, перед тем как использовать всякие enumerate, сначала понять как вообще работают циклы.
    i=0
    length = len(votes)
    while i < length:
        votes[i] = votes[i].replace(',', '')
        i += 1
    Ответ написан
    1 комментарий
  • Выходит ошибка с файлами что делать?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Указать правильный путь к файлу
    Ответ написан
    Комментировать
  • Как выбрать значение по наибольшему ключу из объекта json?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Традиционный ответ: Не хранить в JSON данные, которые для этого не предназначены.
    А хранить их нормально - в предназначенной для этого связанной таблице.
    Ответ написан
    Комментировать
  • Как правильно сделать запрос в бд?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я даже не представляю, сколько раз на этот запрос здесь уже отвечали. Но разве ж тут что найдёшь...
    WHERE date BETWEEN '2021-10-01 00:00:00' and '2021-10-30 23:59:59'
    Ответ написан
    8 комментариев
  • Как писать в csv в определенную колонку, а строки со второй?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не нужно искать решение специфической задачи "как писать в колонку".
    Это всё равно что отдельно искать в гугле ответы на вопросы "как есть борщ", "как есть солянку", "как есть щи".
    Надо освоить несколько базовых понятий, и уже применять их для решения неограниченного круга задач.
    В данном случае надо просто подумать - что такое файл, что такое csv файл, как можно организовать работу с несколькими колонками. А главное - понять, что файл всегда перезаписывается ЦЕЛИКОМ. То есть каждый скрипт должен писать все колонки, а не только свои.
    И всё получится сделать, самыми простыми средствами.

    Если оставить в стороне эпическую кривизну исходной задачи "несколько скриптов пишут в один файл", которая в итоге приведёт к полному удалению информации из файла, то по сути задача сводится к работе со списками.
    Прочитал из файла список списков, заменил или добавил нужные значения, записал в файл. Не бином ньютона.
    Ответ написан
  • Почему не записываются буквы при регистрации?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Уж сколько раз твердили миру...
    На конференции к звездам надо приходить запросы надо выполнять подготовленными.
    А не вот это вот всё.
    Иначе проблемы с буквами покажутся детской щекоткой.
    Какой вообще смысл делать регистрацию, если любой школьник сможет войти под чужой учёткой вообще без пароля, через простейшую SQL инъекцию?

    Надо забыть про mysqli_query и освоить функции prepare(), bind_param(), и execute(). Причём не только для insert, но и для select тоже. Потому что через него можно будет повытаскивать все пароли. Поскольку они ещё и не захэшированы.
    Ответ написан
    Комментировать