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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если код всегда один и тот же, то никак, разумеется, его не хранить.
    Хранить только изменяемые данные, а код добавлять динамически при выводе.
    Ссылку доставать из засланного кода регуляркой
    Ответ написан
    Комментировать
  • Как сделать сообщение 'Неправильный ключ" при входе в форме. PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    никак не делать.
    всё равно этот говнокод позволит любому придурку зайти вообще не зная ключа, а тупо через инъекцию.
    ну и какой смысл тогда проверять?

    Надо сначала научиться работать с БД правильно

    <?php 
    
    session_start();
    require_once 'connect.php';
    
    $key = $_POST["key"];
    
    $stmt = $connect->prepare("SELECT * FROM `keys` WHERE `key` = ?");
    $stmt->bind_param("s", $key);
    $stmt->execute();
    $result = $stmt->get_result();
    $user = $result->fetch_assoc();
    if ($user) {
        $_SESSION['key'] = $user;
        header('Location: ../profile.php');
        exit;
    } else {
        $_SESSION['msg'] ='Неправильный ключ';
        header('Location: ../index.php');
        exit;
    }

    И потом в индексе вывести $_SESSION['msg'] как угодно и удалить
    Ответ написан
    6 комментариев
  • Можно ли взять разметку из .txt и разместить её с помощью php?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Тебе когда надо достать из холодильника 5 бутылок пива, что проще - открыть холодильник, взять 5 бутылок пива и закрыть холодильник, или открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник, открыть холодильник, взять бутылку, закрыть холодильник?
    Ответ написан
  • Не отправляются данные из формы в базу данных, что не так?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    ошибок и не будет
    потому что ПДО не настроен показывать ошибки
    чтобы настроить, вместо того говнокода который сейчас, должно быть примерно так (не забыть подставить свои значения)
    $host = '127.0.0.1';
    $db   = 'weekly_journal';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В базе данных дата должна храниться в том формате, который рекомендован базой данных для хранения даты.
    Рекомендованный формат можно посмотреть в документации.
    Нужную страницу документации легче всего найти с помощью поискового запроса "формат даты для [тут название используемой СУБД]"
    Если неизвестно название название используемой СУБД, его надо у кого-нибудь спросить.

    сконвертировать можно обычно с помощью strtotime()/date()
    Ответ написан
    Комментировать
  • Как запретить работу функции за пределами страницы с формой?

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

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

    И здесь мы переходим к следующему вопросу.
    Почему вдруг роботы со всего мира вдруг с цепи сорвались и пытаются заргистрироваться на сайте?
    А потому что почему-то вместо регистрации скрипт называется send_mail.
    А боты очень любят писать письма. И как только находят скрипт, который отправляет почту, тут же начинают его дергать, как теленок - мамкину сиську.

    Для того, чтобы они перестали, достаточно просто назвать вещи своими именами. И со страницы регистрации отправлять клиента не на скрипт, который отправляет почту, а на скрипт, который занимается регистрацией.
    Ответ написан
    Комментировать
  • Как добавить данные в БД через HTML-форму?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сначала учимся правильно соединяться.
    В случае mysqli это
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    И никаких ужасов с "Соединение не установлено" тут быть не должно.

    После этого выполняем запрос INSERT. Причем запросы мы всегда пишем так, чтобы данные в БД попадали отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции 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".

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

    Весь код, который добавляет запись в БД, должен быть расположен ДО любого вывода.
    После обработки запроса методом POST необходимо перенаправить клиента куда-нибудь методом GET и завершить работу скрипта. Делается это функцией header с заголовком location: . после которой написать exit;
    Соответственно, никаких ужасов с "Запись добавлена".

    Кстати, немного удобнее с БД работать не через mysqli, а чрез PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute

    Подключение
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);


    Выполнение запроса
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);
    Ответ написан
    1 комментарий
  • Как добавить id в titile при выводе DOM через php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    третьим буду
    echo "<option title='$row[id]'>";

    но вообще, конечно, должно быть

    <option title="<?= htmlspecialchars($row['id']) ?>">


    а не этот ужас с загогулинами
    Ответ написан
    Комментировать
  • Как можно заставить обрабатывать HTML теги в языковых файлах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Надо включить логику и использовать языковую поддержку для перевода, а не для вывода HTML, JS или canvas

    $lang['use_top_up_cards']       = 'Оплатить с препей карты';
    $lang['available_sum']       = 'Доступная сумма:';
    $lang['pre_deposit']        = 'Оплатить с депозита';
    return $lang;

    В шаблоне
    {$Think.lang.use_top_up_cards}<br><span class="fl ml30">{$Think.lang.available_sum}</span>
    {$Think.lang.pre_deposit}<br><span class="fl ml30">{$Think.lang.available_sum}</span>
    Ответ написан
    Комментировать
  • Как указать канонический адрес страницы, если сайт делается в open server и домена пока что нет?

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

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

    И все будет всегда работать на любом домене
    Ответ написан
    Комментировать
  • Где лучше прописывать PHP код?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    index.html чисто для HTML и server.php для PHP бывает только в самых примитивных учебных проектах.
    В реальном коде такого разделения не бывает, и все файлы, содержащие HTML, код обрабатываются интерпретатором РНР.

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В файле auth.php
    Ответ написан
    Комментировать
  • Как сделать правильный вывод фото/изображения?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    К базе данных (и тем более к mysqli, в которой ничего в принципе не может храниться) вопрос не имеет ни малешйего отношения.

    Разбирайся с тем, как этот джейсон ты выводишь яваскриптом на клиенте
    Ответ написан
  • Как обрабатывать данные результата формы чужого сайта?

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

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

    Но для начала надо открыть для себя, что "форма на сайте" не бывает. Форма всегда в браузере. С какого сайта форму браузер загрузил - совершенно неважно. Важно на какой сайт ведет экшен формы.
    Ответ написан
    Комментировать