PHP
HTML
バリデーション

【PHP】定義値(不正な値)のバリデーションの実装方法

定義値(不正な値)のバリデーション

↓こんなかんじの投票型のフォームがあるとする。(好きな動物は何ですかみたいな)
form.png

もし、ツールとかでinput=valueを想定してない値(例えばvalue="lion"とか)に書き換えられた際に不正値として検知する必要がある。
フレームワーク使ってたら簡単なんでしょうけど自前で実装するときどう書けばいいかなって思って書いてみた。

実装例

form.html
<!DOCTYPE html>
<html>
    <head>
        <title>Animals</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <form method="post" action="/****.php">
        <h1>フォーム</h1>
        <button type="submit" name="animal" id="btn_dog" value="dog">いぬ</button>
        <button type="submit" name="animal" id="btn_cat" value="cat">ねこ</button>
        <button type="submit" name="animal" id="btn_other" value="other">その他</button>
        </form>
    </body>
</html>
Validation.php
/**
 * animal項目の定義値
 *
 * @var array
 */
private $fillableValuesOfAnimals = [
    'いぬ'   => 'dog',
    'ねこ'   => 'cat',
    'その他' => 'other',
];


/**
 * animal項目のvalueに対する選択項目の定義値があれば定義名を返す
 *
 * @param string $animal
 * @return string|false
 */
public function retrieveAnimalsByValue(string $animal)
{
    return array_search($animal, $this->fillableValuesOfAnimals);
}

例えばですけど、
retrieveAnimalsByValue($post->animal)
こんな感じでvalueを投げて、もしvalueが定義してある値なら$fillableValuesOfAnimalskeyが返ってきて、
定義されていない値(不正な値)ならfalseが返ってきます。
これでfalseじゃなければ正常値として判定する、って処理を書けば簡易ではあるが不正な値の検知が可能になる。

・・・

もっといい方法あると思うんだけどいかんせん思いつかないんす。うーむ