본문 바로가기

코딩공부/WEB2 - PHP

[10] PHP에서 FROM과 GET, POST

서버로 데이터를 전송할 때 사용하는 HTML의 기능

 

input 태그

  •  사용자로부터 정보를 입력받는 태그
  •  type="text" : 사용자로부터 텍스트 정보를 입력받는다.
  • name="xxx" : input 태그에 입력한 정보를 서버 쪽으로 xxx 이라는 이름으로 전송
  •  placeholder=" " : 입력창에 표시할 문자
  •  type ="submit" : input 태그에 담은 사용자 정보를 서버로 전송
    서버의 어느 페이지로 전송할 것인지 웹브라우저한테 알려줘야 한다. input 태그를 감싸는 form태그를 만들어 준다.
  • value="xxx" : 기본값(default value)를 설정
  • type="hidden" : input 태그에 담은 정보를 숨겨서 서버로 전송. 사용자에게는 노출하지 않으면서 서버로 데이터를 전송

 

textarea 태그

  • 사용자로부터 여러 줄을 입력할 수 있는 text 입력 폼
  • name="xxx" : textarea 태그에 입력한 정보를 서버 쪽으로 xxx 이라는 이름으로 전송

 

form 태그

  •  action="xxx.php" : 데이터를 전송할 URL
  •  method="GET | POST" : 데이터를 전송할 방식
    GET : url에 정보를 담아서 전송, POST : header에 정보를 담아서 전송
    method를 지정하지 않으면 default로 GET 방식 전송을 한다.

 

GET 방식 전송

사용자가 태그에 입력한 각각의 값에 name 속성의 값을 이름으로 해서, submit 버튼을 클릭하면, submit 버튼이 속해있는 form 태그의 action 속성이 가리키는 URL로 웹브라우저가 url뒤에 ?속성1=값1&속성2=값2.. 형식으로 만들어서 페이지를 이동한다.

=> form 태그는 "사용자가 입력한 정보를 url 파라미터로 만들어 내는 기계"

 

 

1. form.html 파일 생성

제출(submit) 버튼을 클릭하면, URL이 다음과 같이 변한다.

form.php?title=PHP

<!-- form.html -->
<!doctype html>
<html>
  <body>
    <form action="form.php">
      <p><input type="text" name="title" placeholder="Title"></p>
      <p><input type="submit"></p>
    </form>
  </body>
</html>

 

2. form.php 파일 생성

URL을 통해서 "title이라는 값이 'PHP'이다"라는 url 파라미터가 넘어왔다.

이 url 파라미터는 $_GET['title']로 받을 수 있다.

# form.php
<?php
  echo $_GET['title'];
?>

 

3. textarea 태그 추가

 

4. php에서 파일을 저장할 때 사용하는 함수 "file_put_contents()"를 이용해서 사용자가 입력한 내용을 파일로 저장

file_put_contents(파일경로/파일이름 , 파일의 내용)

<?php
  echo var_dump($_GET);
  file_put_contents('./data/'.$_GET['title'], $_GET['description']);
?>

 

데이터를 서버로 전송할 때, url에 파라미터에 정보가 포함되는 방식은 좋은 방식이 아니다.

 

※ GET 방식의 취약점

(1) 아래 URL을 다른 사람과 공유하기 위해 복사하여 전송하면, 다른 사용자는 URL을 클릭했을 뿐인데 주소로 방문하면서 서버에 데이터가 생성이 돼버리는 문제가 발생할 수 있다.

(2) url 파라미터에 사용자가 입력한 정보가 그대로 노출되어 보안적으로 취약하다.

http://172.16.9.171/web2_php/form.php?title=PHP&description=PHP+is.....

 

이렇게 form.php 와 같은 php 애플리케이션에게 url을 통해서 데이터를 전송하는 방식은 사용자가 서버로 데이터를 보낼 때, 지울 때는 사용하면 안 된다. 

아래와 같이 id 파라미터를 통해서 특정 페이지에 접근하도록 하는 즉, 어떠한 컨텐츠를 다른 사람에게 공유할 때 적합한 방식이다.

http://172.16.9.171/web2_php/index.php?id=bread

url 파라미터를 통해서 서버 쪽에 데이터를 전송하는 것은 "북마크"에서 사용하기 적합한 방식이다.

 

 

form 태그의 method 속성 값으로 "데이터를 전송하는 방식"을 정해주면 된다.

method="POST"

 

 

POST 방식 전송

5. POST 방식으로 전송

PHP는 POST 방식으로 전송된 데이터를 $_POST[] 라는 변수에 배열의 형태로 담아서 제공한다.

<!-- form.html -->
<!doctype html>
<html>
  <body>
    <form action="form.php" method="POST">
      <p><input type="text" name="title" placeholder="Title"></p>
      <p><textarea name="description"></textarea></p>
      <p><input type="submit"></p>
    </form>
  </body>
</html>
# form.php
<?php
  // echo var_dump($_GET);
  // file_put_contents('./data/'.$_GET['title'], $_GET['description']);
  echo var_dump($_POST);
  file_put_contents('./data/'.$_POST['title'], $_POST['description']);
?>

 

전송 후 url 파라미터에는 입력한 정보가 보이지 않고, [Network] > "form.php" > [Headers] > [Form Data] 에 사용자가 입력한 속성값이 들어가 있는 것을 확인할 수 있다.

 

 

'코딩공부 > WEB2 - PHP' 카테고리의 다른 글

[12] PHP 글 수정 기능 구현  (1) 2019.09.26
[11] PHP 글 생성 기능 구현  (0) 2019.09.26
[9] PHP 함수 생성  (0) 2019.09.26
[8] PHP 제어문 - 조건문, 반복문  (0) 2019.09.25
[7] PHP 함수 - Built in Function  (0) 2019.09.25