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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Блин
    Обнови версию РНР и включи отображение ошибок
    Тогда тебе РНР сам подскажет что ты фигню пишешь - пытаешься к булевой переменной обратиться как к массиву
    Ответ написан
    Комментировать
  • Нужно ли проверять каждое обращение к БД на php?

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

    Большинство складывателей букв на РНР об этом не задумываются вообще, и очень хорошо что тебе пришел в голову этот вопрос. А ответ на него очень простой:

    Проверять обращения к БД не нужно вообще

    (за исключением нескольких специальных случаев, когда есть определенный сецнарий обработки ошибки)
    Если же такого сценария нет, то никак проверять не нужно. Просто потому, что обращения к БД ничем не отличаются от любого другого кода.
    И поскольку ты не проверяешь каждый include или там оператор деления, то не нужно и проверять запросы к БД. Их надо оставить в покое. И первый, и каждый по отдельности, и все 5 разом.

    А вот что нужно сделать - это договориться с РНР, чтобы он сам сообщал тебе об ошибках в запросах. Для mysqli надо написать перед коннектом
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    Для ПДО при соединении выставить в настройках соединения

    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

    Всё. Больше ничего для обращений к БД делать не надо.

    А вот обработчик ошибок, общий для всего кода, а не только для работы с БД, настроить желательно.
    Чтобы AJAX-скрипт подписки получал соответствующий НТТР статус при любой ошибке, которая может возникнуть на сервере.
    Ну и разумеется AJAX-скрипт подписки должен проверять НТТР статус, и обрабатывать ответ только если статус= 200
    Пример обработчика можно посмотреть здесь

    Если же надо убедиться, что все пять запросов выполнились без ошибок, то для таких целей служат транзакции.
    Суть транзакции именно в том, что либо выполнияются либо все запросы, либо ни одного.
    Если заключить все 5* запросов в транзакцию, то если при выполнении одного из них произойдет ошибка, то изменения, сделанные остальными, автоматически откатятся!

    *На самом деле в транзакцию имеет смысл заключать только запросы, изменяющие данные. То есть все, кроме первого.

    Соотсветственно, если ПДО настроен на выброс исключений, то при ошибке запроса
    - пдо выбросит ислючение
    - которое будет поймано обработчиком ошибок
    - который выведет код ошибки и завершит работу РНР скрипта
    - при завершении скрипта РНР закроет соединение с БД
    - БД при закрытии соединения автоматически откатит незавершенную транзакцию

    причем без обработчика ошибок будет всё то же самое, только клиенту уйдет код не 500 а 200

    то есть для того чтобы убедиться в том что все запросы выполнились корректно, надо

    1. выставить для ПДО режим исключений
    2. перед первым запросом написать $pdo->begin();
    3. после последнего запроса написать $pdo->commit();
    Ответ написан
    4 комментария
  • Как отдавать 404 ошибку если статей нет?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Здесь возможны два варианта, в зависимости от того, что ожидается в переменной $articles

    если список статей, то выкинуть mysqli_num_rows из условия и написать просто
    if (!$articles)
        http_response_code(404);
        include("../../../error/404.php");
    }


    если же в $articles ожидается результат запроса, то разбираться с запросом. включить вывод ошибок mysqli и переписать зхапрос на подготовленные выражения

    А главное - зарубить себе на носу что 404 через редирект не выводится.
    Ответ написан
    Комментировать
  • Чтобы проверить, что переменная является числом PHP?

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

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

    Судя по тому, что 20 часов назад ты не знал, как показать текст из базы данных, то для программирования месяца будет маловато.

    Попробуй свои силы на вордпрессе, там программирование не нужно.

    Научись устанавливать вордпресс на хостинге, минимально администрировать и менять темы.
    Потом найди человека - родственника или знакомого, который умеет, знает или делает что-то интересное, хобби там, или анекдоты хорошо рассказывает. И предложи ему сделать сайт. БЕСПЛАТНО.
    И вместе с ним делайте сайт.
    Так ты получишь минимальный опыт работы с вордпрессом и минимальное портфолио. С которым уже дальше сможешь предлагать свои услуги.
    Ответ написан
    2 комментария
  • Обязательно ли знать php, wordpress?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    "Придётся". Такое ощущение что ты в тюрьму собираешься.
    Свобода воли? -- Нет, не слышал.
    Ответ написан
    Комментировать
  • Возможно ли такая функция?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Всё надо учить. И ООП, и MVC, и фреймворки.
    А перед этим надо освоить чистый РНР. Плюс SQL, базы данных, программирование, протоколы, безопасность, устройство серверов
    От курсов толку не будет, надо купить нормальную книжку. И не одну.
    Ну и запастись терпением.
    Годика через два-три сможешь создать нормальный веб-сайт.

    функцию создать можно.
    Ответ написан
    1 комментарий
  • В каком этапе обучения нужно беспокоиться о безопасности?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Начинать беспокоиться о безопасности надо ДО начала обучения. То есть сильно раньше, чем когда уже "написал блог".
    Хотя бы базовые принципы надо применять с самого начала
    Для запросов в бд использовать подготовленные выражения.
    Для вывода информации в html использовать htmlspecialchars
    Если не дай бог читаются какие-то указанные пользователем файлы - то basename()
    При заливке файлов проверять расширение и переименовывать файл.
    При выполнении пользователем каких-то действий, проверять имеет ли он на это право.
    Во все формы добавлять сохранённый в сессии токен, чтобы их не могли подделать
    Ответ написан
    1 комментарий
  • Как выдавать пустую страницу в PHP?

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

    Если сервер ложится под атакой, то разумеется, виновата выдача других цыферок. Если отдавать клиенту цифры 503, то кранты, весь сервер лежит. А если выдавать 200 - то зашибись все летать будет. Л - логика.
    Ответ написан
    Комментировать
  • Какой способ лучше защитит пароль?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Первый вариант, разумеется, вообще ни о чём.

    Есть три вектора атаки на пароли: перебор по радужным таблицам, брутфорс и подбор по словарю.
    От первого защищает соль, от второго алгоритм, от третьего сложность пароля.

    У нас здесь речь идет об алгоритме. То есть, о буртфорсе. Что такое брутфорс? Это тупо подстановка случайных сочетаний символов по очереди и проверка, не совпал ли хэш. Чем быстрее вычисляется хэш, тем быстрее раскалывается пароль.
    ПОЭТОМУ, ключевой характеристикой хэша для паролей является сложность его вычисления.
    Твой ша-пицот-двенадцать выплоненный стопицот раз - это для современной техники как воробей чихнул. А для будущей и подавно.
    Поэтому умные люди придумали алгоритмы которые во-первых вычисляют каждый хэш гораздо медленнее, а во вторых адаптируются под растующую скорость процессоров, и говорят тебе когда пора уже усложнять алгоритм. Именно этим и занимаются встроенные функции, и поэтому ты должен использовать именно их.
    Ответ написан
    Комментировать
  • Можно ли передать дескриптор CURL другому скрипту (процессу)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Викимедия придумала [HTTPS connection pooling](https://techblog.wikimedia.org/2020/10/26/impact-o...) что-то вроде persistent connections для курла
    Ответ написан
  • Как оптимизировать код, сделать профессиональнее?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как у тебя только в глазах не рябит от всех этих знаков препинания
    1. Не HTML писать внутри РНР, а наоборот - РНР внктри HTML.
    2. Использовать оператор сведения с null
    3. Экранировать вывод по умолчанию
    т.е
    <tr class="tableGrey">
        <td>Фактический адрес</td>
        <td colspan="4"><?= htmlspecialchars($callCompanyData['result']['UF_CRM_1587463057321']) ?? ' ') ?></td>
    </tr>

    3. Научиться пользоваться шаблонизатором Twig, т.е.
    <tr class="tableGrey">
        <td>Фактический адрес</td>
        <td colspan="4">{{ callCompanyData.result.UF_CRM_1587463057321 ?? ' ' }}</td>
    </tr>


    Чтобы записать этот вывод в переменную надо пользоваться функциями буферизации вывода
    Ответ написан
    6 комментариев
  • Как ускорить время SELECT MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых не позорься, убери тег big data. 11 лямов - это не бигдата, а кошкины слёзки.
    Во-вторых, надо учиться задавать вопросы.
    Не вопрос вида "доктор, у меня рука болит, как сделать чтобы не болела", а подробно излагать, что за поиск, что за запрос, что за данные, что за столбец, есть ли индекс, что показывает explain.

    В текущем же виде ответ только один - помазать зеленкой добавить индекс
    если индекс есть, и поиск идет по полному совпадению, то смотреть, влезает ли индекс в память
    Если поиск идет по частичному совпадению - то выносить его в отдельный сервис, sphinx/elastic
    Ответ написан
  • Почему SELECT возвращает только данные малых таблиц?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вместо редиректа можно настроить реврайт. На отдельный скрипт.
    Который будет записывать в блокнотик запрошенный адрес и уже сам делать 301

    (вообще вопрос какой-то шизофренический, я еле понял, что имеется в виду - то ли запрос к серверу, то ли скрипт на сервере. при чем здесь "ответ сервера?")

    Хотя нет, снова не понял. Если вопрос про существующую страницу сайта то тупо инклюд на пхп.
    вообще надо как-то боле детально объяснить, как устроен сайт и что за скрипт.
    возможно, тупо подойдет Яндекс Метрика
    Ответ написан
    4 комментария
  • Почему изменения в php.ini не меняет значение в phpinfo?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что перезапускаешь ты веб-сервер а надо - РНР
    Ответ написан
    1 комментарий
  • Какие логины стоит сразу блочить при открытой регистрации?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если говорить о логинах, то
    Или логины в 2020 уже моветон?

    Именно так
    И не то чтобы моветон, а адская головная боль.
    И, главное, соверншенно непонятно, НАФИГА козе логин, если емейл по-любому является уникальным идентификатором.

    Но для начала надо научиться отличать логин от username/display name.
    Здесь, судя по всему, речь идет о втором.
    Обычно, в нормальных сервисах имена разрешаются любые, а административные аккаунты помечаются средствами интерфейса, а никак не именем.
    Ответ написан
  • Как сравнить дату в строке с timestamp?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    DateTime::createFromFormat()
    Ответ написан
    Комментировать
  • Как передать выбранные значения из select multiple в php массив/переменную?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    А, ты тот самый страдалец с ДЛЕ.
    Интересно, что такого ужасного надо натворить в прошлой жизни чтобы карма тебя так возила об стол в этой
    Ответ написан
    Комментировать