Задать вопрос
Ответы пользователя по тегу PHP
  • Как правильно написать regex?

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

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не очень понятно, что надо автору, но в общем случае это делается без проблем
    $commands = ['hi' => 'hi', 'hello' => 'hello', 'etc' => 'etc'];
    $commands['hi']();

    Другое дело что изначальная задача сильно пованивает говнокодом
    Особенно учитывая тот факт, что автор, похоже, не догадался, что у него функции вызываются не "при обращение к ключу hi", а ещё при создании массива
    Ответ написан
    Комментировать
  • Выучил синтаксис языка. как использовать его на практике?

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

    MVC надо прочувствовать. Надо поставить себя в ситуацию, когда станет понятно - "Вот я дебил, зачем же я SQL вперемешку с HTML писал! Теперь придется выковыривать. Но уж дальше у меня логика и вывод будут разделены!".
    А потом - "Вот я дебил, зачем же я прямо в контроллере всю логику шарабашил! Теперь в консольной команде то ли код дублировать, то ли опять логику из НТТР интерфейса выковыривать".
    И потом - "Вот я дебил, всё сам на коленке писал, когда в фреймворке всё уже готовое!"
    И так много-много итераций.

    И это я не перечисляю совсем уж детсадовские инсайты, типа "вот я дебил, оказывается если SQL запросы не защищать, то и авторизацию по сути писать бесполезно - все равно кто хочешь зайдет" и "Ой, оказывается кроме меня на сайте ещё другие пользователи есть! И им ошибки показывать не надо!"

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

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

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

    Если же вот прям буквально это выражение, то preg_split c PREG_SPLIT_DELIM_CAPTURE
    Ответ написан
    Комментировать
  • Как вывести текст в 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 Куратор тега 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 комментария
  • Что не так с json и есть ли отличия между 300 и (int)$a, если $a = "300"?

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

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

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

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

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

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    или покороче,
    'name' => $result['short_name'] ?: $result['name'],
    Ответ написан
    1 комментарий