私のサイト用の簡単な検索エンジンを構築しました。ユーザーがデータベースにクエリを出して結果を表示するキーワードを入力すると動作します。phpやjqueryを使用したmysql検索結果のフィルタリング
私のデータベーステーブルには次のようになります。
game_id title developer publisher genre release_date platform
rating image_location description
私は、好ましくは、ページを更新せず(月だけをコードするが、持っているされて、彼らは検索を行った後、ユーザは結果によってフィルタリングするようにしたいですjqueryとajaxの一般的な理解)。
ここに私のコードは、使用しているので、検索バー、検索結果、およびクエリが分離されているページが含まれています。
ページ1検索バー
<div id=\"top_search\">
<form name=\"input\" action=\"search.php\" method=\"get\" id=\"search_form\">
<input type=\"text\" id=\"keywords\" name=\"keywords\" size=\"128\" class=\"searchbox\" value=\"$defaultText\">
<select id=\category\" name=\"category\" class=\"searchbox\">
";
createCategoryList();
echo '
</select>
<input type="submit" value="Search" class="button" />
</form>
</div>
</header>
';
2ページ表示結果
<?php
session_start();
include ("includes/search_func.php");
if (isset($_GET['keywords'])){
$keywords = mysql_real_escape_string(htmlentities(trim($_GET['keywords'])));
$errors = array();
if(empty($keywords)){
$errors[] = 'Please enter a search term';
}else if(strlen($keywords)<3){
$errors[] = 'Your search term must be at least 3 characters long';
}else if(search_results($keywords) == false){
$errors[] = 'Your search for'.$keywords.' returned no results';
}
if(empty($errors)){
function diplay_results($keywords){
$results = search_results($keywords);
$results_num = count($results);
foreach($results as $result){
echo '
<div id="game_result">
<a href= game_page.php?game_id='.$result['game_id'].'><img src= '.$result['image_location'].' id="image" /></a>
<div id="main_title">
<a href= game_page.php?game_id='.$result['game_id'].'><h2 id="game_title">'.$result['title'].' </h2></a>
<h3 id="platform">for '.$result['platform'].'</h3>
</div>
<p id=game_description>'.$result['description'].'</p>
<div id="right_side">
<h4 id="rating">'.$result['rating'].'</h4>
</div>
<hr id="hr"/>
</div>
';
}
}
}else{
foreach($errors as $error){
echo $error, '<br />';
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Search</title>
<link rel="stylesheet" href="css/main.css">
<link rel="stylesheet" href="css/search.css">
</head>
<body>
<div id="wrapper">
<div id="main_aside">
//filter navigation will go here
</div>
<div id="main_section" class="header">
<?php diplay_results($keywords)?>
</div>
</div>
</body>
</html>
ページ3クエリのデータベースケースでそう
<?php
include 'includes/connect.php';
function search_results($keywords){
$returned_results = array();
$where = "";
$keywords = preg_split('/[\s]+/', $keywords);
$total_keywords = count($keywords);
foreach($keywords as $key=>$keyword){
$where .= "title LIKE '%$keyword%'";
if($key != ($total_keywords - 1)){
$where .= " AND ";
}
}
$results ="SELECT * FROM games WHERE $where ";
echo $results;
$results_num = ($results = mysql_query($results)) ? mysql_num_rows($results) : 0;
if($results_num === 0){
return false;
}else{
while($row = mysql_fetch_assoc($results)){
$returned_results[] = array(
'game_id' => $row['game_id'],
'title' => $row['title'],
'platform' => $row['platform'],
'rating' => $row['rating'],
'image_location' => $row['image_location'],
'description' => $row['description'],
);
}
return $returned_results;
}
}
?>
そのiは、ユーザーを許可したくない明確なキーワードを検索すると、データベースにタイトルのキーワードを含むゲームが表示されます(既にこの部分は働いている)。今、それを理解できないのは、ユーザが結果をフィルタリングしてアクションゲームだけを言うようにする方法と、特定のプラットフォームなどを言うことです。
私が言ったように私は1ヶ月間しかこれをやっていないので、何か間違ってやっていたら、私は馬鹿と呼ぶのをためらっていませんが、助けてください。どんな助けも、チュートリアルや書籍の推奨事項へのリンクさえ評価されるでしょう。
ありがとうございます、あなたの応答は本当に正しい軌道に乗りました。現時点では、私は並べ替えることができますが、私はすでに私の頭の中でフィルタリングを働かせる方法を知っています。私は後でjavascriptを適用するために働くので、毎回データベースにアクセスする必要はありません。 – hugoismyname