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 .= BはA = A . Bと同じ意味である。それをより簡単に書けるようにしたものだ。