Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • Как перенаправлять все URL сайта на обработчик?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В 21 веке что то заранее "знать" для решения конкретной задачи совсем не обязательно.
    Потому что существует такая штука как интернет, а в ней - поисковые системы.

    На одном только этом сайте не меньше сотни ответов на этот вопрос.
    Ответ написан
    Комментировать
  • Как обработать запрос?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    я уже не в первый раз вижу этот говнокод на тостере, "db::i()"
    там ещё шаблонизатор вызывается такими же командами, как будто у программиста вычитают из зарплаты за каждый написанный символ.
    кто-нибудь знает, что это за творение нечеловеческой мысли?
    Ответ написан
  • Почему неправильно работает сравнение?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос
    Сколько строк вернёт база данных, если в запрос передать несуществующий логин?

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

    Подробнее про вопрос секьюрности этого куска:
    Если переменная подставляется напрямую в запрос, то это значит что в нее можно дописать SQL, который будет делать совсем не то, что ожидалось.
    Например, если вместо имени пользователя написать что-то вроде имя' AND LEFT(password, 1) = 'a
    то тогда код напишет "Лоигн занят" если первая буква пароля - "а". Пара десятков таких запросов - и первую букву мы уже угадали. Тем же способом же достаём остальные и вот мы получили пароль любого клиента.

    Чтобы этого не было, переменные никогда не пишут в запрос напрямую. а передают отдельно.
    как это делать - я уже писал подробно, правда в ответе на другой вопрос

    Здесь надо делать так

    $input = json_decode(file_get_contents("php://input"), true);
    
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect(*информация БД*);
    $link->set_charset("utf8mb4");
    
    $stmt = $link->prepare( "SELECT login FROM sn_users WHERE login=?");
    $stmt->bind_param("s", $login);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    if ($row) {
        echo "Лоигн занят";
    } else {
        echo "Лоигн свободен";
    }
    Ответ написан
    7 комментариев
  • Как отредактировать данные в php файлах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это бесполезное занятие и лучше сделать хранение этих данных в каком угодно хранилище. Если на сайте уже доступна mysql, то хранить в ней.

    Чтобы при помощи php можно через форму можно редактировать данные, они не должны лежать в РНР файлах.
    Ответ написан
    4 комментария
  • Зачем несколько уровней в функции вывода результата sqlite3?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это идиотская функция.
    Ни $count, ни несколько уровней (вложенных циклов, как я понимаю) здесь не нужны.
    Она зачем-то перебирает полученный массив $row в цикле, чтобы получить в итоге точно такой же.
    ТОГО ЖЕ САМОГО результата можно добиться кодом
    function bdresult($queryResultSet){
        $multiArray = [];
        while ($row = $queryResultSet->fetchArray(SQLITE3_ASSOC)) {
            $multiArray[] = $row;
        }
        return $multiArray;
    }

    без дурацкого перебора массива $row.
    Эта функция запрашивает по очереди все строки, которые вернул запрос, и добавляет их в массив, который потом возвращает.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых, надо выбросить из головы эту дурь, "хачу изначально писать правильно".
    Изначально надо написать хоть что-то.
    Ни один сайт в мире не писался "изначально правильно". Сначала пишут рабочий прототип, чтобы хотя бы самому понять, что ты делаешь.
    Это принципиальный момент. Варианта тут только два - либо ты делаешь минимальный вариант доступными средствами и потом его развиваешь, либо сидишь на диване и рассуждаешь о самых модных веяниях и в итоге не получаешь ничего. Особенно если даже минимальный вариант реализации для тебя темный лес и загадка века.

    И делать не 100500 способов оповещения, а один.
    То есть сделать таблицу подписки, в которой указано - на какое событие подписался юзер, и его айди.

    После этого написать самый тупой код, который прямо при наступлении события лезет в базу, находит емейлы всех полутора подписантов, и в цикле рассылает им оповещения.

    Одно это уже займёт вас на пару месяцев.

    И только после того как это сделано, после того как заработает хоть что-то, можно начинать думать в сторону других способов. Но опять же, не всех скопом, а по одному. Сделали рассылку в телеграм? Поехали с оповещениями в браузер.

    То же самое касается способа рассылки.
    Только после того как рассылка начинает занимать ощутимое время - и, разумеется, после того как она вообще была сделана - только после этого можно задуматься о сервере очередей, о том что по наступлению события добавляются только задания в очередь, а сами рассылки делают несколько отдельных сервисов и воркеров. И всё это, разумеется, только если проект не загнется раньше/у автора не пропадёт интерес/у него же хватит способностей осилить всю эту премудрость
    Ответ написан
    Комментировать
  • Каким образом лучше вывести в консоль веб-сервера PHP данных вроде ошибок, данных (var_dump) схожим образом, как они выводятся при разработке на IDE?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    если честно, то я совсем не понимаю этих проблем

    и постоянно бегать на сервер обновлять лог и обратно,

    я не понимаю, что это значит
    в моем мире есть ssh консоль на сервер, в котором запущена команда tail -f error.log
    которая в реальном времени отображает все обновления в логе
    то есть "бегать" и "обновлять" ничего не нужно, а всего лишь разместить окно терминала на соседнем мониторе и видеть всю отладочную информацию в реальном времени
    это если говорить об отладке через лог ошибок и "консоль веб-сервера" (что бы это не значило)

    вывод var_dump(), конечно, без небольшой доводки так просто в лог не направишь, но вместо неё вполне можно использовать json_encode. ну или уж написать обертку над var_dump которая через ob_start сохраняет вывод в строку, которую потом можно через error_log() отправлять в лог ошибок РНР

    я работаю с вебхуками и api поэтому браузером почти не пользуюсь.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я не понял, так чего вы боитесь в итоге - что "будет подъедать" или что процессы будут накладываться друг на друга.
    Во втором случае надо определиться - это запуск по крону, ИЛИ демон.

    В общем случае надо выкинуть крон вообще и использовать supervisord
    тогда проблемы с "как остановить" и "как сделать чтобы процесс не останавливался" решатся сами собой
    Ответ написан
    Комментировать
  • Как эффективно хранить canvas попискельно в БД с последующим отображением?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну как минимум за $table->string('color', 18); надо руки сразу отрывать
    То есть на координатах наэкономили, 4 байта в сумме, а потом хоба - в 4 раза больше на несчастный цвет. при том что цветов там явно не больше десятка. И это не говоря уже про нормализацию.

    По уму надо придумать простой бинарный протокол, который получает поток байт выравненными кусками
    2 байта х
    2 байта у
    1 байт цвет
    4 байта юзер (и нечего жадничать, никаких BigInteger. половины населения земного шара вполне хватит)
    то есть всего 9 байт.
    а не под сотню, как сейчас - ещё и завернутое в скобочки/кавычечки джейсона

    Если подумать, то можно юзера сразу не передавать. Всех юзеров никто смотреть не будет, а при наведении можно и отдельный запрос послать. Тогда можно и BigInteger оставить.
    Получится всего 5 байт на пиксель, то есть 10 метров на всю карту. Дофига, но подъемно.

    По пагинации это дурь какая-то. Зачем "офсет-лимиты" если уже есть четкая разбивка.
    Кто мешает запрашивать тупо построчно? Скажем, по 100 строк картинки? 10 запросов по мегабайту.
    id в этой таблице по сути вообще не нужно, только если лара без него не сможет. Но по уму первичный ключ - это ху.

    Из БД получать 2 лимона строк конечно тоже не сахар
    Но можно наверное увеличить строки, хотя бы виртуально.
    Вью или процедура, которая комбинирует скажем сто строк в одну

    Насчет других хранилищ я не уверен. Там же наверняка нужна будет выборка обновлений, по таймстампу.
    Но в целом с Редисом поэкспериментировать можно.
    Ответ написан
    1 комментарий
  • Как обратиться к Kuna API через PHP file_get_contents?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если через курл работает, а через file_get_contents - нет, это значит что во втором случае не заданы в точности те же самые параметры, которые используются в первом варианте.
    Можете не благодарить.
    Ответ написан
  • C чего новичку начинать изучение php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если на английском, то
    https://phptherightway.com/
    https://phpdelusions.net/
    https://www.youtube.com/watch?v=sVbEyFZKgqk&list=P...
    Ещё порекомендую по возможности приобрести книгу Джона Дакетта PHP&MySQL

    Ну и если есть вот прямо такое желание не превратиться в редиску позорящего (а с РНР это практически неизбежно, учитывая количество говнокода, который выдают за обучающие материалы всякие самозванцы, жулики и просто дурачки) то при сомнениях пишите сюда вопросы, мы всегда поможем разобраться и отличить зерна от плевел
    Ответ написан
    2 комментария
  • Как правильно связать php сайт с mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На частные вопросы ответили в комментариях, поэтому ответим на вопрос из заголовка.

    Чтобы соединить сайт с mysql, в РНР вообще-то есть два API - mysqli и PDO. Несколько лет назад с mysqli вообще невозможно было нормально работать, но на данный момент они выровнялись, хотя PDO все равно удобнее, по трем причинам
    1. Единый интерфейс при работе с различными СУБД (неактуально, если mysql для нас является синон