オートコンプリートにアポストロフィを渡すのに苦労しています。データベースには、アポストロフィを持たないエントリが含まれています...代わりに、同等の html が使用されています (&POUND039;)。私はまだajaxに非常に慣れていないので、助けてくれて本当に感謝しています。問題は、アポストロフィの値を渡して一致させるにはどうすればよいかということです。また、私のコードはインジェクション攻撃を受けやすいですか? よろしくお願いします。
コードは次のようになります。
<script type="text/javascript">
var options = {
serviceUrl:'autocomplete/autoQuery.php',
minChars:2,
delimiter: /(,|;)\s*/, // regex or character
maxHeight:400,
width:500,
zIndex: 9999,
deferRequestBy: 0, //miliseconds
params: { country:'Yes' }, //aditional parameters
noCache: false, //default is false, set to true to disable caching
// callback function:
// onSelect: function(value, data){ alert('You selected: ' + value + ', ' + data); },
onSelect: function(value, data){ window.location = "textbooks.php?bk=" + data;}
};
$('#query').autocomplete(options);
</script>
クエリ結果を送り返す php スクリプトがあります。このページは query.php と呼ばれ、そこにあるコードは次のとおりです。
$get = htmlentities($_GET['query']);
$query = "SELECT title,author,id,isbn10,isbn13 FROM textbook
WHERE title LIKE '%" . $get . "%'
OR author LIKE '" . $get . "%'
OR isbn10 LIKE '" . $get . "%'
OR isbn13 LIKE '" . $get . "%'
LIMIT 5
";
$result = mysql_query($query,$connection);
if(mysql_num_rows($result) == 0){
$resString = "'No result found. Click here',";
$idString = "'unknown',";
}else{
$resString = "";
$idString = "";
while($data = mysql_fetch_array($result)){
$resString .= "'" . $data['title'] . " by " . $data['author'] . "',";
$idString .= "'" . $data['id'] . "',";
}
}
$resString = rtrim($resString, ',');
$idString = rtrim($idString, ',');
$code = "{\n";
$code .= "query:'" . $get . "',\n";
$code .= "suggestions:[" . $resString . "],\n";
$code .= "data:[" . $idString . "]\n";
$code .= "}";
echo $code;