私は PHP と MySQL の初心者で、jQuery の経験はほとんどなく、JSON の経験はほとんどありません。フォームにカスケード ドロップダウンを実装しようとしています。
私は2つのテーブルを持っています:
|city|
|city_id INT| - PK
|city VARCHAR (45)|
|state_state_id INT | - FK
|state|
|state_id INT| - PK
|state VARCHAR (25)|
これが私のフォームです:
State:<br />
<select name="state" id="stateName">
<?php foreach($rows as $row): ?>
<option value="<?php echo htmlentities($row['state'],ENT_QUOTES,'UTF-8');?>"><?php echo htmlentities($row['state'],ENT_QUOTES,'UTF-8');?>
</option>
<?php endforeach; ?>
</select>
<br /><br />
City:<br />
<select name="city" id="cityName"></select>
<input type="submit" name="work_order_submit" id="" value="Add Work Order" />
State ドロップダウンに次のクエリを入力します。
$query = "SELECT * FROM state WHERE 1 ORDER BY state";
try{
$stmt = $db->prepare($query);
$stmt->execute();
}catch(PDOException $ex){
//On production remove getMessage.
die("Failed to run query: " . $ex->getMessage());
}
$rows = $stmt->fetchAll();
JSON を実行し、州が選択されたときに州のドロップダウンからカスケードされた値を City ドロップダウンに入力するために作成した jQuery を次に示します。
<script>
function populateCityName(){
$.getJSON('state-names.php', {stateName:$('#stateName').val()},
function(data){
var select = $('#cityName');
var options = select.prop('options');
$('option', select).remove();
$.each(data, function(index, array){
options[options.length] = new Option(array['city']);
});
});
}
$(document).ready(function(){
populateCityName();
$('#stateName').on('change', function(){
populateCityName();
});
});
</script>
state-names.php ファイルのコードは次のとおりです (このコードの前にデータベースに接続します)。
$rows = array();
if(isset($_GET['stateName'])){
$query = "SELECT city FROM city INNER JOIN state ON city.state_state_id = state.state_id WHERE state = :state ORDER BY city";
$query_params = array(":state" => $_GET['stateName']);
try{
$stmt = $pdo->prepare($query);
$stmt->execute($query_params);
}catch(PDOException $ex){
//On production remove .getMessage.
die("Failed to run query: " . $ex->getMessage());
}
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode($rows);
フォームで状態を選択しても何も起こりません。エラーすら出ません。SQL をテストしたところ、問題なく実行され、必要な値が取得されましたが、何らかの理由で、値が都市のドロップダウンにカスケードされていません。
どんな助けでも大歓迎です。
編集:私はより多くのデバッグを行っていくつかのことを実現しているので、これが私がこれまでに見つけたものです。JSON は次のようになります。
[{"city":"Salt Lake City"},{"city":"Toole"},{"city":"Provo"},{"city":"St. George"}]
JSONが正しく機能していることがわかった。州のドロップダウンのドロップダウン選択を、都市のエントリがあることがわかっている州に変更すると、都市のドロップダウンに、実際にあったエントリの数の空白の「オプション」フィールドが表示されました。したがって、以下の回答と、カスケード ドロップダウンと連鎖ドロップダウンに関するさまざまなチュートリアルを使用して、最終的にそれを理解しました。作業コードを含む回答を送信しました。