본문 바로가기

웹프로그래밍

[PHP 프로그래밍 입문 7장] HTTP와 POST, GET 방식

HTTP = 웹 서버와 웹 브라우저가 서로 소통하기 위한 프로토콜, 통신 규약

<?php
echo $_GET['id'];
?>

브라우저 창에 id 값에 어떤 값을 입력하느냐에 따라서 출력이 달라진다. 

<?php
echo "Welcome, ".$_GET['id'];
?>

 

hello.php가 우리의 입력값에 따라서 다른 출력값을 보여주는 유저와 상호작용하는 애플리케이션이 되었다. 

url에서 ? 앞까지는 hello.php를 찾아내는 주소

? 뒤는 주소로 전달되는 값이 들어오는 영역

값은 값 이름 = 값 

값과 값을 구분할 때는 &

? 값이름 = 값 & 값이름2 = 값

<?php
//id 값 , password 
echo $_GET['id'].",".$_GET['password'];
?>

 

브라우저에 값을 입력해서 전달하는 것은 매우 귀찮은 일

따라서 HTML 소속인 form을 사용한다. 

 

 

<html>
<body>
	<form method="get" action="hello.php">
		id: <input type="text" name="id" />
		password: <input type="text" name="password" />
		<input type="submit" />
	</form>
</body>
</html>

 

제출하기 버튼을 클릭하면? url 주소가 변경되고 값이 전달된다. 

 

<?php
//id 값 , password 
echo $_GET['id'].",".$_GET['password'];
?>

hello.php로 이동한 근거는 ? 1.html의 action = "hello.php"

제출 버튼을 눌렀을 때 form 태그 안에 있는 내용을 어떤 url로 보낼 것인가?를 action에 지정하며, 

어떤 방식으로 보낼 것인지를 method에 지정한다. 

 

 

form에 대한 정보가 담긴 html 파일과

form에 대한 정보를 받아서 출력해주는 php 파일이 있다. 

 

브라우저에서 url 입력 후 enter 땅 침! (1.html)

인터넷을 거쳐서 웹 서버에 도착함!

서버 컴퓨터에 저장되어있는 html 문서를 읽고 요청한 브라우저로 쏴줌

웹 브라우저는 html 문서를 받아서 해석 후 화면 구성!( 폼 구성 등..)

사용자가 웹 브라우저에 값을 입력하고 제출 버튼을 누르면 다시 웹 서버를 찾아감

(

app.php?name=egoing&password=1111이란 정보로 웹 서버가 받음

웹 서버는 php 엔진을 부르고, app.php 파일 열어서 해석해달라고 지시함

php 엔진은 app.php를 열고 웹 서버가 name=egoing&password=1111란 정보도 줌

php 엔진은 $_GET에 얻은 정보를 해석 후 웹 서버에게 돌려주고, 웹 서버는 그것을 취합해서 웹 브라우저에게 다시 쏴준다.

)

-> 결론적으로 웹 브라우저에 밑의 내용이 나오게 됨 

GET 방식

url 뒤에 ?로 서버 쪽에 데이터 전달하는 것

url 상에 서버로 전달하는 데이터가 포함되어있다. 

 

POST 방식

url에 적지 않아도 서버 쪽으로 데이터를 전달할 수 있다.

 

HTML 파일은 데이터를 전송하는 것이고,

PHP 파일의 역할은 전송된 데이터를 수신하는 역할이다. 

POST 방식으로 전달하기 위해서는 전송 측과 수신 측 모두 POST 방식으로 수정이 필요하다. 

METHOD: 데이터 전송 방식

<html>
<body>
	<form method="post" action="hello.php">
		id: <input type="text" name="id" />
		password: <input type="text" name="password" />
		<input type="submit" />
	</form>
</body>
</html>
<?php
//id 값 , password 
echo $_POST['id'].",".$_POST['password'];
?>

 

 

url 뒤에 아무것도 붙지 않는 것이 POST 방식임을 알 수 있다. 데이터가 어디로 들어가는지 감춰지게 되므로 보안성이 높다. 

 

웹 클라이언트와 웹 서버 사이에 GET, POST 방식 어떻게 이루어지는지 정리

 

