元のデータは前と同じ 2to3nen.txt です。元のHRと新HRの2つを選択して両方を含むデータを抽出します。
2年、3年それぞれから1つ選択できます。
どれか1つ選択のボタンはラジオボタンといいます。nameの値が同じものから一つ選ぶことができます。actionの先は自分自身。今回はselect2radio.phpという名前にしました。
<form action="select2radio.php method="post"> <p> <label><input type="radio" name="hr" value="2A">2A</label> <label><input type="radio" name="hr" value="2B">2B</label> <label><input type="radio" name="hr" value="2C">2C</label> <label><input type="radio" name="hr" value="2D">2D</label> <label><input type="radio" name="hr" value="2E">2E</label> <label><input type="radio" name="hr" value="2F">2F</label> <label><input type="radio" name="hr" value="2G">2G</label> <label><input type="radio" name="hr" value="2H">2H</label> <label></p> <p> <label><input type="radio" name="nhr" value="3A">3A</label> <label><input type="radio" name="nhr" value="3B">3B</label> <label><input type="radio" name="nhr" value="3C">3C</label> <label><input type="radio" name="nhr" value="3D">3D</label> <label><input type="radio" name="nhr" value="3E">3E</label> <label><input type="radio" name="nhr" value="3F">3F</label> <label><input type="radio" name="nhr" value="3G">3G</label> <label><input type="radio" name="nhr" value="3H">3H</label> </p> <p><button name="event" value="button">送信</button></p> </form>
今回の場合、基本的にはbuttonにname/valueは必要ないのですが、目次のリンクボタンから初めてこのページに来た場合と、buttonをクリックしてきた場合に動作を変えたかったので name="event" value="button" と入れています。どう動作するかはプログラムを見てから解説します。
PHPプログラムはこれです。
<table>
<?php
$fp = fopen("2to3nen.txt","r");
if (isset($_POST["event"])){
$shr = (isset($_POST["hr"])) ? $_POST["hr"] : "any" ;
$nhr = (isset($_POST["nhr"]))? $_POST["nhr"]: "any" ;
}else{
$shr="yet";
$nhr="yet";
}
print "<p class=\"check\">$shr $nhr ⇦動作確認用\$shrと\$nhrの値</p>";
while(!feof($fp)){
$line = fgets($fp);
if (trim($line) != null){
list($hr,$no,$sei,$mei,$seib,$ysei,$ymei,$newhr,$newno) = explode("\t",$line);
if (($hr === $shr or $shr === 'any') and ($newhr === $nhr or $nhr === 'any')){
print "<tr>\n";
print "<td>$hr</td><td>$no</td><td>$sei</td><td>$mei</td>";
print "<td>$seib</td><td>$ysei</td><td>$ymei</td>\n";
print "<td>$newhr</td><td>$newno</td>\n";
print "</tr>\n";
}
}
}
fclose($fp);
?>
</table>
2年のHRも3年のHRも共に1クラスを選択するだけ、つまり元2Aで新3Bになる生徒というのだけならもう少し単純にできます。しかし、どちらかを選択しないことで、元2Aである生徒全部、とか新3Bになる生徒全部という選択を期待するのではないかと考えて拡張しました。ついでに「何でもよい」という選択肢も作って「どちらかを選択しない」ことと同じ動作にしました。また、別のページからリンクで来たときには、だれも表示されないようにしました。
その動作を表にしたものが以下です。POSTで送信されるデータの空欄はisset()がFALSEになることを表しています。
| POSTで送信されるデータ | 変数に代入される値 | ||||
|---|---|---|---|---|---|
| event | hr | nhr | $shr | $nhr | |
| 目次から来た場合 | yet | yet | |||
| 選択しないで送信した場合 | event="button" | any | any | ||
| 2Aだけ選択して送信した場合 | event="button" | hr="2A" | 2A | any | |
| 2Bとanyを選択して送信した場合 | event="button" | hr="2A" | nhr="any" | 2B | any |
| 2Cと3Dを選択して送信した場合 | event="button" | hr="2A" | nhr="3D" | 2C | 3D |