0

ajaxを使用して自分のWebページにユーザー検索バーを作成しようとしています。xmlファイルを使用する代わりに、mysqlデータベースから直接値を返したい。これは、新しいユーザーがサイトに登録されるたびにxmlファイルを更新し続ける必要がないためです。私はAJAXを初めて使用し、問題に遭遇しました。現在、値をクエリにハードコーディングすると、コードは機能します。しかし、検索バーからクエリに値を取得し、値が検索バーに入力されたときにのみコードを実行するにはどうすればよいですか。これが私が持っているものです。

2つのファイルがあります。インデックス(検索バーとphpコードがある場所)とajaxコードのjavascriptファイルです。

検索バーコード:

            <form method="post" name="searchForm">
                <input type="text" size="40" placeholder="Search for people" onkeyup="getResults(this.value)" />
                <div id="search">
                    <?php
                        $searchString = $_POST['str'];  
                        $sql = "SELECT name FROM User WHERE name LIKE '?%'";
                        $query = $conn->prepare($sql);
                        $query->execute(array($searchString));
                        $row = $query->fetchAll();
                        echo "<ul>";
                        foreach ($row as $rs) 
                        {
                            echo "<li><a href='#'>" . $rs['name'] . "</a></li>";
                        }
                        echo "</ul>";
                    ?>
                </div>
            </form>

Javascript / AJAXコード:

function getResults(str)
{
    if (str.length == 0)
    { 
        document.getElementById("search").innerHTML="";
        document.getElementById("search").style.border="0px";
        return;
    }
    if (window.XMLHttpRequest)
    {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {   
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("search").innerHTML = xmlhttp.responseText;
            document.getElementById("search").style.border="1px solid #A5ACB2";
        }
    }
    xmlhttp.open("POST","index.php?str="+str,true);
    xmlhttp.send();
}

私はここで何が間違っているのですか?そして、送信ボタンを使用する以外に、ユーザーが検索バーに入力し始めたときにのみphpコードを実行できるようにする方法は何ですか。ありがとう。

4

2 に答える 2

0

まず、実際のページ(HTMLをレンダリングするPHPスクリプト)と実際の検索結果を返すコードを分離します。現在、ページがレンダリングされたときに実行された後のPHPコードは<input>、ユーザーが検索ボックスに何を入力したかを知ることはありません。

検索スクリプトはJSONまたはXMLを返す必要があります。現在、完全なHTMLを使用してユーザー向けに設計されたページをロードします。これは、リソースと帯域幅の無駄です。

SQLステートメントを修正するには、?文字が式の用語全体を表す必要がありますLIKE
例:

$searchString = $_POST['str'] . '%';
$sql = "SELECT name FROM User WHERE name LIKE ?";
$query = $conn->prepare($sql);
$query->execute(array($searchString));

修正すべき点はまだまだありますが、これはどこから始めればよいかわかります...

于 2012-07-12T18:23:41.200 に答える
0

POSTが実際に発生したかどうかを確認する必要があります。誰かが最初にページにアクセスしたときは、おそらくGETを介して行われますが、検索コードは関係なく実行されます。それで...

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   if (isset($_POST['str']) && ($_POST['str'] != '')) {
       ... run the search
   }
}
于 2012-07-12T18:30:56.123 に答える