0

これに対する解決策を探していて、スタックオーバーフローに関するいくつかの助けを見つけましたが、ほとんどの場合、私が見つけた例は、データベースクエリから形成された配列を使用していません。これが私が達成しようとしていることのためのいくつかのコードです...

$stores = mysql_query("SELECT * FROM Stores");
$staff = mysql_query("SELECT * FROM Staff");

店舗用とスタッフ用の2つの要素を作成したいのですが、店舗のクライアント側に基づいてスタッフをフィルタリングしたいと思います。したがって、ユーザーが最初のドロップダウンから「シドニー」を選択すると、2番目のドロップダウンでシドニーの店舗で働くスタッフのみが表示されます。次に、ユーザーが最初のドロップダウンから「ロンドン」を選択すると、シドニーのスタッフがロンドンのスタッフに置き換えられます。

サーバーサイドスクリプトはPHPで実行され、PHPで2つのドロップダウンを作成できます。しかし、2番目のドロップダウンから不要なものを削除するためにjQueryで立ち往生しています。

私はそれがいつも使われているのを見るので、これが可能であることを知っています。これを管理する方法の例をたくさん見てきましたが、PHP配列のデータを使用してを挿入する例はありません。

4

4 に答える 4

2

ajaxが必要です。

ユーザーがドロップダウンで何かを選択すると、処理可能なイベントが発生します。このプロセス内で、jQuery('#id_dropdown')。val()のような選択の値を取得し、これをajax経由で送信します(GETリクエストのサイズ制限に遭遇しないため、POSTを使用するのが好きです)。

これをサーバー側でphpを使用して処理し、選択された値を使用してデータベースにアクセスし、ajaxを介して送信します。2番目のドロップダウンで正しい結果が得られたら、エコーを介して出力できます。

最後に、応答がjQueryに返されるときに、すべてのオプションを新しいドロップダウンに挿入できます。


JAVASCRIPT PART:

  1. イベントを最初のドロップダウンにバインドします
  2. ドロップダウンで選択したオプションの値を取得します
  3. ajaxリクエストを行う

次にいくつかのサンプルコードを示します。

 var parameters='value_selected='+value_dropdown;
 jQuery.Post({
       url: '/destiny_when_I_process',
       data: parameters, 
       success: func_callback

 });
//here you can imagine a pause, because PHP is processing the data you send by post
//....  
//....
//this part is executed when php send the information 
function func_callback(response_from_php){
       jQuery('#second_dropdown').html(response_from_php); 
}

PHPパート:

  1. POSTから値を取得する
  2. この値を使用してデータベースにアクセスする
  3. エコー(応答を送信)。一連のテキストを(HTMLで)送信します。これは実際にはあまり専門的ではありませんが、デモンストレーションの目的では問題ありません。JSONは軽量であるため、専門家はJSONを送信します。

JAVASCRIPT PART(SECOND PART)

  1. コールバック関数では、最初のパラメーターを介して応答データを受け取ります
  2. 2番目のドロップダウンに新しいデータを挿入します(データはすでにHTMLであるため、処理する必要はありません)
于 2012-10-20T02:49:16.307 に答える
1

二次ドロップダウンの場合、はい、いくつかのajaxが必要になります。

ストアに対応する結果をフェッチし、オプションlistmwitchがooptionに挿入されて返送するスクリプトを作成できます。

jqueryとphpを使用すると、いくつか必要になります。

結果を取得してオプションを返すためのphpファイル。(getStaff.phpとしましょう)

