• Как оптимизировать таблицу с JSON строкой в mysql?

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

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

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    копать в сторону гугля вестимо
    ssh socks proxy
    делается одной строчкой на никсах или настройкой путти в венде.
    собственно от удаленного сервера ничего не нужно кроме доступа по ssh
    Ответ написан
    3 комментария
  • Как в bash-скрипте ограничить ввод двумя вариантами?

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

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

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

    В данном случае notebooks_and_computers/notebooks - это просто SEO мусор, который вообще не нужен для отображения товара. Для которого нужен только айди товара. Ну вот и запускается контроллер витрины с экшеном отображения карточки товара.
    Ответ написан
    2 комментария
  • Как получить "хеш"/сравнить изображение?

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это какой-то странный сайт, который зачем-то показывает данные в виде json, хотя в запросе он отсутствует.
    А весь массив целиком передается в полях запроса.
    То есть это будет $_POST['fields']['name']['value']
    Ответ написан
    2 комментария
  • Как лучше прикрепить файлы к записи в блоге?

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

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Никак.

    Причем в данном конкретном случае это еще и бессмысленно.
    Админу не нужна картинка, чтобы отредактировать пост. Она уже загружена, и заново ее загружать просто не имеет смысла.
    Ответ написан
    6 комментариев
  • Как исправить ошибку php Call to a member function bind_param() on boolean in?

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

    Да нет, дело не в умственных способностях. Просто всё поколение такое. Не умеет пользоваться интернетом. Только тикток смотреть в телефоне.

    Вот, я погуглил за вас: Не добавляются данные в таблицу

    Соответственно, после исправления ошибки надо будет ещё переписать кусок после bind_param, убрав бессмысленную проверку и оставив только
    $stmt->execute();
    return [
        'error' => false,
        'message' => 'Дело успешно добавлено'
    ];
    Ответ написан
  • Какую структуру таблиц выбрать для описания некоторой сущности, у представителей которой часть атрибутов совпадает, а часть - различна?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как правильно написали выше, общепринятой практики нет.
    С натяжкой общепринятой можно назвать практику, когда часть свойств пишется в JSON поле, но как раз для описанного в вопросе случая она не должна применяться. Здесь однозначно подходит стандартная реляционная структура. Нет гарантии? Пишем null. Нет пробега? Пишем 0 км.

    А вот если нам надо хранить совсем различные товары, например автомобили и автомагнитолы, то специфические для товара характеристики можно писать в JSON поле. Но в этом случае потребуется отдельная база данных, которая будет хранить все возможные варианты ключей в этом JSON поле.
    Ответ написан
    2 комментария
  • Стоит ли мне поработать php-разработчиком, а потом набравшись опыта перейти на java?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Да, но не на джунской вакансии.

    Сам по себе современный пых как раз очень сильно покусан явой.
    И если писать на пхп, используя современные подходы в ООП, то при переходе на яву увидишь очень много общего. Собственно, пхпшники всю жизнь учили паттерны проектирования по книжкам для Явы.

    Но сдается мне, что под "вакансиями пхп в моем городе" подразумеваются исключительно битрикс и вордпресс. Которые не то что ничего не прибавят к опыту, а наоборот, дадут только жирный минус.

    Но сначала надо научиться формулировать вопросы. Без этого умения ни в пхп ни в яве толку не будет
    Ответ написан
    3 комментария
  • Как работает поиск по таблице в PhpMyAdmin?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Непонятно, что именно здесь может быть непонятно
    PhpMyAdmin - тупейшая программа, которая на веб странице показывает результат запроса, с разбивкой на страницы.
    Если запрос вида SELECT * FROM table, то показывает все содержимое таблицы
    Если запрос вида SELECT * FROM table WHERE col=value, то показывает только те строки, в которых выполняется условие поиска.

    Если вопрос в том, как PhpMyAdmin запоминает условие поиска между страницами - точно так же, как запоминает всё остальное, включая авторизованного пользователя - в сессии.
    Ответ написан
  • Ошибка 500 php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если это локальный сервер то добавить строчку
    php_ini("display_errors", "on");
    Если боевой, то смотреть ошибку в логах
    Ответ написан
    Комментировать
  • Занесение данных из формы в базу данных?

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

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $conn = new mysqli("зачем", "вам", "это", "знать?");
    
    $name = $_POST["name"];
    $login = $_POST["login"];
    $pass = $_POST["password"];
    
    $sql = "INSERT INTO admins (login, pass, name) VALUES (?,?,?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("sss", $login, $pass, $name);
    $stmt->execute();
    
    $id = $conn->insert_id;
    header("Location: profile.php?id=$id");


    Пара замечаний
    • отдельная таблица админов обычно не делается, достаточно общей таблицы пользователей
    • id вставлять не надо, его должна генерировать БД
    • после успешной обработки прямого POST запроса обязательно должен быть редирект. Обычно это либо созданная учетка, или страница входа или список пользователей или что-то ещё
    • при обработке прямого запроса никаких echo в коде быть не должно
    Ответ написан
  • Можно ли как-то использовать абсолютный путь до папки/файла в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не только можно, но и нужно.
    Всегда надо использовать только абсолютные пути.
    Ответ написан
    Комментировать
  • Как сделать поиск данных из mysql которые сохраненны в формате unicode?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо сделать сохранение данных в нормальном формате и тогда будет поиск работать.

    Но для этого надо сначала научиться пользоваться базой данных, потом разработать нормальную структуру, и хранить данные как положено - каждое поле отдельно, а не всё одной в помойной куче.
    Ответ написан
  • В чем может быть проблема при подключении к API через PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Во-первых, надо забыть про функцию print_r.
    Если вы хотите увидеть хоть какой-то вразумительный результат, то надо использовать var_dump.
    Во-вторых, надо включить режим отображения ошибок (либо смотреть их в логе).
    Судя по всему, file_get_contents возвращает false, а это происходит в случае ошибки.
    file_get_contents по умолчанию выплевывает обычный Warning. И если вы его не видите, это значит, что вы не видите вообще никакие ошибки РНР. И как можно вообще заниматься разработкой в таком случае - загадка.

    Для отладки полезно вывести содержимое специальной переменной, которая содержит заголовки ответа, var_dump($http_response_header);

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

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

    когда лучше реляционную и нереляционную использовать?

    Ответ на этот вопрос очень простой.
    Нереляционная БД - это НЕ база данных.
    А узкоспециализированное хранилище, которое может выполнять какую-то одну определенную функцию лучше, чем база данных. Это может быть кэширующий демон, или поисковый движок, или решение для аналитики, или какое-то подсобное хранилище для всякого мусора.

    Как только осознаёшь этот простой факт, то всё сразу становится на место:
    Если нужна база данных, то и использовать надо базу данных. Реляционную. Какую именно - в вашем случае не принципиально.

    Если вдруг проект пройдет стадию "неясные идеи", и выльется во что-то практическое, и даже появится какая-то нагрузка, то можно будет начать думать про использование одного или нескольких подсобных хранилищ в дополнение к базе данных.
    Ответ написан
    2 комментария