私はjoomlaを使用してWebサイトを管理しています... joomlaが動的に作成するWebページのhtmlを格納するためにjoomlaが使用するテーブルにデータを挿入および変更するスタンドアロンのphpアプリケーションを開発しています...
それが機能する方法は、私はjoomlaコンポーネントを使用してコンテンツを作成し、これらの記事のhtmlコードはjoomlaによってテーブルのフィールド(content_tableなど)に格納されます。このhtmlコードは、後で取得されてWebページの一部を構築します。
スタンドアロンアプリでも同じようにしたいのですが、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;">
</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 :
</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
</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
</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
</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
</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}
</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>
High Bandwidth Users
</b>
</b>
</span>
</i>
<i>
<span style="color: rgb(102, 255, 0);">
<b>
<b>
</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>
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="235" displayheight="0" height="225"} <?php echo $hqList; ?> {/auto}
</td>
<td>
{auto width="235" displayheight="0" height="225"}<?php echo $lqList; ?>{/auto}
</td>
</tr>
</tbody>
</table>
<center>
{loadposition user50}
</center>';
まあ..それをデバッグしました...結局のところ、問題はエスケープ機能ではないことがわかりました...
クエリを確認してください。
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'";
そして出来上がり... !!!!
データベースに挿入する前に、コードを通常の文字列に変換することを好みます。最も安全なシナリオだと思います。このコードの使用を検討してください:
$article_code = base64_encode($article_code);
/* insert to database */
したがって、そのコードを使用したい場合は、base64_decodeを使用してデコードするだけです。 $ varicleではなく、article_codeを保存するには、textデータ型を使用することをお勧めします。
スラッシュは必要ありません。通常の挿入中に問題を引き起こす唯一のことは引用符であり、mysql_escape_string()
は文字セットの問題を除いてそれを処理する必要があります。 mysql_real_escape_string()
も試してください。
また、ユーザー提供の未加工のHTMLをデータベースに保存すると、セキュリティの問題が発生する可能性があることに注意してください。代わりに、bbcodeやmarkdownなどを使用することを検討してください。
これは私が見つけた最良の方法ですaddslashes()
$article_code = addslashes($article_code);
UPDATE $jos_content
SET introtext = '$intro_code',
fulltext = '$article_code'
WHERE id = '$article_id'";
念のため、クエリは次のようになります。
$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).'"
";
fulltext
はmysqlの事前定義キーワードです。 Acute( `)または単一引用符( ')を使用してください
ここにコードがあります-
UPDATE $jos_content
SET `introtext` = '$intro_code',
`fulltext` = '$article_code'
WHERE `id` = '$article_id'";
同じ問題があり、正規表現で修正しました。次のようなものを使用できます:_$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>
_
スペースが気になっていて、ここに掲載されているbase 64エンコードメソッドを使用している場合は、phpのgzdeflateコマンドを使用して削減し、エンコードすることができます。生成されたサンプルキャラクターの小さなテストスクリプトを次に示します。明らかにサイズに関心がある場合は、さまざまな圧縮方法を検討する必要がありますが、これは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); */
?>
次のようにhtml_textを保持する変数を渡してmysql_escape_string()関数を呼び出します。
mysql_escape_string($ _ POST ["text"]);
テキスト内の引用符などの特殊文字によってphpエラーが発生せず、データベースが正常に更新されることが保証されます。
データベースに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;