2012-04-29 11 views
2

私のサイト用の簡単な検索エンジンを構築しました。ユーザーがデータベースにクエリを出して結果を表示するキーワードを入力すると動作します。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\"> &nbsp; 
      <select id=\category\" name=\"category\" class=\"searchbox\"> 
"; 
createCategoryList(); 
echo ' 
      </select> &nbsp; 
      <input type="submit" value="Search" class="button" /> &nbsp; 
      </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'].'&nbsp; &nbsp;</h2></a> 
        <h3 id="platform">for &nbsp;'.$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ヶ月間しかこれをやっていないので、何か間違ってやっていたら、私は馬鹿と呼ぶのをためらっていませんが、助けてください。どんな助けも、チュートリアルや書籍の推奨事項へのリンクさえ評価されるでしょう。

答えて

0

あなたのアプローチは適切です。

1)これらの属性にHTMLをプラグインすることができ、WHERE句を微調整するだけで、検索結果をフィルタリングすることができます。あなたの質問のしたがって、検索のための2つのページがあります - ユーザーがタイトル名のみに基づいてフィルタリングし、カテゴリと他の属性に基づいてフィルタリングする高度な検索ページを言うことを可能にする簡単な検索です。
2)追加のパラメータに基づいてフィルタリングするために、基本検索ページ自体にオプションを指定することもできます。

インターフェースをどのように選択するかは、要件仕様によって決定されることになります。 WHERE句のみがすべての場合に変更されることに注意してください。

+0

ありがとうございます、あなたの応答は本当に正しい軌道に乗りました。現時点では、私は並べ替えることができますが、私はすでに私の頭の中でフィルタリングを働かせる方法を知っています。私は後でjavascriptを適用するために働くので、毎回データベースにアクセスする必要はありません。 – hugoismyname

関連する問題