OK、検索候補のドロップダウンがあります。
何か、文字を入力すると、入力した値が %LIKE% であるすべての結果が表示されます。
関数 keyup() を使用します。
var search = $("#search"),
result = $('ul.dropdown');
search.keyup(function(){
if (search.val() !== "") {
load();
$.post('search.php?do=search', {search : search.val()}, function(data){
if (data == ""){
stop_load();
} else {
result.html(data);
}
});
$.post('search.php?do=search&data', {data : search.val()}, function(msg){
stop_load();
$('#end_results').html(msg);
}); /** actual search **/
} else {
$('#end_results').html('');
result.html('');
}
});
そして、これのためのPHP:
} else { // the info
$search = htmlentities(trim($_POST['search']));
$search_query = "'%$search%'";
$get_search = $db->prepare("SELECT * FROM `kit_info` WHERE `kit_name` LIKE $search_query LIMIT 10");
$get_search->execute();
while ($row = $get_search->fetch(PDO::FETCH_ASSOC)){
$return .= '<li onClick=\'$("#search").val("'.$row['kit_name'].'");$("ul.dropdown").html("");search();\'>'.$row['kit_name'].'</li>';
}
echo $return;
}
ご覧のとおり、PHP はドロップダウンの候補に表示されるリストをエコーします。
問題
ユーザーが 5 分ほど検索するとき、新しい文字を入力するたびに、私のホストはその IP を自動的にブロックして、送信するリクエストが多すぎます。
これは、クライアントがリクエストの制限を超えており、さらに 24 時間ブロックされるためです。
私が考えた解決策:
最初にページの読み込み時に mysql からすべてのデータを読み込み、次にアクションを実行します。
質問
制限を拡張する以外に、これに対するより良い & 簡単な解決策はありますか?
私のソリューションは素晴らしく、機能しますか? どうすればいいですか?
どうもありがとう!