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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Писать в папку Controller
    Вызывать из роутера.
    Ответ написан
  • Как оформить вызов методов один за другим?

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

    плюс абсолютно бессмысленный код, который вообще ничего не показывает, даже пресловутый "вызов по цепочке"

    плюс непонятно, в чем конкретно вопрос.
    можно ли в start() написать
    $this->one()
    $this->two()
    $this->three()
    ?

    Можно
    Ответ написан
  • Проблема при попытке отправить письмо?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    не могу понять почему она произошла.

    Для этого следует прочитать сообщение об ошибке.
    Ответ написан
    Комментировать
  • Как из объекта убрать повторы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нормализовать свою базу данных.
    Ответ написан
    Комментировать
  • Как вытащить данные?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вы, друзья мои, совсем обленились.
    site:toster.ru php вытащить данные из json
    Ответ написан
    2 комментария
  • Как получать доступ к данным через php из json массива?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Как выглядит и работает фильтрация PHP POST & GET?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как выглядит и работает фильтрация PHP POST & GET?

    Никак.
    Я понимаю, что это утверждение не укладывается голове у человека, изучавшего пхп по видеокурсам, но это факт.
    Сами по себе НТТР запросы POST & GET никакой угрозы не несут и как-то заранее фильтровать их не надо.

    Фильтровать вообще надо не по принципу "откуда", а по принципу "куда".
    Данные надо форматировать в зависимости от того, куда они пойдут, а не откуда они пришли. SQL запросу абсолтно фиолетово, откуда взялась кавычка в данных - из GET, файла на диске, или из другой базы данных. Данные для SQL надо правильно форматировать не потому что они пришли из GET, а потому что они идут в SQL.
    (При этом надо также понимать, что SQL запрос и база данных - это не одно и тоже. Базе тоже по барабану, что в ней лежит. Любое форматирование мы делаем только для SQL запроса, а в базе данные снова должны быть как есть).

    Я думал, что будут удаляться все кавычки и теги,а по факту они остаются.

    Если бы все думали, как ты, то ты бы не смог задать свой вопрос на Тостере. Потому что без кавычек и тегов он превратился бы в бессмыслицу. Как и куча любых других вопросов.
    Разумеется, "мусор" надо не удалять, а форматировать. Потому что это "мусор" только для SQL, а для человека это нужная информация, которая помогает читать текст.

    Не использовать же для этого регулярки?

    Нет, разумеется.
    Использовать регулярки будет так же глупо, как и твою функцию.

    Для того, чтобы поместить переменную в SQL запрос, надо использовать подстановки в подготовленных выражениях. Запомни это предложение. Оно важнее всего, что ты до сих пор успел узнать про пхп. Хорошоенько запомни, ты должен это знать лучше, чем зовут маму с папой. И никогда не отступать от этого правила. Не важно - нужна тебе защита от SQL инъекций или не нужна, из POST-а ли пришли данные, или Господь бог тебе их надиктовал на горе Синайской - все равно всегда и везде только через подстановки.

    Поэтому.
    1. Выкидываешь свою функцию на помойку. Единственное слово, которое там имеет там хоть какой-то смысл - это trim(). Ну так ты можешь вызывать её напрямую.
    2. Судя по уровню кода и вопроса, для работы с бд ты используешь убогую mysqli. Поэтому забудь вообще про mysqli_query(), а все запросы, в которых используется хотя бы одна переменная, выполняешь только так
    $stmt = $conn->prepare("INSERT INTO tablitsa (login_name,email) VALUES (?,?)");
    $stmt->bind_param("ss", $login, $email);
    $stmt->execute();

    Подробнее можешь почитать в интернете.
    3. При выводе пользовательских данных в HTML, используешь функцию htmlspecialchars(). Надеюсь, к этому моменту ты уже понял главную мысль - важно не откуда пришли данные, а куда. Идут в хтмл? Отлично, форматируем их для хтмл.
    Ответ написан
    6 комментариев
  • Почему require_once не работает?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что надо учить основы работы с файловой системой.

    Для того, чтобы require не выдавал ошибку, путь к файлу должен быть правильным и абсолютным.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В ужасе убрать это адище, и сделать отдельную таблицу для картинок.
    Запросы писать с использованием подготовленных выражений.
    Не юлить и не оправдываться, а сделать и то и другое.
    Ответ написан
    Комментировать
  • Как сравнить две даты со временем и в каком формате?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Гражданы, имейте уже совесть

    site:toster.ru+php+сравнить+две+даты
    Ответ написан
    Комментировать
  • Почему Cannot modify header information?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в каком файле копать?

    Сообщение об ошибке читать не пробовал?

    output started at /home/s/sofuwa/beta.sofuwa.ru/public_html/wp-includes/functions.php:4231
    Имя файла и строка - все на блюдечке.
    Ответ написан
    Комментировать
  • Как ко времени например "10:30" прибавить 10 минут в php?

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

    Вычисление времени проходят, по-моему, классе в третьем.
    Возможно, вам стоит повторить курс начальной школы.
    $time = "10:30";
    $add = 10;
    list($hours,$minutes) = explode(":",$time);
    $total_minutes = $hours * 60 + $minutes;
    $new_total = $total_minutes + $add; 
    $new_minutes = $new_total % 60;
    $new_hours = floor($new_total / 60);
    $new_hours = $new_hours % 24;
    $new_time = "$new_hours:$new_minutes";
    Ответ написан
    Комментировать
  • Искажается хеш из MySQL при проверке пароля - как поправить?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Показываю на пальцах, как отлаживать свой кривой код

    $passwd = '123123';
    $email = "test@test.test";
    $hash = password_hash($passwd, PASSWORD_DEFAULT);
    $stmt =$conn->prepare("INSERT INTO reg SET email = ?, password=?, name_reg=''");
    $stmt->bind_param("ss", $email, $hash,);
    $stmt->execute();
    $id = $conn->insert_id;
    
    $stmt =$conn->prepare("SELECT * FROM reg WHERE id=?");
    $stmt->bind_param("s", $id);
    $stmt->execute();
    $result = $stmt->get_result();
    $userData = $result->fetch_assoc();
    
    $checkPasswd = password_verify($hash, $userData["password"]);
    var_dump($hash, $userData["password"],$passwd === $userData["password"],$checkPasswd);


    Запустить этот код и убедиться, что на удивление, База данных ничего с твоими данными не делает, возвращает в точности то же самое что клал (ну или, как вариант, с удивлением обнаружить что длина поля совсем не 128 букв например).

    После этого начать разбираться с менее фантастическими вариантами. Например, что в БД "после экспериментов" лежит куча записей с оинаковыми емейлами и разными паролями. Или какая-то другая проблема столь же интеллектуального свойства.

    Если $hash, $userData["password"] выглядят одинаково, но $passwd === $userData["password"] возвращает false, то выводим $hash, $userData["password"] через urlencode() и смотрим разницу.

    Основная идея тут в том, чтобы проверять каждое свое предположение. Причем не методом высасывания из пальца, а самым что ни на есть наглядным способом. То есть проверять ровно то, что клал в конкретную таблицу БД, а не то что когда-то давно куда-то клал, но куда и когда не помню.
    Ответ написан
    2 комментария
  • Как стать пентестером?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если ты спрашиваешь - то никак. Это не глум и не троллинг. Это факт.

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну, запрос, конечно, без индекса, но один раз запустить можно

    SET SESSION group_concat_max_len = 10000000;
    select replace(replace(email, '.',''),'+',''), group_concat(email), count(1) cnt
    from table 
    group by replace(replace(email, '.',''),'+','') 
    having cnt > 1
    order by cnt desc
    Ответ написан
    1 комментарий
  • Как записать через php данные в базу MS SQL (не MySQL) в кодировке windows-1251?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    set names задает не целевую кодировку, а исходную
    Целевую указывать не надо, база ее и так знает
    Ответ написан
  • Как выводить массив в цикле в шаблоне по порядку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    У тебя вшаблоге не должно быть строк с "Москва", "АБВ".

    Эти строки должны лежать в базе.
    Там же, где и ссылки
    И выводиться тем же циклом
    Ответ написан
    5 комментариев
  • Не выводится цикл из бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Учись формулировать свои мысли. Причем сразу в гугл.

    У тебя не "не выводится", а "выводится только последняя запись". Вот и пиши это в гугл. Эта дурацкая ошибка весьма популярна среди новичков и ответов найдется море.
    Ответ написан
    Комментировать
  • Как получить данные из файла?

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

    Ну или ладно. Это, конечно, ад, и за такое надо тоже руки отрывать
    $s = file_get_contents("fail");
    $s = str_replace(["\r","\n"], "", $s);
    $s = "[" . str_replace("}{", "},{", $s) . "]";
    $array = json_decode($s,1);


    Дальше сам.
    Ответ написан
    3 комментария
  • Как изменить значение каждого элемента в массиве?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для того, чтобы перебрать элементы массива по очереди, требуется такой основополагающий элемент программирвоания, как цикл.
    В РНР есть универсальная функция для перебора массивов - foreach. В базовом варианте мы проходим по массиву, получая пары ключ-значение и присваиваем элементу массива новое значение по ключу.
    foreach ($array as $key => $value) {
        $array[$key] = something($value);
    }

    чтобы в результате было так

    Это уже другой вопрос, к массивам никакого отношения не имеющий.
    Ответ написан