Вставка HTML-кода в таблицу MySQL - PullRequest
13 голосов
/ 03 марта 2010

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

Как это работает, я использую компонент joomla для создания контента, и html-код этих статей хранится в поле таблицы, скажем, content_table, joomla. Этот html-код впоследствии извлекается для создания части веб-страница.

Я хочу сделать то же самое с моим автономным приложением ... то есть добавить html-код в поле content_table, которое позже может быть получено joomla для создания части страницы.

Проблема в том, что HTML-код, естественно, имеет много одинарных и двойных кавычек, и это создает проблемы при вставке в базу данных. Я пробовал mysql_escape_string () и все еще получаю синтаксические ошибки.

Я могу использовать addlashes (), но поскольку joomla сама получает код позже, невозможно использовать stripslashes () при его получении позже ....

В любом случае, я могу добавить html-код в поле таблицы ...

Спасибо за ваши предложения ... !!

Редактировать: После добавления mysql_escape_string () я получаю

Error adding details. Reason : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fulltext = '\n

Это мой запрос:

UPDATE $jos_content
SET    introtext = '$intro_code',
       fulltext  = '$article_code'
WHERE  id = '$article_id'";

Строка ввода выглядит следующим образом:

 $article_code = '<hr id="system-readmore" />
<center>{loadposition user50}</center>
<p style="text-align: center;">
<span style="color: rgb(0, 255, 255);">
<i>
<b>
<span style="font-size: x-large;">
<span style="font-family: Arial;">
&nbsp;
</span>
</span>
</b>
</i>
</span>
<span style="color: rgb(0, 255, 255);">
<i>
<b>
<span style="font-size: x-large;">
<span style="font-family: Arial;">
<?php echo $title; ?>
</span>
</span>
</b>
</i>
</span>
<span style="color: rgb(0, 255, 255);">
<i>
<b>
<span style="font-size: x-large;">
<span style="font-family: Arial;">
<br />
</span>
</span>
</b>
</i>
</span>
</p>
<p style="text-align: center;">
<img height="269" width="515" border="3" 
title="<?php echo $title; ?>" 
alt=" <?php echo $title; ?>"
src="<?php echo $article_image;?>"
</p> 
<p>
<span style="font-size: small;">
<span style="font-family: Arial;">
<span style="color: rgb(153, 204, 255);">
<p style="margin-top: 2px; margin-bottom: 2px; margin-left: 120px; text-align: left;">
<i> 
<span style="color: rgb(0, 255, 0);"> 
<strong>
Cast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :
</strong>
<b>
</b>
</span>
</i>
<span style="color: rgb(0, 255, 255);">
<b>
<?php echo $cast; ?>
</b>
</span>
<i>
<span style="color: rgb(0, 255, 255);">
<b>
<br />
</b>
</span>
</i>
<span style="font-family: Arial;">
<span style="font-size: small;">
<span style="color: rgb(153, 204, 255);">
</span>
</span>
<span style="color: rgb(0, 255, 0);">
<i>
<strong>
Direction&nbsp;&nbsp;&nbsp;
</strong>
</i>
<strong>
:
</strong>
<b>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<span class="href"
id="ctl00_ContentPlaceHolderMainContent_FormView1_Director">
<?php echo $director; ?>
</span>
</b>
</span>
</span>
<span style="font-family: Arial;">
<br />
<span style="color: rgb(0, 255, 0);">
<i>
<strong>
Production
</strong>
</i>
<strong>
:
</strong>
<b>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<?php echo $direction; ?>
</b>
</span>
<span style="color: rgb(255, 102, 0);">
<i>
<b>
<br />
</b>
</i>
</span>
<span style="font-family: Arial;">
<span style="color: rgb(0, 255, 0);">
<span style="font-family: Arial;">
<span style="font-size: small;">
<i>
<strong>
Music&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</strong>
</i>
<strong>
:
</strong>
</span>
</span>
</span>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<i>
</i>
<?php echo $music; ?>
<i>
<br />
<span style="color: rgb(0, 255, 0);">
Lyrics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</i>
<span style="color: rgb(0, 255, 0);">
:
</span>
<i>
</i>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<?php echo $lyrics; ?>
</b>
</span>
<span style="color: rgb(0, 255, 255);">
<b>
<i>
<br />
</i>
<span style="color: rgb(0, 255, 0);">
<i>
Year&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</i>
:
</span>
<?php echo $year; ?>
</b>
</span>
</span>
<i>
<span style="color: rgb(0, 255, 255);">
<b>
</b>
</span>
</i>
</p>
</span>
</span>
</span>
</p>
<p>
<left>
{loadposition user14}
&nbsp;
</left>
</p>
<div style="text-align: center;">
<p>
<i>
<span style="font-family: Arial;">
<b>
<span style="font-size: medium;">
<span style="color: rgb(51, 255, 255);">
Click
<img src="images/stories/Play button1.png"
alt="alt" />
in the Playlist to Download Songs
</span>
</span>
</b>
</span>
</i>
</p>
</div>
<table border="0" align="center">
<tbody>
<tr>
<td>
<h4 style="text-align: center;">
<i>
<span style="color: rgb(102, 255, 0);">
<b>
<b>
&nbsp;High Bandwidth Users
</b>
</b>
</span>
</i>
<i>
<span style="color: rgb(102, 255, 0);">
<b>
<b>
&nbsp;
</b>
</b>
</span>
</i>
<span style="color: rgb(102, 255, 0);">
<b>
</b>
</span>
</h4>
</td>
<td>
<h4 style="text-align: center;">
<i>
<span style="color: rgb(102, 255, 0);">
<b>
<b>
&nbsp;Low Bandwidth Users
</b>
</b>
</span>
</i>
<span style="color: rgb(102, 255, 0);">
<b>
<br />
</b>
</span>
</h4>
</td>
</tr>
<tr>
<td>
{auto width=&quot;235&quot; displayheight=&quot;0&quot; height=&quot;225&quot;} <?php echo $hqList; ?> {/auto}
</td>
<td>
{auto width=&quot;235&quot; displayheight=&quot;0&quot; height=&quot;225&quot;}<?php echo $lqList; ?>{/auto}
</td>
</tr>
</tbody>
</table>
<center>
{loadposition user50}
</center>';

