ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:Webページのフォームのラジオボタンが増えた場合に、次のページのコードをなるべく変更しないで済む方法

Webページにラジオボタンがあり、初期は2個でした。

<form method="POST" action="next.php"> 
   <input type="radio" name="radio1" value="1">Aを希望
   <input type="radio" name="radio1" value="2">Bを希望
</form>

「Bを希望」を選ばれた場合だけ処理したいときは、PHPで次のフォームを作成していた場合、

if ($_POST["radio1"] === "2") {
    // Bの処理
}

と書けば処理ができます。

この状態に対して選択肢が増えて、「Cを希望」を選ばれた場合だけ処理したいとなると、HTMLとPHPはそれぞれ以下のように直しがちです。

<form method="POST" action="next.php"> 
    <input type="radio" name="radio1" value="1">Aを希望
    <input type="radio" name="radio1" value="2">Bを希望
    <input type="radio" name="radio1" value="3">Cを希望
</form>

単純に"2"を"3"に直しています。

if ($_POST["radio1"] === "3") {
    // Cの処理
}

これだけなら、直し忘れは無さそうですが、2つのソースコードを直すのが面倒に感じます。
また、他の箇所で「Cを希望」を選ばれた場合だけ処理したかった場合や、「Cを希望」以外を選ばれた場合だけ処理したかった場合、

f:id:AJYA:20170202224222j:plain
photo credit: xmodulo Chat Box in Etherpad Lite via photopin (license)

特別な値にしてしまう

漏れなく対処できるようにするには、必ず特別な値を設定する方法が考えられます。
valueの値を"99"などの値にしてしまい、次のフォームでは"99"の場合だけ処理するようにします。

<form method="POST" action="next.php"> 
    <input type="radio" name="radio1" value="1"/>Aを希望
    <input type="radio" name="radio1" value="2"/>Bを希望
    <input type="radio" name="radio1" value="99"/>Cを希望
</form>

まず値が変わらなという前提で"99"としています。

if ($_POST["radio1"] === "99") {
    // Cの処理
}

値を定義してしまう

もう一つの方法として、値を定義してしまう方法が考えられます。
共通で読み込むファイルに値を定義して、その値を利用して処理します。

<?php
define("SPECIAL", "3");
?>

定義した値をvalueに設定します。

<form method="POST" action="next.php"> 
    <input type="radio" name="radio1" value="1">Aを希望
    <input type="radio" name="radio1" value="2">Bを希望
    <input type="radio" name="radio1" value="<?php echo SPECIAL;?>">Cを希望
</form>

判定する場合も定義した値との比較となります。

if ($_POST["radio1"] === SPECIAL) {
    // Cの処理
}


特別な値にしてしまうか、値を定義してしまうのか、どちらを選ぶかと考えると、値を定義していまう方を選びます。
値を定義したファイルにコメントで、なぜそのような値を定義したのかを書きます。
ソースコードを見て、定義された値を利用しているということは、なにか理由があったのだと気づきやすいとも考えています。