2

私は自分のサイト用に単純な検索エンジンを構築しました。その仕組みは、ユーザーがキーワードを入力すると、データベースにクエリを実行して結果を表示することです。

私のデータベーステーブルは次のようになります。

game_id title   developer   publisher   genre   release_date    platform          
rating  image_location  description

ユーザーが検索を行ったら、できればページを更新せずに結果をフィルタリングできるようにしたい (コーディングは 1 か月しか経っていないが、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;
}   
}

?>

そのため、ユーザーが重要な用語を検索できるようにしたい場合は、タイトルにキーワードが含まれるゲームをデータベースから表示します (この部分は既に機能しています)。ここで理解できないのは、ユーザーが結果をフィルタリングして、特定のプラットフォームなどと一緒に、アクション ゲームだけを言う方法です。

私が言ったように、私はこれを1か月しかやっていないので、何か間違ったことをしている場合は、私を馬鹿と呼ぶことを躊躇しないでください. チュートリアルや本の推奨事項へのリンクでさえ、どんな助けも高く評価されます.Thanks.

4

1 に答える 1

0

あなたのアプローチは適切です。出版社名や開発元、ジャンル、発売日などで検索結果を絞り込むには、

1) 別の「高度な検索」ページを作成して、これらの属性の HTML をプラグインし、クエリの WHERE 句を微調整するだけです。そのため、検索用の 2 つのページがあります。ユーザーがタイトル名だけに基づいてフィルタリングし、カテゴリを指定できる単純な検索と、他の属性に基づいてフィルタリングする高度な検索ページです。
2) 追加のパラメータに基づいてフィルタリングするために、基本検索ページ自体にオプションを提供することを選択することもできます。

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

于 2012-04-29T17:16:41.523 に答える