2

こんにちは、私はここに座って、次の問題について考えています。

次のようなテーブルを実行する自動提案検索エンジンがあります。

zipcode    city       sum

12345      town       5

入力される文字ごとにループを実行する JavaScript を使用して検索を実現します。その時点までは、都市名や郵便番号などの 1 つのキーワードしか検索できません。

今、私はこれらの両方を組み合わせて、ユーザーをこれらの両方のいずれかに制限せず、都市と郵便番号を入力しても見つかるようにしたいと考えています。

そのため、次を使用して各キーワードを分離したいと思います。

preg_split('/[\s]+/', $keywords);

これが現時点での問題です。この手段を使用すると、すべてのキーワードが配列に挿入されます。使い方:

HTMLには入力フィールドがあります。その下に、順序付けられていないリスト div があります。その div javascript では、search.php ファイルからの結果が自動的に追加されます。次のようになります。

include('../scripts/db_connect.php');

if (isset($_POST['search_term']) == true && empty($_POST['search_term']) == false) {

$search_term = $db->real_escape_string(htmlentities(trim($_POST['search_term'])));

$search_term_query = "SELECT * FROM `a` WHERE `b` LIKE '$search_term%'";

if ($result_query = $db->query($search_term_query)) {

    while ($row = $result_query->fetch_assoc()) {

    echo '<li>', 
          $row["a"], 
          ' ', 
          $row["b"],  
          ' ',
          '( ',
          $row["c"],
          ' )', 
          ' </li>';
    }

}

}

私のjavascriptは1つのキーワードのみを処理しています:

$(document).ready(function() {
    $('.searchfield').keyup(function() {
        var search_term = $(this).attr('value');
        $.post('ajax/search.php', {search_term:search_term}, function(data) {
            $('.result').html(data);

            $('.result li').click(function() {
                var result_value = $(this).text();
                $('.searchfield').attr('value', result_value);
                $('.result').html('');
            });
        });
    });
});

そのため、現時点ではそれを解決する方法がわかりません。私を助けてくれる人がいれば、本当に感謝しています。ありがとう。

4

1 に答える 1

0

値をそのままにして、文字列全体をポストコールでphpファイルに送信します。search.phpで、次のようなものを試すことができます。

function split_search_term($val) {
    $val = explode(" ", $val);
    $search_term_query = "SELECT * FROM `a` WHERE ";
    foreach($val as $val_row) {
        $search_term_query .= "(`zipcode` LIKE '" . $search_term . "%' OR `city`  LIKE '" . $search_term . "%') OR ";
    }
    if(count($val) > 0) {
        // The IF statement is used to make sure that the foreach loop has been fired at least once,
        // or else it would just chop off the 'WHERE ' part and you'll get something like:
        // "SELECT * FROM `a` WH" and this will give you an error
        $search_term_query = substr($search_term_query, 0, -4); // To cut off the last remaining ' OR ' in the query
    } else {
        $search_term_query .= "0"; // To finish the query so it doesn't return anything we don't want
    }

    return $search_term_query;
}

ここから先に進んで結果を取得できます。私はそれがうまくいくことを願っています。

于 2012-09-18T15:55:45.913 に答える