2

HTMLリストボックスがあります。そのリストボックスで任意の値を選択し、その選択に基づいてPHPデータベースクエリで2番目のリストボックスを更新できるようにしたいです。

私が試したオプション:

-JSONを使ってみました。Javascriptを使用して外部PHPスクリプトを呼び出して2番目のリストボックスを更新しましたが、返されるPHP値は配列であり、Javascriptではうまく変換されません。

-Cookieを使用できないため、HTMLセッションを使用しています。最初のリストボックスで値を選択すると、セッション値が更新され、ページが更新されます。リロード時に、ページはSession値を使用してPHPスクリプトを実行し、2番目のリストボックスを更新しますが、onChange = "function(); with the first listbox"を呼び出して、Javascriptを使用して最初のリストボックスの選択された値でHTMLセッションを更新できません。 。

これを実装するために利用できる他のオプションはありますか?または、これらのオプションの1つを修正して、これを機能させるにはどうすればよいですか?

4

2 に答える 2

1

JSONを使用してみたとのことですが、それが何を意味するのかを完全には理解していません。JSONは、パーサーを備えたすべてのマシンで普遍的に理解できる文字列をフォーマットする方法にすぎません。PHPの値が「配列」であり、したがって変換できないという考えは意味がありません。重要なのは、 JSON形式でクライアントに送信されることです。

PHPに配列がある場合は、次のjson_encode関数を使用して配列をJSON形式に変換できます。

<?php
my_arr = array('a' => 'b', 'c' => 'd');
// do stuff to fill array
echo json_encode($my_arr);
?>

JavaScriptコードでJSON形式で受け取ったら、JavaScriptオブジェクトに解析できます。詳細については、この質問を参照してください。

于 2012-11-12T16:24:15.707 に答える
1

だからここに私がajaxを使ってそれをする方法があります。onChangeイベントで、リストの値を非表示の入力に渡します。次に、次の方法で入力を投稿します。

var params = $('#hiddenInputId').serialize();
$.post('post.php', params, function(data){
                if(data.match(/^[\r\n\s]*OK=/)) {
                    $('#listOut').html(data.slice(data.indexOf('OK=') + 3));
                } 
                else if(data.match(/^[\r\n\s]*ERRORS=/)) {
                    alert(data.slice(data.indexOf('ERRORS=') + 7));
                }
}); 

#listOutは、リターン選択リストに入力するスパンまたは何かを指します。非表示の入力の送信をリッスンし、正しい値を返すifステートメントをpost.phpページに設定します。

if(isset($_POST['hiddenInputName'])){
    $query = "SELECT * FROM table WHERE something LIKE'" . $_POST['hiddenInputName']."';";
    $result = mysql_query($query) or die(mysql_error());
    echo 'OK=created Select: <select>';
    while($row = mysql_fetch_array($result)){
        echo"<option value='" . $row['field_name'] . "'>" . $row['field_name'] ."</option>";
        }    
    }
    echo "</select>";
}
于 2012-11-12T16:53:53.580 に答える