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

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

    Хотя конечно наиболее вероятная причина - Бом не даёт стартовать сессию, а ты этого не видишь потому что задавлены ошибки в пхп.
    Ответ написан
  • Как указать канонический адрес страницы, если сайт делается в open server и домена пока что нет?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не нужен никакой "канонический адрес". Вообще не нужно никогда в ссылках писать url.

    Писать надо только путь, причем абсолютный. То есть /question/var.php

    И все будет всегда работать на любом домене
    Ответ написан
    Комментировать
  • Как отправить POST запрос в другую дерикторию?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    /external-form/resources/views
    Ответ написан
    Комментировать
  • Почему не выводятся данные из БД на сайте?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ошибка Couldn't fetch mysqli обычно означает, что соединение с бд уже было закрыто
    Ответ написан
  • Ошибка подключения к mysql. Почему?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В принципе Rsa97 уже все написал, но хочу подчеркнуть, что function query изначально было дурацкой идеей.
    Функция-то правильная, но вот название надо было давать другое.

    А, главное, если всё равно используется свой класс DB, то какой смысл было екстендить PDO, становится совсем непонятно.
    Ведь написать DB::query( тупо проще чем DB::$dbs->query(
    И с архитектурной точки зрения так будет в миллион раз правильнее.
    Ну это если не считать что сам по себе статический класс DB это решение так себе. Но для процедурщины сойдет.
    Ответ написан
    Комментировать
  • Как перенести строку в GET параметре?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    http_build_query()
    Ответ написан
    Комментировать
  • Объединить динамическое кол-во массивов в один массив PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    array_merge()
    Ответ написан
    Комментировать
  • Почему 0 возвращает fasle?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос конечно странный, а ответы так вообще ужас, но если речь идет о строгом сравнении, то в Твиге для этого используется оператор same as.

    То есть если нужно чтобы при нуле отображение было, а при false - нет, то пишем
    {% if count is not same as (false)%}

    Плюс, как выяснилось, твиговское empty не включает 0, то есть можно написать и так
    {% if count is not empty %}
    Ответ написан
    Комментировать
  • Как отдать файл, но перед этим его выполнить через .htaccess?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Этот файл выполняется.
    .htaccess здесь не при чем
    Этот код - огромная дыра в безопасности. по меньшей мере делай basename($_GET['path']);
    Ответ написан
    Комментировать
  • Как реализовать постоянное подключение к бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никакое "постоянное" соединение с БД не нужно.
    Надо просто не запускать игры на хостинге за три копейки.

    "Хостинг", на котором нет таких нелепых ограничений, называется VPS
    Ответ написан
    9 комментариев
  • Как записать время по русски в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    НИКАК не записывать!

    Вместо этого хоть немного узнать как работают базы данных.
    В mysql есть тип данных time - вот его надо поставить для колонки duree и писать в него только длительность.
    А минуты добавлять при выводе. Хоть на русском, хоть на китайском.

    И почитать про нормальную защиту от SQL инъекций.
    Вот эта фигня - str_replace("'","\'" - это мёртвому припарки.
    Ответ написан
    3 комментария
  • Почему возникает ошибка при ограничении доступа к профилю для незарегистрированных юзеров?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Надо понимать что слово "ютубер" это синоним слова "криворукий идиот".
    И проблемы в этом коде куда более серьёзные, чем банальная ошибка, которая лечится с помощью isset()

    Куда важнее две ДЫРИЩИ в этом коде, при наличии которых что ограничивай - что не ограничивай, но по сайту будет ходить кто захочет и как захочет.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что данные в БД надо добавлять по-человечески, а не как пацаны в подворотне показали.

    Данные в БД надо всегда отправлять отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

    bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);

    И скажи спасибо что у тебя просто слеши пропали, а не всю базу шутники удалили
    Ответ написан
  • Как сделать несколько запросов в секунду на страницу сайта, чтобы сработал php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Объясните кто-нибудь этому горемыке, что его за такие шутки возьмут за ушко да на солнышко. И большого пинка под зад.
    Ответ написан
    Комментировать
  • Почему вместо кириллицы знаки вопросов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Давно пора запилить аналог вот этого ответа.
    А то же ведь раз в три дня один и тот же вопрос - кракозябры, вопросики, ромбики.
    И везде одна и та же ересь про "meta charset" в ответах.

    Именно в варианте чеклист, чтобы каждый проверял по конкретным пунктам, в которых четко написано, что делать, вместо невнятного мычания "ну у меня там утээф и еще здесь и вот тута"

    В Mysql
    • Кодировка, которую надо выставлять, называется utf8mb4
    • Что там стоит на "всей БД" абсолютно без разницы. Кодировка должна быть указана для таблиц (в отдельных случаях - для поля) при создании. Проверить можно командой SHOW CREATE TABLE table_name

    В PHP
    • Должна быть быть выставлена кодировка соединения с БД
      • в PDO через DSN $dbh = new PDO('mysql:host=...;charset=utf8mb4');
      • в mysqli $mysqli->set_charset('utf8mb4');


    В браузере
    Для того, чтобы браузер корректно отображал кодировку, её надо указать HTTP заголовках.
    • Либо default_charset = "utf-8" в php.ini.
    • Либо руками в коде header('Content-Type: text/html; charset=utf-8');

    Проверять в консоли разработчика: вкладка Сеть, кликаем на запрос, смотрим заголовки
    Ответ написан
    Комментировать
  • Как правильнее сделать такой функционал?

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

    потом проходишь по массиву и сравниваешь текущее время с интервалами. если входит - то ставим флаг и выходим из цикла
    Ответ написан
    1 комментарий
  • Какие недостатки у такой авторизации?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Есть такая русская пословица, "дурная голова ногам покоя не даёт".
    Вот она про это "изобретение".
    Ответ написан
    Комментировать
  • Как в for прописать 2 условия?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Начинающие программисты действительно часто путают логические И и ИЛИ, которые отличаются от бытовых И и ИЛИ.
    Результат логического ИЛИ будет true если любой из операндов вернул true

    А здесь нужно выполнять цикл, пока оба условия выполняются, и прекратить, если хоть одно стало false. То есть, нужно логическое И
    Ответ написан
    Комментировать