코딩/HTML

[html] 폼(Form) 관련 태그

르네 루덴스 2021. 12. 15. 11:29

MVC 패턴에서 View가 html이 됩니다. 폼(Form)은 html에서 사용자에게 입력받은 입력값을 서버에 전송하는 역할을 하고, 입력화면 형식을 만들어주는 역할을 합니다.

폼 관련 태그

<form></form>

사용자가 입력한 데이터를 보내는 방식과 처리할 서버를 정하는 태그입니다.

 

속성

  • method : 데이터를 보내는 방식
    • get : url창에 데이터를 추가해서 데이터를 보내는 방식입니다. 입력한 정보가 들어나기 때문에 보안에 취약합니다.  - 데이터를 누구나 다 볼 수 있습니다.
    • post : http request에 데이터를 넣어 보내는 방식 - Body에 넣어서 보내줍니다. 
  • name : form태그의 고유 이름을 지정해줍니다.
  • action : 데이터를 처리할 페이지를 지정하여 어느 페이지에 요청할것인지 지정해줍니다. -  action속성은 디폴트값이 없어서 반드시 작성해야 합니다.
  • target : action 속성의 프로그램(페이지)를 어떻게 열지 지정합니다.  - 현재 창에서 열지, 새창에서 열지 지정해줍니다.
  • autocomplete : 이전 입력내용을 출력해줍니다.

 

<input>

사용자로부터 데이터를 입력받기 위한 태그입니다.

 

속성

  • type : 입력 창의 타입을 결정합니다. ( text, checkbox, radio..)
  • value : 입력받은 값을 저장하는 속성, 만약 value값을 설정하면 입력값의 초기값으로 설정됩니다.
  • name : input을 구별할 수 있는 명칭이며 key값이 됩니다
  • min/max/step : 숫자와 관련된 속성, 입력값의 type이 number라면 최소값 최대값 등 구할 수 있습니다.
  • autocomplete : 자동완성
  • height/width : 입력창의 높이, 너비를 설정할 수 있습니다.
  • readonly : 읽기 전용  ( 예시 : 회원 정보 수정 페이지의 id란 → id는 수정하면 안되니까 입력을 막아놓음)
  • accept : 파일 타입을 알려줍니다.
  • multiple : 여러개의 값 입력이 가능합니다.
  • placeholder : 사용자가 입력하기 전 입력창에 표시할 글 입니다. 사용자가 입력하면 사라집니다. ( 예시 : 비밀번호는 영문자, 숫자, 특수기호를 포함해서 8글자 이상 )
  • required : 필수 입력 필드를 지정해줍니다.

type 기본 속성

  • text : 한 줄 짜리 텍스트 입력창을 생성해 줍니다.
  • password : 한 줄 짜리 텍스트 입력창 생성, ***으로 표시 ( 안보이게 )
  • hidden : 사용자에게 보이지 않는 값을 넣을 수 있는 창 → 관리자에게는 필요한 값 
  • button : 버튼 생성 , 스크립트와 연결해서 특정한 이벤트를 일으키는 함수를 연결하여 활용
  • checkbox : 체크박스 생성, 다중 선택 가능 
  • file : 파일 입력 양식을 출력해줍니다.
  • image : 이미지 형태를 생성해줍니다.
  • radio : 클릭하면 까맣게 되고 반대쪽은 하얗게 되는, 하나만 선택해야하는 버튼입니다.
  • submit : 제출, 입력한 데이터를 폼에 action속성에 정해진 곳으로 넘기는 기능입니다.
  • reset : 입력내용을 지우는 기능입니다.
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form태그에 대해 알아보자</title>
</head>

