• Как удалить данные из массива?

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сначала убрать ненужные квадратные скобки через str_replace
    Потом https://www.google.com/search?q=php+math+parser

    Если же вот прям буквально это выражение, то preg_split c PREG_SPLIT_DELIM_CAPTURE
    Ответ написан
    Комментировать
  • Как лучше организовать вывод 404 ошибки?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    302 и 404 - это не просто красивые цыферки, а статус НТТР ответа.
    Который по определению может быть только один.
    И для ответа на этот банальный вопрос надо всего лишь определиться - какой статус мы хотим вернуть поисковику - 302 или 404.
    Ответ написан
    9 комментариев
  • Как вывести текст в textarea не потеряв переносы строк в тексте?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    ВАРИАНТ 4-Й, очевидный
    1 - пишу абзац текста с переносами в textarea
    2 - Отправляю в SQL-базу ничего не меняя.
    3 - Оригинальные системные переносы сохраняются в SQL - базе, как и должны, поскольку любые заморочки с яваскриптами к базе данных не имеют вообще никакого, ни малейшего отношения
    4 - Читаю из SQL базы
    5 - Вывожу в обратно в texarea
    6 - В texarea ВСЁ РАБОТАЕТ! A magic! При том что мы вообще нигде ничего ни на что не меняли

    6a - По поводу HTML сущностей. Хотя в приведённом примере нет ни одного символа, который бы требовал перекодирования в HTML-сущности, тем не менее, при выводе любого текста в HTML, эти сущности действительно должны быть перекодированы в обязательном порядке, всегда, в 100% случаев. Причем с помощью не какой-то левой addslashes, а функции, которая действительно это делает, htmlspecialchars($var_zametka)

    7 - Собираюсь с мыслями, и напряжённо думаю - в каком месте у меня текст взаимодействует с яваскриптом? Который к выводу текста в текстарию не имеет ни малейшего отношения?
    8 - думаю...
    9 - думаю...
    10 - наконец-то нахожу.
    11 - перед тем, как отправлять текст в яваскрипт, кодируем его тем методом, который специально предназначен для отправки данных в яваскрипт, а не какими-то шаманскими заклинаниями и плясками с бубном.echo json_encode($var_zametka)
    12 - ВСЁ РАБОТАЕТ! Просто потому, что получилось расхлебать кашу в голове, в которой SQL путается с РНР, HTML c яваскриптом, а экранирование спецсимволов почему-то называется заменой на HTML-сущности. Хотя если открыть документацию на абсолютно бесполезную функцию addslashes, то там ни одного разочка слово HTML не встретится.
    Ответ написан
  • Как преобразовать массив POST в строки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    <tr>
      <td><input type="text" name="name[$mas['id']]" value="'.htmlspecialchars($mas['name']).'"></td>
      <td><input type="text" name="cena_no_dost[$mas['id']]" value="'.htmlspecialchars($mas['cena_no_dost']).'"></td>
      </tr>

    И ничего потом не "пересобирать"

    И запомните уже наконец, что любые данные, которые выводятся в html, должны всегда экранироваться через htmlspecialchars. Иначе потом будет очень больно и непонятно
    Ответ написан
  • Как в 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 комментарий