1

フォームから、ユーザーにテキストの入力を求めています。を使用してこのテキストを取得します$_POST['text']

ユーザーは「It'smytext!」という文字列を入力します。

$newText = mysql_real_escape_string($_POST['text']);

データベースに挿入した後の同じページで$newText、テキストをユーザーに表示し、PHPを使用して入力テキストボックスの値としても使用したいと思います。

// I want to make sure the user hasn't added any unsafe html in their string
$newText = htmlentities($newText);
echo "You've entered: " . $newText . "<br />";
echo "<form action=someaction.php method=post>";
echo "<input type=text value=\"" . $newText . "\">";
echo "</form>";

出力は次のとおりです。

You've entered: It\'s my text!
[It\'s my text!]

これらのスラッシュを回避するにはどうすればよいですか。また、データに対して他のことを行う必要がありますか?

4

4 に答える 4

3

mysql_real_escape_string()名前が示すように、アポストロフィを含む文字列をエスケープするテキストを渡します。データベースに保存するためのデータを準備するためだけmysql_real_escape_string()のものです。ユーザーにデータを表示するときに使用しないでください。

したがって、解決策は簡単です。行を削除してhtmlentities()のみ使用します。文字列をデータベースに保存するときに使用mysql_real_escape_string()します(その場合のみ)。

于 2012-04-28T15:08:52.253 に答える
-1

mysql_real_escape_string()文字列内の一部の文字をエスケープするためにスラッシュが追加されるため、クエリで使用する変数でのみ使用してください。これはmysqlには最適ですが、ページで使用したい場合は奇妙に見えます。

2つの変数を作成できます。1つはMySQL用で、もう1つは生のテキストを表示するためのものです。

$text = $_POST['text'];
$db_text = mysql_real_escape($text);

strip_slashes()また、スラッシュを削除するには、後でデータベースから取得したデータを使用する必要があることに注意してください。

これが少し明確になることを願っています。

于 2012-04-28T15:12:27.603 に答える
-1

$ newTextをデータベースに挿入した後、まったく同じページで、テキストをユーザーに表示したいと思います。

それはあなたが間違っていることです。
HTTP標準では、POSTリクエストが成功するたびにGETメソッドのリダイレクトが必要です。
したがって、同じページでユーザーをリダイレクトする必要があります。このページでは、データベースから挿入されたデータを読み取り、それをユーザーに表示できます。

あなたが犯した間違いについては、データベース操作の近くにエスケープを移動して、目的のためだけに使用されるようにします(ただし、忘れるリスクはなく、必須として使用されます)。
理想的には、クエリ内のデータを表すためにいくつかの変数を使用し、それらを処理するためにいくつかのハンドラーを使用する必要があります。
したがって、クエリ呼び出しは次のようになります。

DB::run("UPDATE table SET text=s:text",$_POST['text']);

ここs:textで、値で置き換えられるそのような変数(プレースホルダーと呼ばれる)は$_POST['text']、プレースホルダー名に設定されたタイプに従って適切に準備されます(s「文字列」を意味し、データをエスケープして引用するように関数に指示します)
。準備は内部で行われ、ソース変数を損なうことはありません。

于 2012-04-29T06:08:49.753 に答える
-2

mysql_real_escape_string()を使用して通常どおりに保存します

そしてそれをフォームに表示したいとき:

htmlspecialchars(stripslashes($row['text_data']))

それはトリックを行います。

于 2012-04-28T15:07:45.780 に答える