私のスクリプトはPHPを使用しており、イベントに登録するWebフォームのjQueryオートコンプリートを使用しています。 jQueryは
name
で動作します名前を選択してから、他のすべてのテキストフィールドに入力します。
ただし、データベースには過去のイベントのすべてのレコードが保存されます。たとえば、スーザンボイルは私の前のイベントの5つに参加しました、そして
name
Susan
と入力すると、テキストフィールドに5つのスーザンボイルが表示されます
。同じ名前を除外するにはどうすればよいですか?
私のjQueryコード:
$('input.item-autocomplete').on('autocompleteselect', function (e, ui) {
$.ajax({
url:"ajax_reg.php",
dataType:"json",
data:{
'name' : ui.item.value,
'action' : 'get_fulldata'
},
success:function(data){
$("#mobile1").val(data.mobile1);
$("#mobile2").val(data.mobile2);
$("#email").val(data.rt_email);
$("#tf1").val(data.tf1);
$("#tf2").val(data.tf2);
$("#tf3").val(data.tf3);
}
});
});
更新:申し訳ありませんが、SQLコードを忘れてしまいました。別のphpファイルにSQLを書いています。 (SQLコードadjax_reg.php)
<?php
$name = $_GET['name'];
$action = empty($_GET['action'])?'':$_GET['action'];
if(empty($name)){
exit('No data');
}
require_once("../winphplib/kernel.php");
require_once ('../winphplib/dbconnect_egen.php');
if($action=='get_name'){
$sqlquery = "SELECT rt_name FROM reg_ticket WHERE rt_name LIKE '%$name%' LIMIT 15";
$result = mysql_query($sqlquery) or die(mysql_error());
while($myrow = MySQL_fetch_array($result)){
$data[] = strtoupper($myrow['rt_name']);
}
}elseif($action=='get_fulldata') {
$sqlquery = "SELECT * FROM reg_ticket WHERE rt_name = '$name' LIMIT 1";
$result = mysql_query($sqlquery) or die(mysql_error());
$data = mysql_fetch_assoc($result);
if(count($data)>0){
list($data['mobile1'], $data['mobile2']) = explode("-", $data['rt_contact']);
list($data['tf1'], $data['tf2'], $data['tf3']) = explode("-", $data['rt_ic']);
}
}
mysql_free_result($result);
echo json_encode($data);
回答 2 件
PHPスクリプトで、
GROUP BY
を追加して、SQLクエリを微調整するだけです。 句。私はあなたのクエリを見ていませんが、このようなもの:
SELECT * FROM events JOIN artists ON events.artist_id = artists.id WHERE artist like :searchterm GROUP BY artists.artist_name
関連記事
- JQuery autocomplete()selectイベントは、ウィジェットがフォーカスを失ったときにのみトリガーされます
- JQuery DatatablesSearchPaneフィルター値
- jQueryで空のフィルタークエリを非表示にする
- jQueryを使用して複数のタグで要素をフィルタリングする
- geocodeapiioを使用したJQueryアドレスオートコンプリート
- 異なるデータソースでのjQuery UIオートコンプリート
- オートコンプリートjqueryおよびOdoo rpc呼び出しを使用した入力に提案が表示されない
- JQuery UIオートコンプリート+タグプラグイン(XOXCO):選択時にタグは追加されません
- VisualforceページのJqueryオートコンプリート
関連した質問
- ajaxコールバック後にインクリメントカウンターが機能しない
- 配列とオブジェクトを受け取った場合にjQueryでphpからデータを解析する方法
- ハッシュタグとメンションからリンクを作成する方法
- codeigniterでの最初のselectpickerのユーザー入力に基づいて、2番目のブートストラップselectpickerを動的にロードします
- ボタンを最初に使用した後、jQueryがデータIDを返さない
- 入力チェックボックスの結果のjQueryajaxを反転または非表示にします
- jQuery ajaxPHPおよびデータベースによるデータの取得
- 初心者の質問:サーバー時間に基づく静的カウントダウンタイマー
- AJAX:400の悪いリクエスト
- 検索ボックス(AJAX)は要求されたデータをロードしません
あなたは
users
を取得する必要があります 彼らが少なくともイベントに参加したという基準で。おそらくusers
に参加していますevents
と 、しかし、あなたはusers
をフィルタリングする必要があります 彼らのparticipation
に基づいて 。次の表を使用していると仮定します。次のようなクエリが必要になります。
これにより、少なくとも1つのイベントに参加した検索テキストを含む各ユーザーのレコードが返され、必要な列が提供されます。
編集
編集した質問を確認しましたが、多くの修正すべき問題があります。
クエリでSELECT *を使用しないでください問題点:
大量のメモリと時間を浪費する可能性のある非常に大きなデータがある可能性があります
機密データをユーザーに返す可能性があります
select句で列リストを使用して、必要なものだけを選択するようにします。
これを修正します。
問題を修正するdistinctキーワードを使用する必要があります
これは
LIKEなしではオートコンプリートは機能しませんdistinct
を選択します 値ですが、矛盾がある場合、つまり、同じ人物に対して同じ名前の異なる属性がある場合、いくつかのレコードが返されます。LIKE
を使用する必要があります および%...%
if
のように あなたがselect
したい場合name
を持つユーザー 渡されたテキストが含まれています。また、select
を傷つけることはありませんname
同様に、おそらくid
、name
の場合 一意ではありません。代わりにPDOまたはmysqli_関数を使用してください。
クエリにあるようにユーザー入力を使用しないでくださいこれはSQLインジェクションの影響を受けやすいため、ハッカーがデータベースに危害を加えたり、ロードする資格のないデータをロードしたりすることは非常に簡単です。 PDOでパラメーター化されたクエリを使用するか、パラメーターをエスケープします。
スパゲッティコードを書かないデータベースを扱う部分をビュー部分からエンジン部分から分離すると、コードの保守が容易になります。
データベースを正規化する通常の形式ではないデータベースは、うまく機能することはめったになく、保守が難しく、冗長性や不整合が生じやすく、通常はうまく機能しません。