1

この文字列を PHP に保存すると、次のようになります。

John: "Yes you can".

私のデータベースでは次のように保存されます:

John: \

これらの文字列を「(明らかに」を削除せずに)保存するにはどうすればよいですか。これは私の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: \\

形:

$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>
4

3 に答える 3

2

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

これは非常に単純な HTML 構文規則と同じくらいばかげています。コードが

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

引用された "John: " 部分のみが表示されます。正しくするには、値に特殊な記号をエンコードする必要があります

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

スラッシュについては、ばかげた過度の引用の問題です。文字列を一度だけ引用して、magic_quotes_gpcオフになっていることを確認してください

于 2012-04-25T08:12:11.547 に答える
0

本当にデータベースに入っただけの場合は、魔法の引用符John: \を使用しているように聞こえ(エスケープされた文字列をエスケープしているため、データベースにバックスラッシュを挿入する原因になります) 列のサイズが小さすぎます (バックスラッシュの後に何かがあるのはそのためです)。不足している)。

これを試して:

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

これにより、$_POSTを使用した後に破損する可能性のあるマジック クォートでエスケープされたデータが に含まれないことが保証されますmysql_real_escape_string

于 2012-04-25T07:24:41.360 に答える
-1

PDO から準備済みステートメントを使用してみてください

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

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

于 2012-04-25T07:24:23.287 に答える