2012-04-25 11 views
1

私はPHPでこの文字列を保存する場合:私は、「(明らかに削除せず」)とこれらの文字列を保存することができますどのようにこの文字列をPHPに保存するには?

John: \ 

:私のデータベースで

John: "Yes you can". 

は、として保存されます。 は、これは私のPHPコードです:

$titlepost= mysql_real_escape_string($_POST['title']); 
$query = "INSERT INTO `titles` (`title`) VALUES ('".$titlepost."')"; 
$res = mysql_query($query) or die("Failed".mysql_error()); 

echo $titlepost; 

output: 
John: \\ 

FORM:

$title = mysql_real_escape_string($_GET['title']); 

<form method="post" action="title.php?done=yes" enctype="multipart/form-data"> 
<input type="text" size="25" name="title" <?php echo "value=\"".$title."\""; ?> > 
<input id="starit" name="submit" value="titleit" type="submit" /> 
</form> 
+0

addslashes関数を使用してみてください。 http://php.net/manual/en/function.addslashes.php – yen1k

+0

@ yen1k:**確かにNOT!** 'mysql_real_escape_string'はMySQLクエリのデータをエスケープする適切な方法です。 PHPドキュメントからの引用に対する@EdwinAlexの答えに対する私のコメントを見てください。 – ThiefMaster

+1

'echo $ query;'という出力を表示できますか? – Starx

答えて

2

あなたの問題はPHPやMysQLとは関係ありません。

非常に単純なHTML構文規則と同じくらい愚かです。一部: それはコード

<input value="John: "YES you can> 

だけ引用された「ジョン」と表示されますことは極めて明白です。 はそれが正しいようにするには、1、値のスラッシュについては

$titlepost = htmlspecialchars($titlepost,ENT_QUOTES); 
?> 
<input type="text" name="title" value="<?=$titlepost?>"> 

に特殊記号をエンコードする必要があります - それは愚かな過度の引用問題です。あなたの文字列を一度だけ引用して、magic_quotes_gpcがオフになっていることを確認してください。

-1

する必要はありませんPDO

http://php.net/manual/en/pdo.prepared-statements.php

から準備された文にパラメータをプリペアドステートメントを使用してみてください引用される;ドライバは自動的にこれを処理します。アプリケーションがプリペアドステートメントを排他的に使用する場合、開発者はSQLインジェクションが発生しないことを確認できます(ただし、エスケープされていない入力でクエリの他の部分が構築されている場合は、SQLインジェクションは可能です)。

+1

良い示唆ですが、彼の質問には答えません – ThiefMaster

+0

@ThiefMaster彼は、引用符をエスケープするのに問題を起こすことなく、文字列をデータベースに保存する方法を尋ねる。準備文は良い解決策です。 – Tim

+0

はい、一般的にはそうです。しかし、その場合でも、魔法の引用符によって引き起こされるバックスラッシュを取り除く必要があります。 – ThiefMaster

0

あなたは本当にあなたが魔法(あなたがエスケープされた文字列をエスケープしているので、データベースにバックスラッシュを挿入行う原因となる)列サイズを引用符を使用しているように聞こえる、あなたのデータベースにJohn: \を取得する場合(バックスラッシュが欠落した後に何かが表示される)

はこれを試してみてください:

if(get_magic_quotes_gpc()) $_POST = array_map('stripslashes', $_POST); 
$titlepost = mysql_real_escape_string($_POST['title']); 

これは$_POSTmysql_real_escape_stringを使用した後に壊すあらゆる魔法引用符エスケープデータが含まれていないことを保証します。

関連する問題