본문 바로가기
Infra & Security Eng/Programming

[PHP] - HTML 폼 데이터 전송하기: 라이도 버튼 & 체크버스 연동

by 엔지니어 E 2026. 2. 13.
반응형

 

GET방식  vs POST방식  한눈에 보기

구분 GET POST
전송 방식 URL 주소에 붙여서 보냄 메시지 본문(Body)에 담아 보냄
노출 여부 주소창에 다 보임 (노출 O) 주소창에 안 보임 (노출 X)
용도 단순 조회 (검색, 페이지 이동) 데이터 저장/변경 (로그인, 글쓰기)
제한 전송량 제한 있음 (짧음) 제한 없음 (대용량 가능)

 

실습 하기

4-1.html <-> 4-1.php
a.php <-> b.php

4-1.html (데이터를 입력하는폼)

사용자로부터 값을 입력받아 서버(PHP)로 던져주는 역할

<?
  $text = $_GET['text'];    // GET 방식의 전달 데이터를 저장하는 배열
  echo("전달된 값은 {$text}입니다.");
?>

사용자가 input type="text"에 글자를 쓰고 input type="submit"을 누르면, 데이터는 name="text"라는 이름표를 달고 action=4-1.php파일로 method="get"방식을 통해 주소창을 타고 날아가게 된다 

 

4-1.html (입력받은 데이터 출력)

4-1.html에서 보낸 값을 받아 화면에 보여주는 수신기 역할을 한다 

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>4-1.php</title>
</head>
<body>
    <h3>GET 예제 결과</h3>
<?php
    // 사진 속 핵심 코드 (GET 방식으로 데이터 수신)
    $text = $_GET['text']; // GET 방식의 전달 데이터를 저장하는 배열

    echo("전달된 값은 {$text}입니다."); --- 따옴표 안의 문장을 출력한다. {$text}는 변수에 저장된 실제 값으로 바뀐다
?>
<hr>
<?php show_source(__FILE__); ?>
</body>
</html>

 

