@derasoft

Как мне записать в базу данных тег из bb-code?

У меня есть база данных, содержащая в себе статьи. Ячейка хранящая текст статьи иметт тип longtext.
Так же я реализовал создание списка в стиле bb-code. Каждый раз, когда статья загружается из базы данных, перед отображением она обрабатывается следующим образом:
$content = str_replace('[ul]', '<div><ul>', $content);
$content = str_replace('[/ul]', '</li></ul></div>', $content);
$content = str_replace('[*]', '</li><li>', $content);

Попытка записать в базу данных через форму следующий текст ни к чему не приводит - существующие тексты не редактируются, новые статьи отказываются создаваться:
[ul][*]пробую
[*]это
[*]записать
[/ul]

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

Код формы отправки текста:
<form action="sys/correct.php" method="post">
        <fieldset>
          <input type='hidden' name='author' class='form-control' value=<?echo "'".$_POST['author']."'";?>>
          <input type="hidden" name="ida" class="form-control" value=<? echo "'".$id."'"; ?>>
          <div>
          <input type="text" name="name" class="form-control" value=<? echo "'".$article["name"]."'"; ?>>
          <select>
            <?
              $cat = mysqli_query($mysql, "SELECT * FROM categories");
              $el = mysqli_fetch_assoc($cat);
              do
              {
                echo "<option ";
                if ($article["category"] == $el["id"]) echo "selected";
                echo ">".$el["name"]."</option>";
                $el = mysqli_fetch_assoc($cat);

              }
              while ($el!=NULL);
            ?>
          </select>
          </div>
        </fieldset>
        <fieldset>
          <div class="row">
            <label for="imgload">Загрузка картинки</label>
            <button type="submit" class="form-control f_marg"><img src="sysimg/check.png"></button>
            <textarea name="content" rows="20" class="form-control f_marg"><? echo $article["content"]; ?></textarea>
            <p><a href="bb_help.html" target="_blank">Справка по синтаксису BB-code</a></p>
          </div>
        </fieldset>
      </form>

Код правки базы данных:
<?
	$link = mysqli_connect('localhost', 'root', '', 'thimpor_data');

	$author = $_POST["author"];
	$id = $_POST["ida"];
	$name = $_POST["name"];
	$cont = $_POST["content"];

	$name = htmlspecialchars($name);
	$cont = htmlspecialchars($cont);

	if (empty($_POST['name'])) {echo "<script> alert( 'Не оставляйте название статьи пустым' ); </script>";}
	else
		{
		if ($id=='createnew')
		{
			$result = $link->query("INSERT INTO pages (name, author, content) VALUES ('$name','$author','$cont')");
			$result = $link->query("SELECT * FROM pages WHERE name = '$name'");
			$art = $result->fetch_assoc();
			$link = 'Location: ../article.php?id='.$art["id"];
		}
		else
		{
			$result = $link->query("UPDATE pages SET name = '$name', content = '$cont' WHERE id = '$id'");
			$link = 'Location: ../article.php?id='.$id;
		}
		header($link);
		var_dump($cont);
	}
?>
<script type="text/javascript">history.back()</script>

  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Ломает ваши ббкоды фильтрация, пишите в базу через подготовленные выражения текст, на выходе уже фильтруйте, htmlspecialhars меняет сущности
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы