0

フィールド X:headline、content、time を持つテーブルがあります。

htmlform を使用して、このテーブルにデータをアップロードします。html は次のとおりです。

<form action="process2.php" method="post" enctype="multipart/form-data">
Headline: <input name="headline" type="text" size="100" /><br /><br />
Content:<textarea name="content" cols="100" rows="10" placeholder="Content here">
</textarea><br /><br />
</form>

process2 php スクリプトの一部:

$headl = mysql_real_escape_string($_POST['headline']);
$headline=htmlspecialchars("$headl", ENT_QUOTES);

$cont=$_POST['content'];
$cont = str_replace("&lt;", "<", $cont);
$cont = str_replace("&gt;", ">", $cont);
$content=htmlentities($cont,ENT_QUOTES);

$sql="INSERT INTO X(`headline`, `content`, `date`) VALUES ('$headline','$content',NOW())";

$query = mysql_query($sql)or die(mysql_error());

問題: 見出しと日付が挿入されています。一方、コンテンツは空のままです...

コンテンツでも mysql_real_escape_string を試しましたが、使用しませんでした。コンテンツが空なのはなぜですか?...解決策はありますか?

4

1 に答える 1

0

これを試してください、あなたの状況でうまくいくはずです:

// htmlspecialchars Must with ENT_QUOTES, it actually make mysql_real_escape_string useless, but mysql_real_escape_string for safe anyway.

$headline = mysql_real_escape_string(htmlspecialchars($_POST['headline'], ENT_QUOTES));
$content = mysql_real_escape_string(htmlspecialchars($_POST['content'], ENT_QUOTES));

$sql = "INSERT INTO X(`headline`, `content`, `date`) VALUES ('{$headline}', '{$content}', NOW())";

$query = mysql_query($sql) or die(mysql_error());

表示するには、mysql からデータをロードし、それぞれに対して htmlspecialchars_decode を実行します。

そして、より簡単な方法は、次のように、保存するときに htmlspecialchars を実行しないことです。

$headline = mysql_real_escape_string($_POST['headline']);
$content = mysql_real_escape_string($_POST['content']);

mysql_real_escape_string の後、既知のすべての注入トリックがフィルタリングされるため、データは mysql にとって安全である必要があります。html コンテンツ自体を気にする必要があるだけです。ああ、両方のコンテンツの長さがフィールドの文字数制限を超えてはなりません。

于 2013-04-28T10:48:22.787 に答える