ローカル環境をmampで作成。試したところ上手く動きました。
$dbh = new PDO("mysql:host=localhost:3306;dbname=test2; charset=utf8", 'root', 'root');
ここは環境によって値が変わります。
HTML + php + Javascript
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
span,
select {
display: inline-block;
margin-right: 30px;
}
</style>
</head>
<body>
<?php
try {
// DBへ接続
$dbh = new PDO("mysql:host=localhost:3306;dbname=test2; charset=utf8", 'root', 'root');
// classがAのgradeを取得するSQL文
$sqlA = "SELECT grade FROM test2 WHERE class = 'A'";
// classがAのsalaryを取得するSQL文
$sqlA_Salary = "SELECT salary FROM test2 WHERE class = 'A'";
// classがBのgradeを取得するSQL文
$sqlB = "SELECT grade FROM test2 WHERE class = 'B'";
// classがBのsalaryを取得するSQL文
$sqlB_Salary = "SELECT salary FROM test2 WHERE class = 'B'";
// SQL実行
$resA = $dbh->query($sqlA);
$resB = $dbh->query($sqlB);
$sqlA_Salary = $dbh->query($sqlA_Salary);
$sqlB_Salary = $dbh->query($sqlB_Salary);
// 取得したデータを連想配列として出力
$aryListA = $resA->fetchAll(PDO::FETCH_ASSOC);
$aryListB = $resB->fetchAll(PDO::FETCH_ASSOC);
$aryListA_Salary = $sqlA_Salary->fetchAll(PDO::FETCH_ASSOC);
$aryListB_Salary = $sqlB_Salary->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo $e->getMessage();
die();
}
// 取得したデータをJavascriptで使える配列として出力
$jsonArr_A = array_column($aryListA, "grade");
$jsonArr_B = array_column($aryListB, "grade");
$jsonArr_A_Salary = array_column($aryListA_Salary, "salary");
$jsonArr_B_Salary = array_column($aryListB_Salary, "salary");
// 接続を閉じる
$dbh = null;
?>
<form>
<div>
<span>クラスA</span>
<label for="gradeA">グレード</label>
<select name="grade" id="gradeA">
<?php
for ($i = 0; $i < count($jsonArr_A); $i++) {
echo "<option value='$i'>$jsonArr_A[$i]</option>";
}
?>
</select>
<span>給料</span><span class="salary">1000</span>
</div>
<div>
<span>クラスB</span>
<label for="gradeB">グレード</label>
<select name="gradeB" id="gradeB">
<?php
for ($i = 0; $i < count($jsonArr_B); $i++) {
echo "<option value='$i'>$jsonArr_B[$i]</option>";
}
?>
</select>
<span>給料</span><span class="salary">500</span>
</div>
</form>
<script>
const gradeA = document.getElementById("gradeA");
const gradeB = document.getElementById("gradeB");
const select = (elm, arr) => {
const option = elm.getElementsByTagName("option");
elm.addEventListener("change", (e) => {
const targetValue = e.target.value;
elm.nextElementSibling.nextElementSibling.innerText = arr[targetValue];
});
}
select(gradeA, <?php echo json_encode($jsonArr_A_Salary); ?>);
select(gradeB, <?php echo json_encode($jsonArr_B_Salary); ?>);
</script>
</body>
</html>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。