2009-07-06 8 views
2

以下のコードでは、ユーザーは普通の英語でフレーズを入力することができ、その後、データベースに "$ site"として追加されます。ユーザーがアポストロフィを入力すると、フレーズはアポストロフィの前にバックスラッシュを付けて保存されます。アポストロフィの前にバックスラッシュを付けずに、変数 "$ site"をデータベースに追加するにはどうすればよいですか?PHP - アポストロフィからバックスラッシュを削除する

事前のおかげで、

ジョン

print "<div class=\"siteadd\"> 
     <form action='process.php?find=$find1' method='post'> 
     Add a book to this topic: <input name='site' type='text' size='50'> 
     <input type='submit' value='Submit'> 
     </form> 
     </div>"; 

その後、process.php上:

$site = str_replace($remove_array, "", $_POST['site']); 
$site = strtolower($site); 
$site = mysql_real_escape_string($site); 
$illegal = array("/", "\""); 
$site = str_replace($illegal, '', $site); 

mysql_query("INSERT INTO `$find` VALUES (NULL, '$site',1,0)"); 

答えて

6

セキュリティ上の理由から、バックスラッシュがPHPによって追加されたと仮定します。 magic quotesについてもっと読む。 mysqlクエリに渡された文字列をエスケープするために適切な関数を使用しているので、PHPのダミーエスケープに頼る必要はありません。スクリプトの先頭に

magic_quotesがオンになっている場合は、チェックし、もしそうであれば、スラッシュを削除します。

if (get_magic_quotes_gpc()) { 
    function stripslashes_deep($value) 
    { 
     $value = is_array($value) ? 
        array_map('stripslashes_deep', $value) : 
        stripslashes($value); 

     return $value; 
    } 

    $_POST = array_map('stripslashes_deep', $_POST); 
    $_GET = array_map('stripslashes_deep', $_GET); 
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE); 
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST); 
} 

ところで、あなたのコードでは、$find変数は、信頼できないソースから来て、エスケープする必要があります/同様にフィルタリングされた。

+0

ありがとう...これは動作します。そして私は "mysql_real_escape_string"を$ findに追加しました。 –

+0

$ findがあなたのホワイトリストにあるかどうか確認してください。誰もあなたのデータベースの*テーブルにデータを追加させたくないのですか? –

1

mysqli::prepareを使用した場合、mysqli_stmtbind_paramを使用してください。これにより、他のタイプのSQLインジェクションも防止されます。

関連する問題