Ответы [ 10 ]

27 голосов
/ 29 июля 2010

Я предпочитаю преобразовывать код в обычную строку перед вставкой в ​​базу данных. Я думаю, это самый безопасный сценарий. Попробуйте использовать этот код:

$article_code = base64_encode($article_code);
/* insert to database */

Итак, когда вы захотите использовать этот код обратно, просто декодируйте, используя base64_decode. Я предлагаю вам использовать текстовый тип данных для сохранения $ article_code, а не 'varchar'.

7 голосов
/ 03 марта 2010

Тебе не нужны косые черты. Единственное, что может вызвать проблемы при обычных вставках, это кавычки, и mysql_escape_string() должен обрабатывать это, кроме проблем с кодировкой. Попробуйте mysql_real_escape_string().

Также обратите внимание, что хранение необработанного предоставленного пользователем HTML-кода в базе данных может привести к проблемам с безопасностью. Попробуйте вместо этого использовать что-то вроде bbcode или markdown.

4 голосов
/ 19 августа 2016

Это лучший способ, который я нашел addslashes()

$article_code = addslashes($article_code);

UPDATE $jos_content
SET    introtext = '$intro_code',
       fulltext  = '$article_code'
WHERE  id = '$article_id'";
2 голосов
/ 03 марта 2010

Ну .. Отладил это .. Оказывается, проблема была, в конце концов, не с функцией выхода ...

Проверить запрос:

UPDATE $jos_content
SET    introtext = '$intro_code',
       fulltext  = '$article_code'
