0

ライブ検索を「適切に」機能させようとしています。「a」と入力すると、ボックスの下の領域(ドロップダウンなど)に「aussie」と「australian」(これらはデータベースにないため、どこから来ているのかわかりません)が表示されます。それらの1つを選択すると、テキストボックスに入力されます。私に提案されたコードは、私がよく知らないmysqliを使用しています。典型的なSELECTステートメントを追加すると、(多かれ少なかれ)正しいデータが表示されますが、選択できません。私が多かれ少なかれ言う理由は、以前のように(ドロップダウンで)「a」が「aussie」と「australian」を私に与えるからです。'n'を追加すると(つまり、'an'を検索すると)、データベース内のDIV内の文字列を含むが、選択できないすべての名前のリストが表示されます。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript"> 
        $(document).ready(function() {
            $("#faq_search_input").keyup(function() {
                var faq_search_input = $(this).val();
                var dataString = 'keyword='+ faq_search_input;

                if(faq_search_input.length>1) {
                    $.ajax({
                        type: "GET",
                        url: "ajax-search.php",
                        data: dataString,
                        success: function(server_response) {
                            document.getElementById("searchresultdata").style.display = "block";
                            $('#searchresultdata').html(server_response).show();
                        }
                    });
                } return false;
            });
        });
    </script>


</head>
<body>
    <div class="searchholder">
       <input  name="query" class="quicksearch" type="text" id="faq_search_input" />
       <div id="searchresultdata" class="searchresults" style="display:none;"> </div>
    </div>
</body>
</html>

ajax-search.php

<?php
    //you must define your database settings
    define("DB_HOST", "localhost");
    define("DB_USERNAME", "root");
    define("DB_PASSWORD", "");
    define("DB_NAME", "mydb");
    if(isset($_GET['keyword'])) {
        $search = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
        if ($search->connect_errno) {
            echo "Failed to connect to MySQL: (" . $search->connect_errno . ") " .     $search->connect_error;
            $search->close();
        }
        $keyword =  trim($_GET['keyword']) ;

        //original statement
        //$query ="SELECT COLUMN_NAME FROM ".DB_NAME.".INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%".$keyword."%'";

        //my edited statement
        //$query ="SELECT name FROM ".DB_NAME.".INFORMATION_SCHEMA.COLUMNS WHERE name LIKE '%".$keyword."%'";

        //basic sql statement
        $query ="SELECT name FROM users WHERE name LIKE '%".$keyword."%'";

        $values = $search->query($query);
        if( $search->error ) exit( $search->error ); 

        if($values->num_rows != 0) {
            while($row = $values->fetch_assoc()) { 
                echo $row['name']."<br>";
            } 
        }
        else {
            echo 'No Results for :"'.$_GET['keyword'].'"';
        }
    }
?>

データベースには、nameという列を持つusersというユーザーデータのテーブルが含まれています。何かご意見は?

4

1 に答える 1

0

こちらのチュートリアルにある使用済みソリューション http://www.htmlblog.us/jquery-autocomplete

于 2013-02-01T01:58:07.973 に答える