<body>
    
    <h1>form 태그</h1>
    <p>
        form 태그는 서버에 데이터를 전송해주는 기능을 하는 태그이다.<br>
        주요 속성 : method, action<br>
        method : 데이터를 전송할 방식을 결정한다. get과 post로 나뉜다.<br>
        action : 요청할 주소를 작성한다.<br>
    </p>

    <h2>get방식으로 데이터 전송하기</h2>

    <form method="GET" action="../210316/images/yoo.jpg"> 
        <input type="text" name="id">
        <input type="password" name="pw">
        <input type="submit" value="로그인">

        <!-- 
        로그인 버튼을 누르면 url창 주소 마지막에 ?id=yj&pw=1234 생김 : get방식
        주소창에 있는 ?는 ?부터 값이라는 뜻  
        -->

    </form>


    <h2>post방식으로 데이터 전송하기</h2>

    <form method="POST" action="210316/210316_08_hyperlinktag.html">
        아이디<input type="text" name="id"><br>
        패스워드<input type="password" name="pw"><br>
        <input type="submit" value="로그인">

        <!-- url창에 데이터가 보이지 않는다 -->

    </form>

    <p>
        form 태그의 method속성은 반드시 필요한 속성으로 default값을 가지고 있다.<br>
        default값 : get
    </p>

    <form action="210316_07_multimediatag.html"> <!-- 이렇게 하면 안되나? -->
        <input type="text" name="test">
        <input type="submit" value="전송">

    </form>


    <h2>폼 요소를 그룹으로 묶고, 묶은 폼 요소에 명칭을 붙이는 fieldset태그와 legend태그</h2>
    <fieldset>
        <legend>검색창</legend>

            <form action="">
                <p>검색어를 입력</p>
                <input type="text" name ="test">
                <input type="submit" value="전송">
            </form>
    </fieldset>



    <h1>사용자로부터 데이터를 입력받기 위한 input태그</h1>
    <p>
        input태그는 사용자가 입력할 수 있는 화면을 출력하는 태그.<br>
        입력화면은 type속성에 따라 결정된다.<br>
        input태그는 반드시 form태그에 있어야하는것은 아니다.
    </p>




    <h3> type : text, password</h3>

    <p>text, password타입은 한 줄 문자를 입력받는 화면</p> <!-- 무한대로 입력 가능 -->
    <input type="text" id="str" name="str"><br>

    <input type="text" name = "str" placeholder="검색어를 입력하세요"><br>  <!--placeholder : 입력전 뜨는 글자 -->

    <input type="text" name = "str" value="오늘 아침 추워요" readonly><br> <!-- 초기값으로 들어감 -->
    <!-- readonly : 값 수정 불가능 -> readonly 쓸 때는 value값이 있어야한다 -->

    <input type="text" name ="str" size="3"><br> <!-- size : 입력창의 (보여지는)크기 -->

    <input type="text" name ="str" size="3" maxlength="3"><br> <!-- maxlength="3" : 최대 3글자만 입력가능 -->


    <form action="">
        <input type="text" size="8" minlength="3"> <!-- 2자 입력하면 3자 이상 입력하려고 팝업알림창이 뜬다 -->
        <input type="text" name="keyword" required> <!-- required 있으면 꼭 입력하라고 팝업알림창 뜬다 -->
        <input type="submit" value="제출">

    </form>

    <br>

    passwordtype <input type="password" name="pw"> <!-- password 타입은 입력값을 가려준다 -->




    <h3>type : hidden</h3>
    <p>
        사용자에게 보여줄 데이터는 아니지만,
        서비스를 실행할 때 반드시 보내야 하는 값을 설정할 때 사용<br>
        value속성에 값을 반드시 입력해야한다.
    </p>

    <!-- 게시물 수정 -->
    <form>
        제목<input type="text" name="title" value="이거 수정해봐 (냉무)">
        내용<input type="text" name="content">
        <input type="hidden" name="boardNo" value="1">
        <input type="submit" value="수정">
    </form>




    <h3>type : button</h3>
    <p>버튼 모양을 출력 -> 반드시 기능(이벤트 처리)을 추가해야한다 -> 자바스크립트와 연결해서 사용</p> 
    
    <!-- value속성을 추가하면 버튼 안에 문구가 뜬다 -->

    아이디<input type="text" name="id">
    <input type="button" value="아이디 중복확인" onclick="test();">
    <script>
        function test() {
            alert("왜 눌러!!");
            open("", "_blank", "width=300,height=300");
        }
    </script>




    <h3>type : checkbox</h3>

    <p>
        checkbox 타입은 다중선택 가능 <br>
        선택사항을 두고 체크, 선책할 수 있는 화면을 출력<br>
        name/value값을 반드시 지정해야한다.<br>
        동일한 선택조건(카테고리)에 있을 경우 name을 동일하게 설정한다. ( 서버에서 데이터를 배열형식으로 받아오기 때문 )
    </p>

    <fieldset>
        <legend>취미</legend>
        <form action="">
            <!-- input*4 -->
            <label><input type="checkbox" name="hobby" value="운동">운동</label>

            <input type="checkbox" name="code" value="코딩" checked> <!-- checked 속성은 기본적으로 체크되어있게 한다 -->
            <label for="code">코딩</label>

            <input type="checkbox" name="hobby" value="독서" disabled>독서 <!-- disabled 속성은 체크 불가능하게 설정한다 -->

            <input type="checkbox" name="hobby" value="여행">여행

            <input type="submit" value="전송">
        </form>

        <!-- 운동 코딩 두개를 선택하면 url창에 ?hobby1=운동&hobby2=코딩 이렇게 추가됌 -->

        <!-- 체크박스는 네모칸만 클릭 가능 -> 글자를 눌러도 클릭 안된다 -> 불편 -->
        <!-- 해결 방법 : label태그 ( 체크박스와 문구를 그룹으로 묶어서 그 그룹안에서 클릭하면 체크가 되도록 한다 )-->
        <!-- 방법 1 input태그를 label태그로 묶기 -->
        <!-- 방법 2 label for 태그를 이용 -->


    </fieldset>


    <h3>type : radio</h3>

    <p>
        radio 타입은 예시 중 한가지만 선택 가능 ( 다중선택 불가능 )<br>
    </p>

    <fieldset>
        <legend>취미</legend>
        <form action="">

            <label><input type="checkbox" name="hobby" value="운동">운동</label>

            <input type="checkbox" name="code" value="코딩" checked> <!-- checked 속성은 기본적으로 체크되어있게 한다 -->
            <label for="code">코딩</label>

            <input type="checkbox" name="hobby" value="독서" disabled>독서 <!-- disabled 속성은 체크 불가능하게 설정한다 -->

            <input type="checkbox" name="hobby" value="여행">여행

            <p>성별</p>
            <label><input type="radio" name="gender" value="M">남자</label>
            <label><input type="radio" name="gender" value="F" checked>여자</label>

            <input type="submit" value="전송">
        </form>
    </fieldset>




    <h3>type : file</h3>

    <p>
        파일을 서버에 업로드할 때 사용 ( local에 있는 파일을 가져올 때 사용 )<br>
        바이너리 파일이 전송되기 때문에 form으로 전송할 때는 encoding값을 변경해야한다. : enctype 속성 이용 <br>
        method는 반드시 post형식으로 전송해야한다. 

    </p>
    <form action="" method="POST" enctype ="multipart/form-data"> 

        <input type="file" name = "upload", accept = "video/*" multiple> <!-- '파일 선택' 버튼이 생성된다 -->

        <!-- accept 속성 x : 모든 파일, accept = "audio/*" : 오디오 파일만 업로드 가능 "-->

        <!-- 파일 한개만 선택 가능, 단 multiple속성을 작성하면 다중파일 선택 가능 -->

    </form> 




    <h3>type : image</h3>

    <p>
        image 타입은 사진을 submit으로 이용하는 타입 
    </p>

    <form action="">
        <input type="text" name="title">
        <input type="image" src="../210316/images/yoo.jpg" name="test" value="test" width="100" height="100">
    </form>





    <h3>type : submit, reset</h3>

    <p>
        submit : form 태그의 자식인 input태그의 값을 전송하는 태그 
        reset : form 태그의 자식인 input태그의 값을 초기화하는 태그 
        submit, reset은 버튼으로 출력되고, 버튼에 출력되는 내용은 value속성으로 설정된다.
    </p>

    <form action="">
        아이디<input type="text" name="userId"><br>
        패스워드<input type="password" name="password"><br>
        취미<br>

        <input type="checkbox" name="hobby" value="운동"> 운동
        <input type="checkbox" name="hobby" value="독서"> 독서
        <input type="checkbox" name="hobby" value="코딩"> 코딩
        <input type="checkbox" name="hobby" value="잠"> 잠자기<br>

        <!-- <input type="submit" value="회원가입"> -->
        <button type="button" onclick="test();">회원가입</button> 
        <!-- 
        button 타입은 기본적으로 submit 기능을 가진다 
        하지만 type을 button으로 할 경우 submit 기능을 갖지 않는다 -->

        <input type="reset" value="취소">
    </form>


    <h2>html5에서 지원하는 type들</h2>

    <h3>type : color</h3>

    <p>
        color타입은 색상을 선택하는 타입
    </p>

    <input type="color" name="background" value="#ff0000"> <!-- value는 16진수 rgb값/ 빨초파 / red / ff는 10진수로 255 -->
    <input type="color" name="background" value="#ffff00"> <!-- yellow -->




    <h3>type : date, datetime, datetime-local, month, week, time</h3>
    <p>
        날짜를 입력받는 타입 
    </p>

    <!-- 자동완성 : 태그명 입력하고 tab키 -->

    <form action="">
        <input type="date" name="birthday" min="2021-01-01" max="2021-12-31"> <!-- min max로 날짜 범위 좁히기 가능 : min max를 이렇게 정하면 올해 안에서만 선택 가능 -->
        
        <input type="datetime"> <!-- 날짜와 시간을 직접 작성 -->

        <input type="datetime-local"> <!-- 캘린더 ui로 날짜와 시간까지 선택 가능 -->

        <input type="month"> <!-- 월(달) 만 선택 가능 -->

        <input type="week"> <!-- 주를 선택 가능, 올해의 몇번째 주인지 알려줌 -->

        <input type="time"> <!-- 시간 선택 가능 -->

        <input type="submit" value="전송">
        <!-- 문자열로 넘어간다 -> 서버에서 날짜타입으로 받고싶으면 파싱 해야한다 -->
    </form>


    <h3>type : number</h3>

    <p>
        number 타입은 숫자 입력 전용 
    </p>

    <form action="">

        <input type="number"> <!-- 창 끝에 엘리베이터 버튼같은것이 있어서 위를 누르면 숫자 올라가고, 아래를 누르면 숫자가 내려간다 -->

        <input type="number" max="100" min="0" step="10" name="su"> <!-- 100 초과 0미만 숫자 입력 안되고, 숫자가 커지고 작아지는 단위가 10 -->

        <input type="submit"> <!-- 200누르면 100이하여야한다고 알림창 뜬다 -->

        <!-- 문자열로 넘어간다 -> 서버에서 숫자타입으로 받고싶으면 파싱 해야한다 -->

    </form>



    <h3>type : search, range, url, email</h3>

    <p>
        search : 검색어 입력창, text타입과 유사하나 x버튼이 있다 ( 전체 지우는 용)<br>
        range : 일정 범위에 있는 값을 표시, 속성에 max와 min, step값이 필요하다 <br>
        url : 사이트의 주소를 입력받는 입력창, text타입과 유사하나 입력값에 'http://' 문구가 있는지 체크한다<br>
        email : 이메일을 입력받는 입력창, text타입과 유사하나 '@'가 있는지 ( 이메일 형식에 맞는지 ) 체크한다<br>
    </p>

    <form action="">

        <input type="search" name="keyword"><br>

        <!-- 자동완성 : 태그명:타입 -->
        <input type="range" name="ra" min="0" max="10" step="2"> <br><!-- 세단계로 나눠서 상중하 이렇게 할수도 있다 -->

        <input type="url" name="url"><br> <!-- http:// 로 시작하지 않으면 알림창이 뜬다 -->

        <input type="email" name="email"><br> <!-- 문자@문자 형식이 아니면 알림창이 뜬다 -->

        <input type="submit" value="전송">
    </form>



    <h2>기타 입력 창 태그들</h2>

    <p>
        select : 콤보박스 형식으로 선택하는 것 ( 예시 : 검색 카테고리 ), 자식태그로 option태그(value값)를 가지고 있다 <br>
        detailist : input태그 text타입의 자동완성기능을 할 수 있게 하는 태그, 자식태그로 option태그(value값)를 가지고 있다 <br>
        textarea : 여러문장을 입력받게 하는 태그, 긴글이나 소개글, 게시판 내용등에 쓰인다. 특정크기를 속성으로 정해야한다. ( cols, rows)

    </p>

    <h3>type : select, datalist, textarea </h3>

    <form action="">

        <select name="category" multiple> <!-- multiple 속성 사용하면 여러개 고를 수 있다 -->
            <optgroup label="광역시">
                <option value="서울">서울</option>
                <option value="대전">대전</option>
                <option value="부산">부산</option>
            </optgroup>
            <optgroup label="도">
                <option value="경기도">경기도</option>
                <option value="강원도">강원도</option>
                <option value="전라도">전라도</option>
            </optgroup>
        </select>


        <br>


        <input type="text" name="sample" list="data">

        <datalist id="data">
            <option value="유병승">유병승</option>
            <option value="김상현">김상현</option>
            <option value="김예진">김예진</option>
            <option value="김지한">김지한</option>
            <option value="제인혁">제인혁</option>
        </datalist>

        <input type="submit" value="제출">


        <br>


        <textarea name="info" cols="30" rows="5" style="resize: none;">안녕하세요</textarea> 
        
        <!-- cols : 가로 칸 수 , rows : 행 수(줄 수) -->
        <!-- css 사용해서 style="resize: none;" 하면 크기가 고정된다 -->

        <!-- textarea 주의할 점 -->
        <!-- 시작태그와 종료태그를 한줄로 작성할것, 그렇지 않으면 텍스트 입력시 몇칸이 띄어져서 써진다 -->

    </form>


    <h3>재미로 보는 progress</h3>
    
    <p>진행상황 등을 나타내는 바 </p>

    <progress id="p" value="0" max="100"></progress>
    <script>
        setInterval(()=>{
            let pro=document.getElementById("p");
            pro.value+=(Math.random()*20);
        }, 500);
    </script>

</body>

</html>

'코딩 > HTML' 카테고리의 다른 글

[html] HTML _ 목록 관련 태그  (0) 2021.12.13
[html] html 헤드태그  (0) 2021.12.10
[html] 웹통신 기초 (인터넷, WEB, 웹 특징)  (0) 2021.12.08