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"와 같은 의미이다. 이를 더 간단하게 쓸 수 있게 한 것이다.




최종 수정 : 2021-08-27