2011-12-30 8 views
1

私は現在、ジレンマに直面しています。私は、データベースからのデータの配列を表示するメニューを構築しようとしています。ユーザーはそのリストから項目を選択し、これに基づいて、それに関連するデータを取得するためにデータベース呼び出しを行う必要があります。ここに私が持っている現在のコードです。PHPとSQLを使用して子どものリストを作成する

function foobar() { 
    $first_option_sql = "SELECT * from {location} l ORDER BY name ASC"; 
    $list_first_option = db_query($first_option_sql); 

    $output .= "<p><b>Please select the primary location that you would like to check.</b><p>" 
    $output .= "<br><b>Location: </b> <select id='list'><option>Available locations</option>"; 

    while($first_option_available = db_fetch_object($list_first_option)){ 
    $output .="<option locationid='$first_option_available->lid'>".$first_option_available->name."</option>"; 
    } 

    $output .="</select><input type=submit value='Search'>"; 
    $output .="<p><b>Children: </b><select id='child'><option selected='yes'>Available children</option><p>"; 

    $children_available_sql = "SELECT complexquery WHERE lid='%d' ORDER BY l.name ASC"; 
    $list_children = db_query($children_available_sql); 

    while($children_available = db_fetcj_object($list_children)){ 
    $output .="<option>".$children_available->name."</option>"; 
    } 

    return $output; 

}

ここでの問題は、このコードを使用して選択し、「最初のオプション」の値を取得することができません。したがって、2番目のクエリが実際に起こっていることはありませんということです。これは2番目のリストを設定しません。

私はAJAXやJavascriptを使用することを考えていましたが、あまりにも慣れていません。したがって、私はこれをどのように実行できるかについていくつかの洞察を求めていました。

+0

PHPを単独で使用している場合、PHPがサーバー側で処理されるため、フォームを送信してページを再表示することなく、実際にこの操作を行うことはできません。 あなたが言及したように、Ajaxを使ってはるかに効果的です。選択した最初のオプションをPHPページに渡して、2番目のリストの値を含むDBリクエストからJSONデータを返します。 – julio

+0

私はあまりAJAXに精通していないので、これをどうやって行うことができるのだろうかと思っています。私は基本的にPHPを使用してWebページを生成しているので、この機能を別のものにつなげる方が少し良いかもしれないと思います。 – Hectron

+0

さて、フォームを最初のオプションリストの 'onChange'に送信し、最初の選択リストの値をPOSTまたはGETパラメータとして渡します。あなたのページの先頭で、そのパラメータが 'isset'であるかどうかを確認します。そうであれば、フォームが送信されたことがわかり、その値を使用して2番目の選択リストの参照をトリガーします。 – julio

答えて

1

まず、あなたのHTMLが無効であるか、単に詳細が欠落しています。

あなたはあなたの選択ボックスのname要素を必要とする:フォームを送信する際

<select name="lid" id='list'> 

locationidは動作しません。

<option locationid='$first_option_available->lid'> 

あなたが代わりにvalue属性が必要になります。

<option value='$first_option_available->lid'> 

適切なHTMLを使用すると、$ _POST ['lid']はあなたが望む場所IDになります。

$menu = foobar($_POST['lid']); 

function foobar($lid) { 
    //... 
} 
+0

POST ['lid']全体については、POSTコマンドはカスタム値(つまり、locationid)ではなくHTMLタグ内の値を渡すだけなので、これは簡単ですか? – Hectron

+0

修正します。正しいHTML属性が存在する場合、値はPOSTでのみ終了します。 – popthestack

+0

javascriptを使用する場合は、値を取得する属性を使用できますが、javascriptを使用しても、デフォルトのhtml名前と値の属性以外を使用する必要はありません。 – popthestack

関連する問題