Подтвердить что ты не робот

Вставка html-кода в таблицу mysql

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

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

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

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

Я могу использовать addslashes(), но поскольку 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>';
4b9b3361

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Это лучший способ найти addslashes()

$article_code = addslashes($article_code);

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

Ответ 5

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

$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).'"
";

Ответ 6

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

Вот код -

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

Ответ 7

У меня была та же проблема, я исправил ее с помощью регулярных выражений. Вы можете использовать что-то вроде этого: $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>

Ответ 8

если вы беспокоитесь о пространстве и используете метод кодирования base 64, размещенный здесь, вы можете использовать команду gzdeflate в php, чтобы сократить ее, а затем закодировать. Ниже приведен небольшой тест script на некоторые сгенерированные образцы символов. Очевидно, что существуют различные методы сжатия, если вы заинтересованы в размере, но это означало бы, что вы могли бы поместить его в mysql, минимизируя размер на db. Затем вы можете прочитать его с помощью 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); */
?>

Ответ 9

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

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

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