3

次のフォームコードを使用しています。

<form enctype="multipart/form-data" action="process.php" method="POST">
 <input type="text" name="draftTitle"/>
 <textarea name="draftText" class="draftText"></textarea>
 <input type="file" name="uploadfile"/>
 <button class="draftSubmit">Add</button>
</form>

ご覧のとおり、フォームにはテキストとファイルの両方のフィールドが含まれています。テキストエリアにアポストロフィを付けてフォームを送信すると、何も送信されません。process.php では、スラッシュを取り除き、POST データを適切にサニタイズしていますが、問題は from enctype に関連しているようです。アポストロフィが構文を台無しにするのを防ぐ方法についてのアイデアはありますか?

更新: これはフォームからの出力です:

-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="MAX_FILE_SIZE"\r\n\r\n4000000\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="userID"\r\n\r\n2\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="lineID"\r\n\r\n1\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="draftTitle"\r\n\r\nThis is my title\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="uploadfile";
filename=""\r\nContent-Type: application/octet-stream\r\n\r\n\r\n-----------------------------276443266232757\r\nContent-Disposition: form-data;
name="draftText"\r\n\r\nIt's my description with an apostrophe in it.\r\n-----------------------------276443266232757--\r\n

ご覧のとおり、いくつかの追加フィールドがあります。質問を簡単にするために、上記でそれらを削除しました。

アップデート

次のコードを使用してデータベースに挿入しています。

$query = "INSERT INTO posts (line_id, user_id, stamp_title, element, type) VALUES ('$line_id', '$user_id', '$stamp_title', '$data', '$type')";
mysql_query($query);

解決済み: mysql_real_escape_string を追加したところ、機能しました。助けてくれたすべての人に感謝します!

$data = mysql_real_escape_string($data);
4

2 に答える 2

3

フォームの送信が次の場合:

-----------------------------276443266232757
Content-Disposition: form-data; name="MAX_FILE_SIZE"

4000000
-----------------------------276443266232757
Content-Disposition: form-data; name="userID"

2
-----------------------------276443266232757
Content-Disposition: form-data; name="lineID"

1
-----------------------------276443266232757
Content-Disposition: form-data; name="draftTitle"

This is my title
-----------------------------276443266232757
Content-Disposition: form-data; name="uploadfile"; filename=""
Content-Type: application/octet-stream


-----------------------------276443266232757
Content-Disposition: form-data; name="draftText"

It's my description with an apostrophe in it.
-----------------------------276443266232757--

これはまったく問題ありません。アポストロフィがあります。

ただし、これから:

$query = "INSERT INTO posts (line_id, user_id, stamp_title, element, type) VALUES ('$line_id', '$user_id', '$stamp_title', '$data', '$type')";
mysql_query($query);

SQL挿入でアポストロフィを使用しているため、問題のようです。mysqli_real_escape_string()各入力変数でor PDO::quote()(その拡張子がある場合) を呼び出す必要があります。

于 2012-09-16T05:15:15.180 に答える
1

私の観察では、これは PHP の問題ではなく、値をデータベースまたはファイルに入れるために使用している残りのコードの問題です。そのコードも投稿してください。

MySql データベースに値を挿入していると仮定しています。それを助けるために、Mysql_real_escape_string関数を試して、挿入する前に mysql 用に準備することができます。

于 2012-09-16T04:53:48.620 に答える