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

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

    функцию создать можно.
    Ответ написан
    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 возвращает только данные малых таблиц?

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

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

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

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

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

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для селектов тоже не нужно.
    В любом мало-мальски осмысленном коде все очистится само, как природа во время локдауна.
    Ответ написан
    Комментировать
  • Как записать в базу ссылку?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Любая ошибка синтаксиса, вызванная передаваемыми в запрос данными говорит о том, что запрос в принципе пишется неверно. А по-старинке, путем запихивания всех переменных прямо в строку запроса.

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

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

    $sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
    $stmt = $mysqli->prepare($sql); // подготовим запрос к выполнению.
    $stmt->bind_param("ss", $text, $author); // привяжем к нему переменные
    $stmt->execute(); // и выполним его

    три простых шага, а код становится гораздо чище, безопаснее и короче.
    причем это в mysqli три, а в PDO вообще два:
    $sql = "INSERT INTO t (text, author_id) VALUES(?,?)"; // заменим переменные на специальные маркеры
    $stmt = $pdo->prepare($sql); // подготовим запрос к выполнению.
    $stmt->execute([$text, $author]); // сразу и привяжем и выполним
    Ответ написан
    1 комментарий
  • Как вставить переменные строкой в bind_param?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    массивом
    $sql->bind_param($char, ...[$adin, $dwa, $tree]);

    Хороший вопрос, который, к сожалению, редко задают
    Ответ написан
    Комментировать
  • Дублирование данных при insert, где ошибка?

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

    Но поскольку вопрос изначально про класс, качестве шефской помощи перепишем его на более осмысленный, учитывая что

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

    class DatabaseMysql
    {
        public $pdo;
    
        public function __construct()
        {
            $options = [
                \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
                \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
                \PDO::ATTR_EMULATE_PREPARES   => false,
            ];
            $dbc = require(__DIR__.'/core/config/DbConfig.php');
            $this->pdo = new \PDO(
                "mysql:host={$dbc['db_host']};dbname={$dbc['db_name']};charset=utf8mb4",
                $dbc['db_user'],
                $dbc['db_pass'],
                $options,
            );
        }
        public function query(string $query, array $params = [])
        {
            $sth = $this->pdo->prepare($query);
            $sth->execute($params);
            return $sth;
        }
    
        public function insert(string $query, array $params)
        {
            $this->query($query, $params);
            return $this->pdo->lastInsertId();
        }
    }


    Хотя если честно, то я большого смысла в этом классе не вижу.
    Меня бы устроило простое расширение класса PDO типа такого
    class MyPDO extends PDO
    {
        public function run($sql, $bind = NULL)
        {
            $stmt = $this->prepare($sql);
            $stmt->execute($bind);
            return $stmt;
        }
    }

    Да, вставка будет выполняться за две строчки, а не одну,
    $pdo->insert('INSERT INTO test_table (`name`, `age`) VALUES (?,?)', ['Ivan',43]);
    $id = $pdo->lastInsertId();
    но я не уверен что стоит городить целый класс из-за одной строчки.
    Ответ написан
    1 комментарий
  • Как добавить NULL из PHP в БД MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Всегд выполняй запросы только через подготовленные выражения. Это решает сразу КУЧУ проблем, включая твои страдания с null.

    По поводу же автоматизации, варианты есть, но сдается мне что в твоем случае вот эту ливерную колбасу из name1 - name30 надо порезать на кусочки и записать по-человечески в отдельные колонки. И тогда проблем автоматизировать запросы не будет.
    Ответ написан
  • Стоит ли использовать ссылки в PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не стоит.
    Вместо этого надо запомнить одно очень важное правило:

    Любую проблему следует решать только при её наличии.

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

    Если памяти скрипту хватает, то не надо вообще ничего оптимизировать.
    Если не хватает, то надо разобраться - почему, и устранить конкретную проблему.

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

    Не говоря уже о том, что ретиво бросившись решать какую-нибудь проблему, можно обнаружить, что она давно уже решена без твоей помощи. На досуге можешь почитать про copy-on-write
    Ответ написан
    Комментировать
  • Почему PHP не принимает символы / ' ` и смайлики в строке input и textarea для записи в БД MySQL?

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

    // правильно соединяемся
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $mysqli = new mysqli($host, $user, $pass, $db, $port);
    $mysqli->set_charset("utf8mb4");
    // правильно вставляем
    $sql = "INSERT INTO users (name, email, password) VALUES (?,?,?)";
    $stmt= $conn->prepare($sql);
    $stmt->bind_param("sss", $name, $email, $password);
    $stmt->execute();
    Ответ написан
    Комментировать
  • Как взять строчку из файла sql (PHP)?

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

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

    Смешнее всего видеть такие вопросы на сайтах типа тостера. Вот клиент сам же накатал ответ в котором "опасных" символов overдофига. Во что превратится этот красивый ответ если из него повырезать все ужжжжасно опасные символы?
    Ответ написан
    4 комментария