JQuery.ajax を使用して送信する必要がある単純な HTML フォームがあります。
<form id="myForm" name="myForm" action="mySite/data.php" method="post">
<label for="name">Name: </label>
<input type="text" id="name" name="name" size="30"/>
<label for="text">Text:</label> <br/>
<textarea class="required textarea" cols="60" id="request" name="request" </textarea>
<br/>
<input type="submit" id="submit" name="submit" value="Submit"/>
<input type="reset" value="Clear"/>
</form>
そして、JQuery.ajax:
<script type="text/javascript">
var frm = $('#myForm');
frm.submit(function () {
if(frm.valid() == true){
$.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
data: frm.serialize(),
success: function (data) {
alert("Your Request Has Been Received. Thank You.");
}
});
} else {
alert("Please Enter a Valid Request");
}
return false;
});
</script>
フォーム データは mySQL データベースに保存され、さらに JQuery.ajax を使用して別のページに表示されます。これらのページとデータベースの間に、データを読み書きするための php ページがあります。
switch($_REQUEST['action'])
{
case "submit":
addRequest($_GET['name'], $_GET['content']);
header('Location: myPage.html');
break;
}
if(isset($_POST['request'])){
$content = stripslashes($_POST["request"]);
echo "<h3>Here is the Request You Just Entered: </h3><br/>";
echo "<table width=40%><tr><td style='font-weight:bold;'>Name: </td><td>" . $name . "</td></tr>" . "<tr><td style='font-weight:bold;'>Your Request: </td><td>" . $content . "</td></tr></table>";
$name = addslashes($name);
$content = addslashes($content);
echo "<br/><a style='padding-right:3%;' href='?action=submit&name=" . $name .
"&content=" . $content . "'>Submit Request</a>";
echo "<a href='javascript:history.back()'>Back to the Site</a>";
die();
} else {
echo "No Data Submitted";
}
?>
ページにはすべてのコンテンツが適切に表示されますが、addRequest() 関数に送信される情報を表示すると、データがエスケープされず、問題が発生します。
テキスト入力をエスケープする必要がない限り、すべてがうまく機能します。システムをデバッグしたところ、JQuery でフォーム データを送信する前に、文字列をエスケープする必要があることがわかりました。
どうすればそれを適切に行うことができますか、それとも私の問題は別のものですか? 事前に助けてくれてありがとう。