클라이언트가 웹 브라우저를 통해 PHP 스크립트가 있는 웹 페이지에 접근하면, 웹 서버는 PHP 인터프리터를 사용하여 PHP 스크립트를 실행하고, 그 결과를 웹 브라우저에게 전송합니다.

 

1. 클라이언트가 만든 html 파일이 있잖아. 

그 html 파일을 브라우저 창에 url로 입력하면 웹 서버에 요청되고, 웹 서버가 웹 브라우저에게 보내줘서 입력 폼 등이 있는 html 파일이 눈에 보이게 돼

 

2. 눈에 보이는 html 파일의 입력 폼에 클라이언트가 값을 입력하고 제출 버튼을 눌러

 

3. form 태그에 설정해둔 action으로 post나 get 중 하나의 방식으로 웹 브라우저에 입력한 값이 웹 서버에게 보내지게 돼

post 방식이라면 웹 브라우저의 url 뒤에 값이 붙지 않고, 

get 방식이라면 웹 브라우저의 url 뒤에 값이 붙어

 

4. 웹 서버에서는 $_GET이나 $_POST 변수로 받게 되고, 웹 클라이언트에서 받은 값을 해석하기 위해 php 해석기를 호출하게 돼

 

5. php 해석기를 통해 해석한 뒤에 php 파일의 내용을 웹 클라이언트에게 다시 전송함으로써 사용자의 눈에 보일 수 있게 돼

 

  1. 웹 브라우저의 요청과 서버의 응답:
    • 클라이언트가 웹 브라우저에서 URL을 입력하면 해당 URL에 대한 요청이 웹 서버에 전송됩니다.
    • 웹 서버는 받은 요청을 처리하여 클라이언트에게 응답합니다. 이 응답은 HTML 문서, 이미지, CSS, JavaScript 파일 등의 리소스로 이루어질 수 있습니다.
  2. HTML 폼과 요청 전송:
    • HTML 폼에서 사용자가 입력한 데이터는 사용자가 지정한 action 속성의 URL로 전송됩니다.
    • <form> 요소의 method 속성은 데이터를 전송하는 방식을 결정합니다. (GET 또는 POST)
  3. 서버에서의 데이터 수신과 PHP 해석:
    • PHP는 서버 측에서 실행되기 때문에, 클라이언트의 요청에 포함된 PHP 파일은 서버에서 실행됩니다.
    • $_GET 또는 $_POST 등의 슈퍼글로벌 변수를 사용하여 클라이언트에서 전송된 데이터에 접근할 수 있습니다.
    • PHP는 이 데이터를 처리하고 동적인 HTML을 생성하여 클라이언트에게 응답합니다.
  4. PHP의 역할과 웹 서버와의 협력:
    • PHP 파일은 웹 서버에 의해 실행되기 때문에, 웹 서버와 PHP 인터프리터가 함께 동작해야 합니다.
    • 웹 서버가 PHP 파일을 발견하면, 해당 파일을 PHP 인터프리터에 전달하여 실행합니다.
    • 실행된 결과는 다시 웹 서버를 통해 클라이언트에게 전송되어 웹 브라우저에서 렌더링됩니다.

1. 서버가 요청을 받고 웹 클라이언트의 html 파일을 화면에 보여준다. 

 

2. input에 값을 입력한 뒤 제출하기 버튼을 클릭하면 hello.php 서버로 값이 전달되고, php 해석기에 의해서 받아진 값을 토대로 php 파일을 해석하여서 웹 브라우저에게 보여준다. 

get 방식으로 보내졌기 때문에 url 주소 뒤에 데이터 값이름과 값이 붙는다. 

post 방식은 url 뒤 ? 에 값이름이나 데이터 값 붙지 X

 

 

GET, POST 방식 + 조건문 part

html 파일의 input 태그에 k8805 값 입력하고 제출 버튼 클릭하면 11.php 파일의 $_GET['id'] 값이 k8805가 되고, 

if 문이 false가 되므로 웹 브라우저에는 wrong이 출력된다.

<html>
<body>
	<form method="get" action="hello.php">
	    <input type="text" name="id" />
		<input type="submit" />
	</form>
</body>
</html>
<?php
if($_GET['id']=='egoing'){
	echo 'right';
}
else{
	echo 'wrong';
}
?>

right 출력
wrong 출력

 

중첩 if-else문(조건문 중첩)

