複数の選択をするページ

2年、3年の2つのHRを選択する

元のデータは前と同じ 2to3nen.txt です。元のHRと新HRの2つを選択して両方を含むデータを抽出します。

2年、3年それぞれから1つ選択できます。

yet yet ⇦動作確認用$shrと$nhrの値

どれか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