PHP入門 | form送信の基本 | selectリストで複数項目を選択する

フォームの各項目要素の基本的な使い方はわかった。しかし、まだ説明していないものが1つある。それは「<select>で複数項目を選択する」方法である。

<select>によるリストは、multipleという属性を設定すると複数の項目を選択できるようになる。この場合、選択された項目をどのように確認すればよいのだろうか。通常の方法ではうまくいかない。少しだけテクニックが必要になる。

簡単な例を見てみよう。

<?php
    if ($_POST != null){
        $arr = $_POST['list1'];
        $result = "";
        foreach($arr as $item){
            $result .= $item . "\n";
        }
    } else {
        $result = "入力してください。";
    }
?>
<!DOCTYPE html>
<html lang="ko">
    <head> 
        <meta http-equiv="Content-Type"
            content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <pre><?php
            echo htmlspecialchars($result);
        ?></pre>
        <form method="post" action="./index.php">
            <select name="list1[]" size="5" multiple>
                <option value="Windows">Windows</option>
                <option value="Mac OS">Mac OS</option>
                <option value="Linux">Linux</option>
                <option value="Android">Android</option>
                <option value="iOS">iOS</option>
            </select>
            <input type="submit">
        </form>
    </body>
</html>

フォームの項目を適当に複数選択して送信してみよう。選択された項目が上に出力される。

ここでは$arr = $_POST['list1'];のようにして、選択したリストの値を取得している。そして、次のような処理を行っている。

foreach ($arr as $item) {
    $result .= $item . "\n";
}

このようにforeachを使って、$arrの値を順番に取り出して処理している。つまり、$arrは配列である。選択された項目がすべて配列として渡されるのだ。

この配列としてデータを受け取るためには、フォーム側にも設定をしておかなければならない。<select>タグの部分をよく見てみよう。

<select name="list1[]" size="5" multiple>

複数項目を選択できるようにmultipleという属性が追加されている。ただし、ポイントはそれだけではない。名前がname="list1[]"と指定されている。"list1"ではなく"list1[]"である。このように書くことで、このlist1の値は通常のテキストではなく、テキストの配列として渡されるようになる。

この「リストで複数項目を選択する」方法は重要なので、ここでしっかり理解しておこう。

テキスト代入演算子

ここでもう1つ、見慣れない記号が出てきている。.=である。これは右辺のテキストを左側の変数の末尾へ追加する演算記号だ。つまり、A .= BA = A . Bと同じ意味である。それをより簡単に書けるようにしたものだ。