<?php 
//get the store id by post is it is set
if (isset($_POST['store->id']) $store_id = mysqli_real_escape_string($_POST['store_id']);

//get the data !! notice the WHERE caluse
$r = mysql_query("SELECT * FROM Staff" *WHERE store=''$store->is*);

//split the data in the array
$staffs=array();
    while ($assoc = mysql_fetch_assoc($r)) {
          //Varialbe = $assoc['colum_name'];
          $staff->id=$assoc['id'];
         $staff->name=$assoc['name'];
        //and so on for each colum in your table.
        array_push($staffs, $assoc);
   }

//echo the result as option
foreach ($staffs as $staff) echo "<option value='$staff->id'>$staff->name</option>";
?>

最初に選択して、追加します

onchange="$.post('getStaff.php', {store_id:$(this).val()}, function (data){ $('#staff_select').html(data);});"

このecampleの2番目の選択(staff_select)にIDを追加します。

説明として:最初のドロップダウンが変更されると、store_idをPOST引数としてgetStaff.phpにリクエストを送信します。php sriptは、ストアIDに従ってsyaffを取得し、セカンダリ選択のオプションタグのリストを戻します。jqueryよりも「データ」をセカンダリ選択に追加してVOilà!

それがうまくいくのは、一緒に小さなものがたくさんあるからです。答えがずさんなように思えたら申し訳ありませんが、一度知ってしまえば本当に簡単です。

于 2012-10-20T03:07:37.987 に答える
1

これを行う方法を学ぶために午後を過ごしました、そしてそれは非常にうまく機能しています。他の人のためにここに新しいコードを投稿しました...

チュートリアルを提供してくれたhttp://forum.codecall.net/topic/59341-php-sql-jquery-and-ajax-populate-select-boxes/に感謝します。

そして、ここにいるみんなに感謝します。

最初に構築するPHP:

function agency_select() {
include('../include/dbase.php');
$agencies = $pdo->query("SELECT * FROM agency WHERE Status='active' ORDER BY AgencyName");
$opt = '';
while ($age_array = $agencies->fetch(PDO::FETCH_ASSOC)) {
    $opt .= '<option value="'.$age_array['AgencyId'].'">'.$age_array['AgencyId'].' - '.$age_array['AgencyName'].' - '.$age_array['AgencySuburb'].'</option>'."\n\t\t\t\t\t\t\t";
}
return $opt;
}

2つの要素のHTML:

<label for="AgencyId">Client/Agency:</label>
    <select class="uniform" id="AgencyId" name="AgencyId" style="width: 400px; overflow-x: hidden">
        <?php echo agency_select(); ?>
    </select>

<label for="Contact">Contact: </label>
    <select class="uniform" id="Contact" name="Contact" style="width: 300px; overflow-x: hidden">
        <option value="">----Select Client/Agency----</option>
    </select>

AJAXファイル:

if(isset($_POST['AgencyId'])) {

include('../include/dbase.php');

$option = '<option value="">----Select Contact----</option>';

$query = $pdo->prepare("SELECT * FROM client WHERE AgencyId= ?  AND Status='active' ORDER BY FirstName");
$result = $query->execute(array($_POST['AgencyId'])));

while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
    $option .= '<option value="'.$row['id'].'">'.$row['FirstName'].' '.$row['LastName'].'</option>';
}

echo $option;
}

jQuery:

$(document).ready(function () {
    update_contacts();
});

function update_contacts() {
$('#AgencyId').change(function() {
    $('#Contact').fadeOut();
    $('#loader').show();

$.post('../ajax/ajax_contact_select.php', {
        AgencyId: $('#AgencyId').val()
        }, function (response) {
        setTimeout("finishajax('Contact', '"+escape(response)+"')", 400);
        });
        return false;
    });
}

function finishajax(id,response) {
    $('#loader').hide();
    $('#'+id).html(unescape(response));
    $('#'+id).fadeIn();
}
于 2012-10-20T06:48:34.757 に答える
0

説明できる限りお手伝いさせていただきます。

mysql_query、mysqli btwを使用する必要があり、mtsqlはデクリケートされ、結果セットを返します。これは、クエリのすべてのレコードが含まれることを意味します。結果を処理する前に、結果をまとめる必要があります。これは、mysql_fetch_assoc、mysql_fetch_rowなどのmethidを使用して実行されます。配列へのフェッチのようなものがありますが、マスターしていないため、この応答にはフェッチassocを使用します。

したがって、yoruの結果セット(ケースに$storesと$staff)ができたら、結果に対してwhileループを呼び出して、次のようにデータを取得します。

    while ($assoc = mysql_fetch_assoc($r)) {
          //Varialbe = $assoc['colum_name'];
          $stores->id=$assoc['id'];
         $stores->name=$assoc['name'];
        //and so on for each colum in your table.
        array_push($stores, $assoc);
   }

その後、必要に応じてエクスポートできます。あなたの場合は次のようになります

foreach ($stores as $store) echo "<option value='$store->id'>$store->name</option>";

http://php.net/manual/en/function.mysql-fetch-array.php witchは、columnameをキーとする配列を使用して同じfetch_assocbuを実行することを強くお勧めします。

于 2012-10-20T02:55:05.960 に答える