php 입문 | form 전송 기본 | 리스트 select의 여러 항목 선택
이제 양식의 항목 요소의 기본적인 사용 방법은 알았다. 하지만 아직 설명하지 않은 것이 하나 있다. 그것은 “<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 값은 일반 텍스트가 아닌 텍스트의 배열로 전달하게 되는 것이다.
이 “리스트의 여러 항목 선택"이라는 것은 중요하기 때문에 여기서 잘 이해하도록 하자.
텍스트 대입 연산자
그런데 여기에 또 다른 낯선 기호가 나오고 있다. “.=“이다. 이것은 우변의 텍스트를 왼쪽 변수의 끝에 붙이는 연산 기호이다. 즉, “A .= B"라는 것은 “A = A . B"와 같은 의미이다. 이를 더 간단하게 쓸 수 있게 한 것이다.