html 파일에서 서버 php 파일로 post로 data 전달하기 때문에 변수명이 $_POST['name 값']이어야 한다.

또한, POST 방식이기 때문에 url 뒤에 data가 붙지 않는다. 

<html>
<body>
	<form method="post" action="hello.php">
	    id: <input type="text" name="id" />
	    password: <input type="text" name="password" />

		<input type="submit" />
	</form>
</body>
</html>
<?php
if($_POST['id']==='egoing'){
	if($_POST['password']==='11'){
	echo 'right';}
	else{
		echo 'password wrong';
	}
}

else{
	echo 'id wrong';
}
?>

wright 출력
password wrong 출력
id wrong 출력

 

 

POST 방식

폼 양식 생성하기

<input> 태그는 name하고 type에 따라서 버튼이 되거나 값 입력 양식이 됨

<html>
<body>
	<form method="post" action="hello.php">
	    <input type="text" name="name1" />
	    <br><br>
	    <input type="submit" value="확인"> 
	</form>
</body>
</html>

폼 양식에 입력된 데이터 처리하기

<?php
$name = $_POST['name1'];
echo $name."님 반갑습니다~~";
?>

아이디와 비밀번호 입력 창 생성

<html>
<body>
	<form method="post" action="hello.php">
	     <ul>
	     	<li>
	     		id: <input type="text" name="id" />
	     	</li>
	     	<li>
	     		password: <input type="text" name="password" />
	     	</li>
	     	<li>
	     		<input type="submit" value="submit" />
	     	</li>
	     </ul>
	   
	</form>
</body>
</html>

 

아이디와 비밀번호로 입력된 데이터 처리

<?php
$id = $_POST['id'];
$password = $_POST['password'];

echo "아이디 : $id<br>";
echo "비밀번호 : $password";
?>

 

텍스트 입력 창 생성 

textarea는 type 설정 없이 name만 설정해주면 됨

<html>
<body>
	<form method="post" action="hello.php">
		글 내용:<br>
	    <textarea name="content"></textarea>
	     <br><br>
	     <input type="submit" value="check"/>
	</form>
</body>
</html>

텍스트 영역에 입력된 데이터 처리

<?php
$content = $_POST['content'];

echo "글 내용 : $content";
?>

라디오 버튼 생성하기

radio 버튼은 하나가 checked되어있어야 하고, value와 name과 type=radio가 설정되어있어야 한다. 

name은 쌍인 radio가 같은 값을 가지고, value만 다르게 가진다. 

<html>
<body>
	<form method="post" action="hello.php">
		<ul>
			<li>gender: male <input type="radio" name="gender" value="male" />
                  female <input type="radio" name="gender" value="female" checked />
			</li>
			<li>email: yes <input type="radio" name="email" value="yes" />
                no <input type="radio" name="email" value="no" checked/>
			</li>
			<li><input type="submit" value="check"/></li>

		</ul>

	</form>
</body>
</html>

 

<?php
$gender = $_POST['gender'];
$email = $_POST['email'];

echo "성별 : $gender<br>";
if($email == "yes"){
	echo "이메일 : 수신";

}
else{
		echo "이메일 : 비수신";

}

?>

 

 

체크박스에서 선택된 데이터 처리

checkbox input의 name을 다 같게 설정해야 됨. 왜냐면 중복 선택이 가능하기 때문에 .

취미로 예시를 들자면 배열인 hobby[]라고 쓰면 됨

$_POST[]는 " " 큰 따옴표로 묶지 말아라

 

선택박스에서 선택된 데이터 처리

select option인데 

select에 name 설정하고 option에 value 설정한 뒤에 php 파일에서 select에 설정한 name $_POST[' '] 이라고 하면 내가 선택한 option의 value 값이 가져와짐

 

hidden으로 입력된 데이터 처리

type=hidden으로 웹 브라우저 input 설정해놔도 php 파일에서 그 value 값을 가져올 수 있다.

 

파일 업로드

form 태그의 enctype 설정과 파일 업로드하려는 input의 type="file" 설정!!

<html>
<body>
	<form enctype="multiple/form-data" method="post" action="hello.php">
		<ul>
		<li><input type="file" name="upload"/></li>
		<li><textarea name="comment"></textarea></li>
		<input type="submit" value="check"/>

		</ul>

	</form>
