-2

助けてください...私は初心者です!何をすべきか教えてください。

処理された.php

<?php
include_once('../../dbConnect.inc.php');
$sql="SELECT name FROM artist";
$artist = select($sql);
disconnect();
$output_items = array();
while($row = mysql_fetch_array($artist))
{
    $results[] = array('label' => $row['name']);
}
echo json_encode($results);
?>

index.php

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/smoothness/jquery-ui.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $("#artist").autocomplete(
    {
        source: 'processed.php',
        });
        });
</script>

この問題があります: http://jsbin.com/alaci5

4

2 に答える 2

2

そのオートコンプリート機能は、おそらくいくつかの変数をprocessed.phpページに渡しています。

var_dump($_GET)渡されているすべてのものを表示するために使用 します。

これらの要素の 1 つの内部$_GETには、ページに存在するテキスト ボックスの内容が含まれます。デモンストレーションのために、 を使用します$_GET['text']。必要なデータを保持している部分を見つける必要があります。

この値を使用してデータベースを検索し、返される結果のリストを取得する必要があります。

$sql="SELECT name FROM artist";
$artist = select($sql);

これはそのままのスクリプトです。最終的に似ているのはこれです。

$text_input = mysql_escape_string($_GET['text']);
$sql="SELECT name FROM artists WHERE name LIKE '%$text_input%'";
$artist = select($sql);

ユーザー向けページに入力されたテキストと同様の結果を取得する必要があります。

あなたのためのいくつかのメモ

  1. 私はmysql_escape_string()あなたがすでに持っているものを持っているだけでした。これは機能しますが (壊れたお尻のシボレー ペーサーを運転することもできますが、もっと良い方法があります)、推奨されません。

  2. 古い mysql 拡張機能を使用することは、実際には良い考えではありません。これmysqliは、 およびPDOに置き換えられています。

  3. データをエスケープする必要があります。これが mysqli で行われる方法です。

于 2013-08-13T18:22:45.910 に答える
2

オートコンプリートはソースを想定しています (結果を除外するために URL が指定されている場合)。

ドキュメントから:

文字列: 文字列が使用される場合、オートコンプリート プラグインは、その文字列が JSON データを返す URL リソースを指していると想定します。同じホスト上または別のホスト上にある可能性があります (JSONP を提供する必要があります)。オートコンプリート プラグインは結果をフィルター処理しません。代わりに、サーバー側スクリプトが結果をフィルター処理するために使用する用語フィールドを含むクエリ文字列が追加されます。たとえば、ソース オプションが " http://example.com " に設定され、ユーザーが foo と入力した場合、GET 要求はhttp://example.com?term=fooに対して行われます。データ自体は、上記のローカル データと同じ形式にすることができます。

したがって、PHP コードでは次のことを行う必要があります。

include_once('../../dbConnect.inc.php');
$sql="SELECT name FROM artist WHERE `name` like '%".mysql_real_escape_string($_GET['term'])."%'";
$artist = select($sql);
$output_items = array();
while($row = mysql_fetch_array($artist)) {
    $results[] = array('label' => $row['name']);
}
echo json_encode($results);
于 2013-08-13T18:41:33.343 に答える