2017-08-03 1 views
0

私のサイトには、コメントフィールドのあるフォームがあります。誰かが、例えば、入力した場合:私はことを引くときに表示する前にmysql文字列を適切に "クリーン"にするには?

\"what\" is \'up\'?> 

:コメント欄に

"What" is 'up'?> 

、それはPDO文を準備し、その後、このように正確にデータベースに表示されます使用してMySQLに挿入しますバックデータベースからのデータは、私が使用:

0:

$comment=htmlspecialchars($row['comment']); 

しかしとき「エコー$コメント」を使用してページに、私は出力、それは次のようにページに出力します

\"what\" is \'up\'?> 

これらのスラッシュをhtmlspecialcharsで削除しないでください。

FWIWは、PDOに変換する前に、挿入前にmysqli_real_escape_string()を使用してから、htmlspecialchars()を表示する前に使用しました。

挿入コード:

$comment=$_POST['comment']; 

$stmt = $pdo->prepare("INSERT into details (firstname, lastname, comment) values (:firstname, :lastname, :comment)"); 

$stmt->execute([':firstname' => $firstname, ':lastname' => $lastname, ':comment' => $comment]); 
+2

魔法の引用符はありますか? (あなたはしないでください)。 dbにコメントを格納しているコードを追加してください。どんな形でもエスケープされていないことを確認してください。 – JimL

+1

準備文を使用していますか?あなたがいる場合は、入力**の文字列をすべて削除する必要はありません**。 – GrumpyCrouton

+1

私は 'htmlspecialchars()'は[あなたが出力しているときのみ使うべきだと思う](https://stackoverflow.com/a/4882317/1022914)。 – Mikey

答えて

0

あなたのデータベースには、適切なデータが含まれている必要があります。

"what" is 'up'?> 

それはのようなゴミが含まれている場合:

\"what\" is \'up\'?> 

その後、多くの物事が壊れる、フルのようにテキスト検索、並べ替え、基本的にテキストを操作するもの。 LENGTH()やSUBSTRING()も使用できません!これはできるだけ早く修正する必要があります。

値を挿入/更新するコードの部分に何か問題があります。

  • magic_quotesのは(破損データへの優れた方法)のコードで
  • 漂遊にaddslashes()活性化することができる
  • ダブルエスケープmysql_real_escape_stringの()または同様の
  • 逃げる+調製STMTと

いい狩猟です。これは修正するのが面倒です。

また、あなたがいる間は、エンコードを確認してください。誰かが "é"を入力すると、おそらく "é"が挿入されます。 (これはまた、SQL UPPER()、LOWER()、SQLソート、LIKE検索、基本的には何も動作しません)。

私のアドレスには、 'とéの両方が含まれています。時々私はオンライン注文を受け取ります...はい、実際に印刷された\\ 'と "é"の封筒を受け取りました。これはwebshopがPHPを使用していることをあなたが知っている方法です!データベースが適切なデータが含まれていたら

今、何が彼らのフォーラムの投稿でこれを入力するからユーザーを停止しません:あなたははhtmlspecialcharsを使用する理由

<script type="text/javascript"> StealAllYourCookies(); </script> 

だからこれは()あなたのHTMLにものを出力するとき。

関連する問題