</body>
</html>

파일 업로드 처리하기

보통의 값은 PHP 의 배열 $_POST에 값이 대입되었다.

하지만 파일 전송 시에는 배열 $_FILES에 값이 대입되게 된다.

배열 $_FILE['imgFile']가 가지고 있는 정보를 보면 name 인덱스에 ironman.jpg 라는 업로드한 파일명이 존재하며, type 인덱스에는 image/jpeg가 존재한다. 이는 이미지 파일이고 확장자는 jpg임을 의미한다. 그리고 tmp_name 인덱스에는 우리가 업로드한 파일이 임시로 저장된 폴더와 파일명을 보여준다. 아직 서버에 업로드하는 프로그래밍은 하지 않았으나 이미 이 작업만으로 서버의 임시 파일을 저장하는 공간에는 파일이 업로드된 상태인것이다.

 

 임시로 업로드된 파일을 원하는 장소에 옮기는 작업이 필요하다.

이를 가능하게 해주는 함수는 move_uploded_file() 이다.

move_uploaded_filr()에는 두 개의 아규먼트가 들어간다.

첫 번째 아규먼트로 업로드한 파일의 임시 위치, 두 번째 아규먼트에는 옮길 위치 및 파일명이다.

 

1.html에서 이미지 업로드하면 해당 경로로 저장된다. 

 

 

윈도우에서는 경로 구분자로 역슬래시(\)를 사용하는 것이 일반적이지만, -> \\

URL에서는 슬래시(/)를 사용하는 것이 좋습니다.

file_dir의 맨 마지막에 있는 경로를 img 태그의 src 앞에 추가해준다. 이때는 \이게 아닌 / 슬래시를 사용해야 한다.!!!

<?php
//너가 1.html에서 업로드한 이미지 저장할 위치
$file_dir = "C:\\Users\\samsung_\\Desktop\\XAMP\\htdocs\\img_folder\\";
$file_path = $file_dir.$_FILES["upload"]["name"];//옮길 파일명
$file_type= $_FILES["upload"]["type"]; //file의 확장자명
$file_size=$_FILES["upload"]["size"]; //업로드된 파일 크기
$file_tmp_name = $_FILES["upload"]["tmp_name"];//서버에 저장된 파일명

//서버에 임시로 저장된 파일의 임시 위치에서 옮길 파일명으로
if(move_uploaded_file($_FILES["upload"]["tmp_name"], $file_path )){
//img 태그에 나타낼 수 있는 파일 src 경로
$img_path = "img_folder/" . $_FILES["upload"]["name"];
}
?>

<ul>
<li><img src="<?= $img_path ?>"></li>
<li><?= $file_path ?></li>
<li><?= $file_type ?></li>
<li><?= $file_size ?></li>
<li><?= $file_tmp_name ?></li>

<li><?= "<br>".$_POST['comment']?></li>

</ul>

 

GET 방식

웹 브라우저 주소창에서 data 전달함

URL ? 키1=값1&키2=값2

 

GET 방식으로 데이터 전달

<?php
$table = $_GET['table'];

if($table == 'free')
{
	$board_title="자유게시판";
}
else{
		$board_title="문의게시판";

}

?>
<h1><?= $board_title?></h1>

링크 시 GET 방식으로 데이터 전달

<?php
//자유 게시판과 질의응답 게시판
$table1 = "free";
$table2 = "qna";
?>
<h3>자유 게시판</h3>
<a href="board_view.php?table = <?=$table1?>&type=list">목록보기 </a>
<a href="board_view.php?table=<?= $table1?>&type=write">글쓰기</a>
<h3>질의응답 게시판</h3>
<a href="board_view.php?table = <?=$table2?>&type=list">목록보기 </a>
<a href="board_view.php?table=<?= $table2?>&type=write">글쓰기</a>

 

GET 방식으로 전달받은 데이터 처리

<?php
$table = $_GET['table'];
$type=$_GET['type'];

if($table == "free"){
	$board_title="자유 게시판";
}
if($table == "qna"){
	$board_title="질의응답 게시판";
}
if($type == "list"){
	$board_type="목록보기";
}
if($type == "write"){
	$board_type="글쓰기";
}
echo ">".$board_title."||".$board_type;
?>