Задать вопрос
  • Какую структуру таблиц выбрать для описания некоторой сущности, у представителей которой часть атрибутов совпадает, а часть - различна?

    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 комментария
  • Как реализовать диалоговый бот на PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    $data = json_decode(file_get_contents('php://input'), TRUE);

    Вот тут в $data у вас не только сообщение, но и много другой информации. В частности, айди юзера.
    я думаю, что этот айди можно использовать в качестве идентификатора сессии, передавая в session_id() перед вызовом session_start()
    Во всяком случае можно попробовать
    если сессия не взлетит, то эмулировать её на любом другом хранилище, используя идентификатор юзера чтобы сохранять состояние бота для него

    Попробовал, сессия через юзер айди не работает потому что идентификатор телеграма не подходит под стандарт идентификатора сессии.
    Если эмулировать (просто добив до нужной длины) то сессия начинает работать.
    Ответ написан
    Комментировать
  • Как составить запрос sql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это надо делать не в SQL.
    Ответ написан
  • Как сделать чтобы при вводе неправильных данных выводилась ошибка и пользователь вводил данные сначала?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем случае это реализуется с помощью цикла.
    Например, делаем бесконечный цикл, из которого выходим либо если введено корректное значение, либо (такой вариант тоже желательно предусмотреть) если пользователь больше не хочет работать с программой.
    Скажем, в консольной программе можно написать как-то так
    while True:
        data = input("Enter data: ")
        if data == '':
            print("Empty input. Exiting...")
            quit()
        if ( здесь пишем проверку):
            print("Please enter correct value")
        else:
            break


    В итоге ниже этого цикла в data будет корректное значение.
    проверок и сообщений об ошибках может быть несколько.
    Ответ написан
  • Как записать данные в переменную PHP и вызывать их в любом участке кода?

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

    Ответ на этот вопрос содержится в нем самом.
    Надо записать в переменную, а потом вызвать её в любом участке кода.
    При этом если вы сами же не записали данные в переменную, то вызывать её потом бесполезно.

    в одном из блоков if записываю данные в переменную. Проблема в том, что когда я пытаюсь вызвать его в другом блоке elseif - она выводиться пустая


    А вот этот вопрос говорит о том, что вы, видимо, даже не понимаете, как работают конструкции if и else. Что сам принцип этих конструкций состоит в том, что если выполнилась одна ветка, то по определению другие выполняться не будут.

    Поскольку вы не удосужились написать, какая именно переменная вызывает проблему, я предполагаю, что речь о $channelUsername. Учитывая, что она передается по ссылке, то дело не в том, что она "перезаписывается". А в том, что её попросту неоткуда взять, если в $message лежит число
    Ответ написан
    Комментировать
  • Почему форма заявки не работает?

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

    Но в данном случае надо прочитать, что вам пишут, и дальше гуглить Не работает POST запрос 405 Not Allowed

    Скорее всего, попросту не установлен РНР.
    Ответ написан
    Комментировать
  • Как сохранить функцию php при срабатывании скрипта js?

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

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

    Всё что тут понаписано - это какие-то завиральные идеи от неграмотности.
    И их надо просто выкинуть из головы.
    поле product_id не имеет смысла, его надо убрать из таблицы
    в name ничего подставлять не надо.
    Ответ написан
    8 комментариев
  • Как сделать проверку статуса платежа и дальнейшее выполнение функций?

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

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

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

    Казалось бы, набери в браузере: php json_encode кракозябры и получи ответ меньше, чем за секунду
    но по какой-то неведомой причине разработчики, родившиеся через 50 лет после появления интернета, почему-то не умеют им пользоваться
    Ответ написан
    1 комментарий
  • Нужен ли цикл для рекурсии?

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

    Для нахождения делителей никакая рекурсия не нужна, достаточно цикла.
    С рекурсией можно изъевернуться, но это уже будет проходить по классу жестких извращений.
    Ответ написан
    Комментировать