WHERE  id = '$article_id'";

Вы можете увидеть поле 'fulltext' ... Очевидно, слово "fulltext" является ключевым словом mysql ... Если быть точным, это тип поля, такой как TEXT, INT, MEDIUMTEXT и т. Д. ...

Я изменил запрос на

"UPDATE $jos_content
SET    $jos_content.introtext = '$intro_code',
       $jos_content.fulltext  = '$article_code'
WHERE  $jos_content.id = '$article_id'";

И вуаля ... !!!!

1 голос
/ 01 января 2014

У меня была такая же проблема, я исправил ее с помощью регулярных выражений. Вы можете использовать что-то вроде этого: $target = '{~p class={{q}}important-text{{q}}~}Some text here {~/p~}';

и затем используйте функцию preg_replace():

class handle  
{ 
  public static function makehtml($target)   
  {
    $output = preg_replace("#{~#", "<", $target);
    $output = preg_replace("#~}#", ">", $target);
    $output = preg_replace("#{{q}}#", '"', $target);  
    return $output;
 }  
}  
echo handle::makehtml($target);
// output : <p class="important-text">Some text here</p>
1 голос
/ 17 октября 2013

fulltext - предопределенное ключевое слово mysql. Пожалуйста, используйте острый (`) или одинарные кавычки (')

Вот код -

UPDATE $jos_content
SET    `introtext` = '$intro_code',
       `fulltext`  = '$article_code'
WHERE  `id` = '$article_id'";
1 голос
/ 03 марта 2010

Просто чтобы подтвердить, ваш запрос выглядит так:

$query = '
    UPDATE "'.mysql_real_escape_string ($jos_content).'"
    SET    introtext = "'.mysql_real_escape_string ($intro_code).'",
           fulltext  = "'.mysql_real_escape_string ($article_code).'"
    WHERE  id = "'.mysql_real_escape_string ($article_id).'"
";
0 голосов
/ 24 декабря 2018

вставить HTML-код в базу данных

$title = $_POST['title'];
$code = '<h1>hello</h1></p>this html tage</p>';
$htmlcode = addslashes($code);

 $query = "INSERT INTO `template` (`title`,`code`) VALUES ('".$title."','".$htmlcode."');"; 
mysqli_query($con,$query);

после вставки данных в базу данных показать данные на странице списка

$result = mysqli_query($con,'SELECT * FROM template');                                  
while($row = mysqli_fetch_assoc($result)) {

 echo htmlentities($row['code']);

}
htmlentities($row['code']); //here your row name;
0 голосов
/ 15 апреля 2016

Вызов функции mysql_escape_string () с передачей переменной, содержащей текст html, например:

mysql_escape_string ($ _ POST [ "текст"]);

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

0 голосов
/ 22 октября 2014

если вы беспокоитесь о пробелах и используете метод кодирования base 64, опубликованный здесь, вы можете использовать команду gzdeflate в php, чтобы сократить его и затем кодировать Вот небольшой тестовый скрипт для некоторых сгенерированных примеров символов. Очевидно, что существуют разные методы сжатия, если вы беспокоитесь о размере, но это может означать, что вы можете поместить его в mysql, минимизируя размер в БД. Затем вы можете прочитать его обратно с помощью gzinflate (base64_decode (...));

<?php
//generate sample chars for the example
function generateRandomString($length = 10000) {
    $characters = '01234"56/789abcdefghij:klmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}
//

$string =generateRandomString();
echo 'string size:'.strlen($string);
$b64html = base64_encode($string);
echo '<br/>'.'Original base64 size:'.strlen($b64html);
$compressed = gzdeflate($string,  9);
echo '<br/>'.'compressed size:'.strlen($compressed);
echo '<br/>'.'base64 compressed size:'.strlen(base64_encode($compressed));
 /* insert into db the base64_encode($compressed); */
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...