Задать вопрос
  • Можно ли вывести адрес переменной в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. Нет, стандартными средствами нельзя.
    2. У таких вопросов (типа "как мне японской скороваркой почистить выхлопную трубу") всегда должен быть контекст. Чтобы люди хотя бы примерно понимали, что у вас в голове и что вам на самом деле нужно.
    Ответ написан
  • Как создать маску для нескольких частей названия файла?

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


    Давайте по шагам, как детстве с мамой
    1. Что выводит echo "../local/$id.*.$login_*";? Соответствует ли вывод ожиданиям? Если нет - то в чем различия? Что должно вывести и что вывелось?
    2. Если ответ на первый вопрос положительный, то что выводит var_dump(glob("../local/$id.*.$login_*")); Соответствует ли вывод ожиданиям? Если нет - то в чем различия? Что должно вывести и что вывелось?
    3. Если ответ на второй вопрос положительный, то каков результат работы кода? Соответствует ли он ожиданиям? Если нет - то в чем различия? Что должно было удалиться, и что удалилось?
    4. Включен ли вывод ошибок? Если нет - то надо включить. Если включен и выводятся - то какие?
    Ответ написан
    5 комментариев
  • Ошибка sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type. Как исправить?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну хотя бы немного думать своей головой надо, а не просто копировать какие-то строчечки из интернета.
    Метод fetchall() возвращает данные какого типа?
    а в execute() надо передавать данные какого типа?

    Вот реально - неделю назад вы писали код, который был мало того что почти рабочим - он был осмысленным.
    Я понимаю, если бы вы не умели работать с базой данных. Но у вас уже был рабочий код!
    А здесь опять какие-то самолеты из соломы. Попытка получить скалярную переменную с числом из запроса, который возвращает ВСЕ колонки ВСЕХ строк таблицы.

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Наверное, надо проверять элемент исходного списка, является ли он списком, и только тогда распаковывать?
    Если уровень вложенности у нас один, то так и написать
    chained = []
    for item in posl:
        if isinstance(item, list):
            for subitem in item:
                chained.append(subitem)
        else:
            chained.append(item)

    Это будет самый кондовый алгоритм. Задачу можно реализовать и короче, и оптимальнее. Но при изучении программирования надо сначала научиться составлять самому простейшие алгоритмы и их реализовывать, а не просто пытаться использовать по очереди какие-то магические заклинания - авось какое-то сработает. А если не сработает - то идти на Хабр, чтобы тебе его написали.
    Любой красивый код следует применять только тогда, когда ты понимаешь, как он работает, что делает внутри. А если не понимаешь, то лучше сначала разобраться, реализовать тот же алгоритм руками. Иначе ты будешь не программист, а обезьяна с гранатой.

    Если вложенность неограниченная, то придется познакомиться с таким понятием, как рекурсия.
    Ответ написан
    Комментировать
  • Какую книгу прочитать про SQL?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    https://svyatoslav.biz/relational_databases_book/

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вообще непонятно, о чем речь, но скорее всего к "элементам" ведут неверные пути.
    URL всех локальных ресурсов должен состоять из абсолютного пути к нему
    то есть
    /img/logo.jpg
    /pages/about.php
    и так далее
    Ответ написан
    Комментировать
  • Почему возникает TypeError: must be str, not int?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В качестве аргумента count() ожидает строку, а не число
    Ответ написан
    Комментировать
  • Как правильно написать regex?

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

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

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

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вот для меня это тоже проблема - не знаю, что ответить, когда задают этот вопрос.
    Пока остановился на ботах. Рекомендую делать бота для телеги. По крайней мере, это очень популярное направление, ну и можно что-то интересное замутить. Бот для изучения английского, например.
    spoiler
    Судя по вопросам здесь, питон+телеграм - это новый пхп+веб. Абсолютное дежавю: точно так же, как 10 лет назад, просто пудовищное количество людей, которые абсолютно не понимают, что они делают, но им всё надо прямо щас.


    Джангу не рекомендую, это ступенькой выше. Это и так-то боль, а если не знать Питона, то совсем будет плохо. Джангу лучше учить после пхп. Потому что на пыхе можно сделать веб-сайт так же просто, как на Питоне - калькулятор. И уже потом, примерно поняв, что к чему, можно садиться за джангу, чтобы имея общее представление об SQL, HTTP, устройстве веб-сайта -уже переходить на ORM, роутинг, MVC.
    Ответ написан
  • Выучил синтаксис языка. как использовать его на практике?

    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
    Ответ написан
    Комментировать
  • Как лучше организовать вывод 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
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я это понимаю так:
    Интерфейс - это публичный контракт. Информация для посторонних, для тех кто будет с классом взаимодействовать.
    Абстрактный класс - это внутренняя кухня, прототип для реализации.
    То есть одно другому никак не противоречит. Даже если абстрактный класс и интерфейс будут сильно похожи.
    Ответ написан
    Комментировать