php 입문 | form 전송 기본 | 양식(form) 송신

서버 측 프로그램을 작성한다는 것은 “클라이언트와 서버간에 교환하기” 위한 것이다라고 해도 좋을 것이다. 여기서 클라이언트란 서버에 액세스하는 프로그램이다. 즉, Web 브라우저을 말한다. 브라우저와 서버간에 다양한 정보를 주고 받으면서 프로그램이 동작하는 것을 만드는데, 서버 측 프로그램은 필요한 것이다. 브라우저 안에서만 동작하는 경우에는 JavaScript만으로 충분하다. 서버 사이드 프로그램은 불필요하다.

그런데, 클라이언트와 서버 사이에 교환할 경우, 가장 일반적으로 사용되는 것이 “양식(form)“이다. 모두에게 익숙한 HTML에서 입력 필드와 버튼 등을 표시하여 전송하는 것이다. 양식을 준비하고 이를 서버에 전송하고 전송된 값을 서버 프로그램에서 처리해서 다시 클라이언트로 결과를 반환한다. 이렇게 Web 응용 프로그램은 동작한다.

그럼 PHP를 사용하여 양식에서 보내온 데이터를 처리해 보자. 아래와 같이 간단한 예제를 작성해 보겠다.

<?php
    $str = $_POST['text1'];
    if ($str != null){
        $result = "당신은 '{$str}'이라고 썼습니다.";
    } else {
        $result = "아무것도 쓴 것이 없습니다.";
    }
?>
<!DOCTYPE html>
<html lang="ko">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
        <title>sample page</title>
    </head>
    <body>
        <h1>Hello PHP!</h1>
        <div><?php echo $result; ?></div>
        <form method="post" action="./index.php">
            <input type="text" name="text1">
            <input type="submit">
        </form>
    </body>
</html>

이를 Web 브라우저에서 액세스 해보자.

여기에서는 다음과 같은 형태로 양식을 준비하고 있다.

  • <form> 태그

    • method는 “post”, action은 “./index.php"이다. method라는 것은 전송의 방식을 보여준다. 이는 HTTP라는 프로토콜의 “GET” 또는 “POST"중 하나를 지정한다. GET이라는 것은 보통 페이지의 내용을 받기 위한 것이고, POST가 데이터를 쓰기 위한 것이다. 어떤 것으로도 보낼 수 있지만, 여기에서는 POST를 지정한다.
    • 또한 action이라는 양식의 송신처를 지정한다. 여기에서는 이 index.php 파일 자체 전송한다. 즉, 양식을 송신하면 서버에서 다른 이 파일을 읽고, 거기서 보내온 양식을 처리한다는 것이다.
  • <nput type="text"> 태그

    • 텍스트 입력하는 태그이다. 여기에서 name=“text1"로 지정하고 있다. 이는 중요하다. 양식을 서버로 전송했을 때, 전송된 데이터는 이 name으로 식별되기 때문이다.
  • <input type = "submit"> 태그

    • 전송 버튼이다. 이는 특히 name과 id 등의 설정은 필요 없다. 전송 외에는 서버 측에 영향이 미치는 것이 없기 때문이다.

송신 양식과 $_GET, $_POST

그럼 전송된 폼의 내용은 어디서 어떻게 받고 있는가? 받은 부분은 파일이 시작하는 부분의 태그 내에 있다. 여기에서 다음과 같은 처리를 하고 있다.

$str = $_POST['text1'];

$_POST라는 것은 보낸 양식의 내용을 저장하는 배열이다. 배열, 기억하고 있는가? 많은 값을 한꺼번에 관리할 수 있는 특별한 변수이다. 배열은 인덱스에 관리되고, 연관 배열은 key라는 값으로 관리된다. 결국은 $_POST는 “연관 배열"이라는 것이다.

이번에는 POST으로 보냈기 때문에 이 $_POST에 내용이 정리되었지만, 만약 GET으로 전송한 경우에는 $_GET 배열에 정리된다. 이 2가지 연관 배열이 양식의 내용을 관리하기 위한 것이다.

이 배열에는 폼의 내용이 name으로 지정된 이름으로 정리되고 있다. 여기에서 name=“text1"이라는 속성의 태그가 준비되어 있기에 $_POST[ 'text1']와 같은 형태로 값이 저장되어 있는 것이다.

주의할 점은 이 $_GET, $_POST와 같이 PHP의 시스템에서 제공하는 배열은 “값을 꺼낼 수 밖에 없다"는 점이다. 예를 들어, 이 값을 다시 작성해서 양식에 표시되는 값을 설정하려고 어떻게 생각을 하더라도 그건 무리이다. 이것은 단지 “전송된 데이터를 전달할 뿐"인 거라고 생각해야 한다.

텍스트를 써넣는 것에 대해(Variable interpolation)

여기에서는 사실 또 하나의 태크닉을 사용하고 있다. 시작 부분의 스크립트에서 $result에 텍스트를 설정하는 부분을 보도록 하자.

$result = "당신은 '{$str}'이라고 썼습니다.";

이런 식으로 적혀 있다. 이 {$str}라는 것은 변수 $str 값을 텍스트에 넣고 있는 것이다. 즉, 이 부분에 $str 내용이 덧붙여지지 텍스트가 만들어 진다.

큰 따옴표(")로 묶인 텍스트는 이처럼 변수를 넣을 수 있다. 즉, 이렇게 하면 다양한 변수 등을 사용하여 텍스트를 생성할 있다는 것이다.

그럼 반대로 $str이라는 텍스트를 출력시키고 싶은 경우에는 작은 따옴표(’)를 사용하여 텍스트를 만든다. 작은 따옴표의 텍스트에는 써 넣을 수 없다. 모두 쓴대로 텍스트를 얻을 수 있다.

echo 'Variables do not $str';

예를 들면, 위와 같이 하면 화면에 “Variables do not $str"이 그대로 화면에 표시된다.

이 텍스트의 2가지의 작성법에 대한 차이는 확실히 기억해 두자.