a.php(하이퍼링크를 통해 데이터 전송)

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>a.php</title>
</head>
<body>
<?php
    $a = 1; -- 서버 내부에서 변수 $a에 숫자 1을 미리 할당 한다
    echo("\$a = {$a}<br> -- \$a 는 문자 그대로 '$a'를 출력하고, {$a}는 실제 값인 '1'을 출력 한다
        <a href=./b.php?a=\$a>b.php</a>"); // <a href=./b.php?a=1>b.php</a>
?>
* <a href=./b.php?a=1>b.php</a> -- <a href=./b.php?a=\$a> (링크 주소 부분) 이므로 이부분은 클릭 했을때 b.php 라는 파일로 이동하라는 명령어 이다

<hr>
<?php show_source(__FILE__); ?>
</body>
</html>

 

b.php(링크 데이터 수신 및 출력)

a.php 에서 클릭한 링크의 값을 받아 화면에 출력 한다 

PHP
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>b.php</title>
</head>
<body>
<?php
    $a = $_GET["a"]; -- 주소창(?a=1)에서 'a'라는 이름표의 값을 가져온다
    echo("\$a = {$a}"); -- 전달 받은 값을 $a라는 이름과 함께 출력한다 \$a 는 문자 $a로 출력, {$a}는 받은 값인 1로 출력 된다
?>
<hr>
<?php show_source(__FILE__); ?>
</body>
</html>

 

4-4. html (데이터 입력용 HTML 파일)

<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>Input type text와 password</title> </head>
<body> <form name="tx_pw" action="4-4.php" method="post">
        이름 : <input type="text" name="id" size="8"><br>
        암호 : <input type="password" name="pw" size="8"><br>
        <input type="submit" name="확인" value="확인">
    </form> </body> </html>

4-4.html (데이터 수신 및 처리용 PHP 파일)

<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head>
<body> <?php 
    $user_id = $_POST['id']; -- POST 방식으로 전달된 'id' 값을 변수 $user_id에 대입
* $_POST: 컴퓨터가 미리 만들어둔 데이터 저장함. 4-4.html 파일에서 method="post"라고 썻기 때문에 데잉터들이 이 이름의 저장함으로 들어간다
* ['id']: 저장함에는 여러 개의 칸이 있다. 그 중에서 id라는 이름표가 붙은 칸을 의미한다. (이 이름표에는 HTML name="id"에서 정해진 것)
* $user_id: 이것은 PHP에서 내가 직접 만든 새로운 빈 공간이다. 앞에 $가 붙으면 데이터를 담을 수 있는 이름이 된다. =(이퀄)은 프로그래밍에서는 "오른쪽에 있는 것을 왼쪽에 집어넣어라는 명령어이다. 그래서 저장함에서 꺼낸 st라는 글자를 내가 만든 $user_id 라는 공간으로 복사해서 집어넣는 동작을 한다

    $user_pw $_POST['pw']; -- POST 방식으로 전달된 'pw' 값을 변수 $user_pw에 대입

    echo("이름은 {$user_id}입니다.<br>"); -- 아이디 값 변수 파싱 및 화면 출력 후 줄바꿈
    echo("암호는 {$user_pw}입니다.<br>"); --  비밀번호 값 변수 파싱 및 화면 출력 후 줄바꿈

    echo("<hr>"); -- 시각적 구분을 위한 수평선 출력

    echo("insert into id(id, pw) values('{$user_id}', '{$user_pw}');"); -- SQL INSERT 구문 형식으로 데이터 가공 및 출력 
?> <hr> <?php 
    show_source(__FILE__); -- 현재 실행 중인 파일의 전체 소스 코드를 화면에 텍스트로 노출

 

4-5.html 

사용자로부터 데이터를 입력받는 구조

<html> <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
*** Content-Type: text/html; charset=utf-8' - 브라우저에게 한글(UTF-8)을 사용함을 알려 글자 깨짐을 방지

    <title>Input radio & checkbox</title> </head>
<body>
    <form name="combined" action="4-5.php" method="post">
        
        1 <input type="radio" name="rd" value="1" checked>, ---> 입력을 안한 상황에서 1로 checked 되어 있음
        2 <input type="radio" name="rd" value="2">, 
        3 <input type="radio" name="rd" value="3">, 
        4 <input type="radio" name="rd" value="4">
        <hr> 1 <input type="checkbox" name="cb1" value="1" checked>, ---> 입력을 안한 상황에서 1로 checked 되어 있음
        2 <input type="checkbox" name="cb2" value="1">, 
        3 <input type="checkbox" name="cb3" value="1">, 
        4 <input type="checkbox" name="cb4" value="1">
        <br><br> <input type="submit" name="확인" value="확인">
    </form>
</body>
</html>

 

4-5.php

<?php // PHP 명령 시작
    header('Content-Type: text/html; charset=utf-8');

    // $_POST['rd'] : HTML에서 전송된 라디오 버튼의 값을 가져옴
    // echo : 화면에 "선택한 라디오 값은..." 문장을 출력함
    echo "선택한 라디오 값은 {$_POST['rd']}입니다.<br>";

    // $_POST['cb1']~['cb4'] : 각 체크박스의 값을 개별적으로 읽어옴
    // <br> : 결과가 한 줄씩 나오도록 줄바꿈을 함
    echo "cb1은 {$_POST['cb1']}입니다.<br>";
    echo "cb2은 {$_POST['cb2']}입니다.<br>";
    echo "cb3은 {$_POST['cb3']}입니다.<br>";
    echo "cb4은 {$_POST['cb4']}입니다.<br>";

    // <hr> : 가로선을 그어 출력값과 소스 코드를 구분함
    echo "<hr>";

    show_source(__FILE__); -- 현재 이 파일(4-5.php)의 소스 코드를 화면에 표시함

?> 

 

4-9.html

<html> <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
    <title>Textarea</title> 
</head>
<body>
    <form name="textarea" action="4-9.php" method="post"> --- method=post 데이터를 보내는 방식
        
        <textarea name="tarea" rows="5" cols="30"></textarea> --- rows=상자높이 cols=상자의 너비
        
        <br>
        
        <input type="submit" name="확인" value="확인">
        
    </form> </body> </html>
<?php --- PHP 스크립트의 시작

    header('Content-Type: text/html; charset=utf-8'); --- 결과 화면에서 한글이 깨지지 않게 설정함
    $tarea = $_POST["tarea"]; --- HTML에서 보낸 텍스트 영역의 데이터를 가져옴
    $tarea = nl2br($tarea); --- nl2br() 입력된 텍스트의 줄바꿈(/n)을 HTML 태그(<br>)로 변환함
    echo("$tarea");  --- echo: 변수 tarea에 저장된 내용을 화면에 출력함 / * 컴퓨터 언어를 브라우저 언어로 번역해주는 작업
    echo "<hr>"; --- hr 구분선 출력
    show_source(__FILE__);

?>

 

 

st.html

<html> <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>학생 정보 입력</title> </head> --- 인터넷 창 맨 위(탭)에 나타나는 제목을 설정 
<body>
    <form name="st_form" action="st.php" method="post">
* form: 데이터 전송 설정 action="st.php" 확인버튼을 눌렀을 때 데이터를 배달할 목적지 파일 이름 method="post" 데이터를 보내는 방식 

       
        학번 : <input type="text" name="st_id"><br> 이름 : <input type="text" name="st_name"><br>
* type="text" 한 줄짜리 글자를 입력받는 상자를 만든다 / name="st_id" PHP에서 이 데이터를  찾을 때 쓰는 고유 이름 PHP의 $_POST["st_id"]와 연결됨
        성별 : 남 <input type="radio" name="gender" value="남" checked>, 
*  type="radio" 동그란 버튼 중 하나만 선택하는 방식 name="gender" 성별 버튼들을 하나의 그룹으로 묶어줌 /  value="남"사용자가 이 버튼을 골랐을 때 PHP로 전달될 실제 값 / checked 페이지가 처음 열릴 때 기본으로 선택되어 있게 함
               여 <input type="radio" name="gender" value="여"><br>         
        학과 : <select name="dept">
* select 클릭하면 아래로 목록이 쫙 펼쳐지는 '드롭다운 메뉴'를 만든다 
                <option value="화학과">화학</option> <option value="컴퓨터공학과">컴퓨터공학</option>
* option value="화학과" 메뉴 안에 들어갈 세부 항목
               </select><br>
        
        학년 : 1 <input type="radio" name="grade" value="1학년">, 
* 성별과 마찬자기로 여러 학년 중 하나만 고르게 함
               2 <input type="radio" name="grade" value="2학년" checked>, 
               3 <input type="radio" name="grade" value="3학년">, 
               4 <input type="radio" name="grade" value="4학년"><br>
        
        학점 : <input type="text" name="score"><br><br>
        <input type="submit" value="확인">
* type="submit" 전송버튼임. 이 버튼을 누르는 순간 form 안에 적힌 모든 데이터가 action dp wjrdls st.php로 발송됨 / value"확인' 버튼 겉면에 써질 글자임     

    </form>
</body>
</html>
<?php 
    header('Content-Type: text/html; charset=utf-8');

    // $_POST["이름"]: HTML에서 보낸 바구니에서 값을 꺼내 변수에 저장
    $st_id   = $_POST["st_id"];   // 학번 바구니 꺼내기
    $st_name = $_POST["st_name"]; // 이름 바구니 꺼내기
    $gender  = $_POST["gender"];  // 성별 바구니 꺼내기
    $dept    = $_POST["dept"];    // 학과 바구니 꺼내기
    $grade   = $_POST["grade"];   // 학년 바구니 꺼내기
    $score   = $_POST["score"];   // 학점 바구니 꺼내기

    echo "<table border='1' width='300'>"; --- border="1"은 선 두께를 의미함

    // tr: 한 줄(Row)을 만든다 / td: 한 칸(Cell)을 만든다
    // echo를 사용하여 HTML 태그와 변수 값을 섞어서 화면에 출력함
    echo "<tr> <td align='center'>학번</td> <td align='center'>$st_id</td> </tr>";
    echo "<tr> <td align='center'>이름</td> <td align='center'>$st_name</td> </tr>";
    echo "<tr> <td align='center'>성별</td> <td align='center'>$gender</td> </tr>";
    echo "<tr> <td align='center'>학과</td> <td align='center'>$dept</td> </tr>";
    echo "<tr> <td align='center'>학년</td> <td align='center'>$grade</td> </tr>";
    echo "<tr> <td align='center'>학점</td> <td align='center'>$score</td> </tr>";

    echo "</table>"; // 표를 닫는다

    echo "<hr>"; // 구분선을 긋는다
    show_source(__FILE__);

?>