Вы сказали:
Приходит текст html сохранить его в sqlite и дальше вызвать Пример на PHP без PDO
Вот простой пример на PHP без PDO, как:
Получить HTML-текст (например, из POST);
Сохранить его в базу данных SQLite;
Затем извлечь и отобразить этот HTML.
example.phpphp<?php
// Путь к SQLite базе
$dbFile = 'html_storage.db';
// Подключение к базе данных SQLite
$db = new SQLite3($dbFile);
// Создание таблицы, если не существует
$db->exec("CREATE TABLE IF NOT EXISTS html_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT
)");
// Проверка, был ли отправлен HTML-текст через POST
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['html'])) {
$html = $_POST['html'];
// Экранирование HTML перед вставкой (если необходимо)
$escapedHtml = SQLite3::escapeString($html);
// Сохранение HTML в базу данных
$db->exec("INSERT INTO html_data (content) VALUES ('$escapedHtml')");
echo "<p>HTML успешно сохранён!</p>";
}
// Извлечение последнего HTML из базы
$result = $db->query("SELECT content FROM html_data ORDER BY id DESC LIMIT 1");
if ($row = $result->fetchArray(SQLITE3_ASSOC)) {
echo "<h3>Сохранённый HTML:</h3>";
echo "<div style='border:1px solid #ccc; padding:10px; margin-top:10px'>";
echo $row['content']; // Показываем HTML как есть
echo "</div>";
}
?>
<!-- Форма для отправки HTML -->
<form method="POST">
<textarea name="html" rows="10" cols="60" placeholder="Вставьте HTML здесь..."></textarea><br>
<button type="submit">Сохранить HTML</button>
</form>
Без PDO: используется SQLite3 — это встроенный класс PHP.
HTML сохраняется как TEXT.
Если хочешь выводить HTML как код, а не рендер, оберни в htmlspecialchars():
phpecho htmlspecialchars($row['content']);
Хочешь пример с несколькими HTML-записями, или с кнопкой "Удалить"?
Отличный вопрос!
SQLite3::escapeString($html) — это метод экранирования строки, который подготавливает пользовательский ввод (например, HTML-код) для безопасной вставки в SQL-запрос.
escapeString()?SQL-запросы работают со строками, обрамлёнными кавычками:
sqlINSERT INTO table (column) VALUES ('вот_эта_строка');
Если строка пользователя содержит кавычки ' или другие спецсимволы, это может:
вызвать ошибку SQL-синтаксиса;
привести к SQL-инъекциям (опасная уязвимость безопасности).
php$html = "<div onclick='alert(\"x\")'>Test</div>";
$db->exec("INSERT INTO html_data (content) VALUES ('$html')");
Результат:
sqlINSERT INTO html_data (content) VALUES ('<div onclick='alert("x")'>Test</div>')
⚠ Ошибка: кавычки внутри строки ломают запрос.
escapeString():php$html = "<div onclick='alert(\"x\")'>Test</div>";
$safeHtml = SQLite3::escapeString($html);
$db->exec("INSERT INTO html_data (content) VALUES ('$safeHtml')");
В SQLite запрос станет:
sqlINSERT INTO html_data (content) VALUES ('<div onclick=''alert("x")''>Test</div>')
Кавычки ' заменены на '' (двойные одинарные кавычки), как требует SQL-синтаксис — запрос безопасен и работает корректно.
htmlspecialchars()?Потому что htmlspecialchars() защищает от XSS (в браузере), а escapeString() — от SQL-инъекций. Это разные уровни защиты.
В идеале:
используешь escapeString() перед записью в БД;
используешь htmlspecialchars() перед показом пользователю (если не хочешь рендерить HTML).
Если хочешь — могу показать, как безопаснее делать это через подготовленные выражения (prepare), даже без PDO.
Отлично, давай разберёмся подробно и покажу пример с prepare(), а также объясню — безопасно ли SQLite3::escapeString().
SQLite3::escapeString()?SQLite3::escapeString() достаточно безопасен, если:
Ты используешь SQLite;
Ты не соединяешь сложные куски SQL (например, несколько полей, условия);
Ты не вставляешь динамический SQL (типа имён таблиц или колонок).
Однако лучше и безопаснее использовать prepare() с параметрами, потому что:
это автоматически защищает от SQL-инъекций;
не нужно думать об экранировании;
это правильный подход, особенно если ввод идёт от пользователя.
prepare() (без PDO)php<?php
$db = new SQLite3('html_storage.db');
// Создание таблицы, если нет
$db->exec("CREATE TABLE IF NOT EXISTS html_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT
)");
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['html'])) {
$html = $_POST['html'];
// Подготовка запроса
$stmt = $db->prepare("INSERT INTO html_data (content) VALUES (:html)");
// Привязка значения
$stmt->bindValue(':html', $html, SQLITE3_TEXT);
// Выполнение
$stmt->execute();
echo "<p>HTML успешно сохранён (prepare)!</p>";
}
// Показ последнего сохранённого
$result = $db->query("SELECT content FROM html_data ORDER BY id DESC LIMIT 1");
if ($row = $result->fetchArray(SQLITE3_ASSOC)) {
echo "<h3>Последний HTML:</h3>";
echo "<div style='border:1px solid #ccc; padding:10px; margin-top:10px'>";
echo $row['content']; // выводим как HTML
echo "</div>";
}
?>
<form method="POST">
<textarea name="html" rows="10" cols="60" placeholder="Вставьте HTML здесь..."></textarea><br>
<button type="submit">Сохранить HTML</button>
</form>
| Подход | Безопасность | Простой | Рекомендуемый |
|---|---|---|---|
escapeString() | 🟡 Средняя | ✅ Да | ❌ Только для простого случая |
prepare() + bindValue() | ✅ Надёжная | 🔄 Чуть сложнее | ✅ Да (всегда лучше) |
Хочешь — добавим список всех сохранённых HTML или кнопку "удалить запись"?