웹 개발에 관해서라면 수년 동안 웹 사용자 인터페이스 디자인의 사실상 표준이었던 HTML을 언급해야 합니다. 현재 WAP/XML과 같은 페이지 스크립트를 사용하면 HTML의 지배력을 유지하기가 어렵지만 프런트 엔드 PHP 웹 애플리케이션을 작성하려면 개발자는 여전히 HTML 언어, 특히 HTML의 양식 부분을 이해해야 합니다. 이 장에서는 다음 내용을 학습합니다. Dreamweaver를 사용하여 HTML 양식을 디자인합니까 PHP를 사용하여 양식 데이터를 보내고 받습니까? PHP 양식의 여러 페이지를 전달하고 처리합니까? 🎜>PHP를 사용하면 사용자 입력을 검증할 수 있나요 PHP의 두 가지 세션 관리 방법: COOKIE 및 SESSION ? 웹 애플리케이션 계획 5.1 HTML HTML 사용자에게 뛰어난 유연성을 제공하는 간단한 마크업 언어입니다. 이는 배우고 작성하기가 쉽습니다. 또한 이 때문에 너무 많은 웹 디자이너가 HTML을 디자인합니다. 코딩에 거의 남용되어 페이지가 매우 다르게 표시됩니다. IE, Firefox, Mozila와 같은 다양한 브라우저. 오늘날의 웹 디자인은 웹 페이지의 HTML에 콘텐츠와 정보만 포함하고 현재 널리 사용되는 DIV+CSS 디자인 표준인 표준 HTML 및 CSS(Cascading Style Sheet)에 정보를 저장하는 것을 목표로 하는 새로운 표준을 구현했습니다. 어떤 사람들은 HTML 언어를 대체하기 위해 XML을 사용할 것을 제안합니다. XML은 이렇게 강력한 기능을 갖고 있음에도 불구하고 진입 장벽이 높고, 현재 HTML 기반의 웹사이트가 너무 많기 때문에 현재 표준은 HTML에서 전환하는 데 사용되는 XHTML이라는 HTML과 XML의 호환 사양입니다. XML로. 이 책에 실린 코드는 XHTML 호환성을 기반으로 하고 있으므로 웹 프로젝트에도 XHTML을 적용하는 것이 좋습니다. 양식을 작성하고 처리하는 것은 PHP 개발자에게 중요한 역량 지표입니다. 다음으로 양식을 디자인하는 방법을 소개하기 시작합니다. 양식은 제출 버튼과 기타 관련 요소로 구성된 웹 애플리케이션에서 가장 일반적으로 사용되는 구성 요소입니다. 양식은 사용자 등록, 은행 계좌 작성, 로그인 등의 기능을 구현하기 위해 다양한 분야에서 사용됩니다. 형식은 을 시작 태그로 사용하고 으로 끝나며, 그렇지 않으면 아무런 효과가 없습니다. HTML 페이지에는 여러 가지 양식이 허용되며, 작성 시 양식의 이름과 양식 ID를 구분하여 사용합니다. 다음은 가장 간단한 형태이며 코드는 다음과 같습니다.
이 양식 브라우저에서 실행됩니다. "쿼리 내용 제출"이라는 단어가 있는 버튼만 표시되는데 이는 의미가 없습니다. 데이터를 제출하고 완전한 양식을 작성하려면 다음 양식에 표시된 대로 태그에 두 가지 중요한 속성 태그인 작업 및 메소드를 추가해야 합니다.
이 중 action 태그는 action 값을 받을 때 처리 결과를 받는 파일 위치를 의미합니다. 비어 있으면 현재 파일 자체에 제출하십시오. 작업 값이 다른 파일 또는 URL인 경우 처리를 위해 해당 파일 또는 URL 주소에 제출하십시오. method 태그는 데이터를 제출할 때 사용되는 메소드를 설명합니다. GET 및 POST라는 두 가지 값이 있습니다. 메소드 속성이 설정되지 않거나 속성이 비어 있으면 브라우저는 기본적으로 POST 메소드를 사용합니다. POST 양식을 처리하는 방법은 다음과 같습니다. 예 5-1: getPasswd.php – POST 양식으로 제출된 값 수락 $action = $_SERVER['PHP_SELF'] if ($_SERVER[' REQUEST_METHOD' ] == 'POST') { echo 'POST 메소드를 사용하여 양식 값 전달'; echo "$_POST[email]"; } ?> ;form name ="regform" id="regform" action="" method="post"> 이메일:
보내고 싶다면 브라우저에서 GET 또는 POST 메서드를 사용하여 양식이나 데이터를 서버로 보낼 수 있습니다. GET 메소드는 URL에 액세스할 때 브라우저 주소 표시줄을 사용하여 값을 전달합니다. 이러한 유형의 URL 문자열은 많은 웹사이트에서 볼 수 있습니다. 그림 5-1에 표시된 것은 GET 메서드를 사용하여 매개변수를 전달하는 것입니다.
잘 처리하지 않으면 오류가 발생하기 쉽습니다. 문자열의 길이는 250자를 초과할 수 없으며, 너무 길면 브라우저가 자동으로 잘라내어 데이터가 손실됩니다. 또한 GET 메서드는 ASCII 문자 이외의 문자를 지원하지 않습니다. 예를 들어 중국어 문자나 기타 비ASCII 문자가 포함된 경우 브라우저에서 자동으로 완료할 수 있지만 추가 인코딩 작업이 필요합니다. url_encode 및 url_decode 함수를 사용하려면 메서드에 대한 자세한 내용은 섹션 2.9.2를 참조하세요. POST 메서드는 변수 데이터를 보낼 때 HTTP 프로토콜에 따라 데이터가 헤더 정보에 추가되며 사용자가 이를 임의로 수정할 수 없습니다. POST를 사용하면 대량의 데이터를 웹 서버로 보낼 수 있습니다. POST는 HTTP 헤더 정보와 함께 전송되기 때문에 POST 양식 제출이 트리거될 때 사용자가 페이지 탐색 중에 "뒤로" 버튼을 클릭하면 브라우저가 자동으로 POST 데이터를 다시 전송하지 않습니다. 이때 사용자가 "새로 고침" 버튼을 클릭하면 "데이터가 만료되었습니다. 양식을 다시 제출하시겠습니까?"라는 메시지가 표시됩니다. 이는 GET만큼 편리하지 않습니다. GET을 사용하여 값을 전달할 때 사용자가 "뒤로" 또는 "새로 고침" 버튼을 사용하더라도 브라우저의 URL 주소는 여전히 존재합니다. 따라서 개발 중에는 실제 애플리케이션에 따라 양식 데이터를 제출하기 위해 GET 및 POST를 유연하게 선택해야 합니다. HTML에 양식 닫는 태그가 없으면 전체 양식이 제출 작업을 트리거하지 않는다는 점을 언급할 가치가 있습니다. 실제 개발 중에 일부 부주의한 사람들은 버튼을 클릭해도 아무 일도 일어나지 않는다는 것을 알게 될 것입니다. 실제로 양식 코드를 주의 깊게 확인하십시오. 때로는 HTML 문자 하나가 누락되어도 브라우저가 작업을 수행하지 않습니다. 5.4 양식 요소 양식에 사용되는 태그 요소는 12개 이상이며, PHP 개발에서 일반적으로 사용되는 중요한 태그는 표 5-1에 나와 있습니다. 표 5-1 양식 요소 설명 input type="checkbox" 확인란, 사용자가 여러 옵션을 선택할 수 있음 input type="file" 파일 탐색 상자, 파일이 업로드될 때 가능 파일을 선택하기 위해 모달 창을 여는 데 사용됩니다. input type="hidden" 숨겨진 태그는 input type="password" 비밀번호 텍스트 상자 형식으로 변수 값을 암시적으로 제출하는 데 사용됩니다. 사용자가 할 수 있는 일 이 텍스트 상자에 문자를 입력하면 해당 문자가 * input type="radio" 단일 옵션으로 대체되어 표시됩니다. 이 옵션은 일련의 선택 사항을 설정하는 데 사용됩니다 . input type="reset" 지우기 및 재설정 양식에 있는 모든 텍스트 상자의 내용을 지우고 선택 메뉴 항목을 초기 값으로 복원하는 데 사용되는 양식 내용을 설정합니다 input type="submit" 양식 제출 버튼 input type="text" 한 줄 텍스트 상자 선택 드롭다운 목록 상자, 단일 선택 및 다중 선택이 가능합니다. 기본값은 단일 선택입니다. 다중 선택 기능을 추가하는 경우 '; } ?> 동적으로 생성된 메뉴는 대부분 데이터베이스에서 데이터 또는 데이터 배열을 가져와 동적 HTML 메뉴로 변환하거나 수동으로 생성할 수도 있습니다. 5.5 양식 처리 방법 5.5.1 양식 제출 소스 확인 때로는 누군가가 동일한 양식을 위조하여 프로그램에 제출하여 보안 문제를 일으키는 것을 방지하기 위해 특정 호스트 또는 스크립트 자체에만 제출을 허용하는 등 양식 제출 소스를 처리해야 합니다. 앞서 소개한 것처럼 PHP의 $_SERVER 서버 슈퍼 전역 배열은 $_SERVER['HTTP_REFERER']라는 변수를 제공합니다. 이 변수는 양식 제출이나 하이퍼링크의 URL 주소와 같은 이전 페이지의 소스를 저장하는 데 사용됩니다. . 누군가 자신의 컴퓨터에서 양식을 제출하거나 브라우저 주소에서 직접 현재 스크립트 이름을 입력하는 경우 이 변수는 양식 소스를 보유하거나 해당 값을 통해 처리할 수 있도록 빈 값을 갖습니다. 아래 예에서는 파일 자체가 값을 전달하는 양식을 제출하는 것만 허용합니다. 예 5-2: formreferer.php – 양식 소스 주소 결정 $action = $_SERVER['PHP_SELF']; if ($_SERVER['REQUEST_METHOD'] = = 'POST'){ $ref = $_SERVER['HTTP_REFERER']; $srv = "http://{$_SERVER['SERVER_NAME']}$action"; echo " 현재 소스는: $ref 서버 주소는: $srv ------------------------- -- ------------------------------------------------ -- --- "; if (strcmp($srv, $ref) == 0){ echo "match"; } else{ echo "off-site 제출이 허용되지 않습니다. "; } }else{ echo '양식을 제출해 주세요.';} ?>
이 예에 사용된 $_SERVER 서버 변수 각각: ? HTTP_REFERER는 완전한 소스 URL 주소를 저장합니다. ? SERVER_NAME 현재 서버 이름입니다. ? PHP_SELF 파일 이름을 포함한 현재 스크립트의 전체 경로입니다. "http:// == "를 통해 비교할 수 있습니다. 동일하면 법적 양식 제출이고, 그렇지 않으면 처리되지 않습니다. 예제 5-2 스크립트를 실행하고 "제출" 버튼을 클릭하면 그림 5-2에 결과가 표시됩니다.
그림 5-2 5.5.2 완전한 양식 처리 앞서 우리는 양식을 처리하는 간단한 방법에 대해 배웠습니다. 아래에서는 아래 표시된 코드를 사용하여 복잡한 양식을 만듭니다.
该表单包括了常用表单元素:单行文本框, 多行文本框, 单选项(라디오), 多选项(체크박스), 以及多选菜单。자세한 설명은 아래에 나와 있습니다. ? maxlength는 사용자가 입력하는 비밀번호의 최대 길이를 10자로 제한하는 비밀번호 텍스트 상자와 관련된 속성입니다. ? 연령 목록 상자는 목록 메뉴이며 이름이 지정된 속성에는 선택을 위한 고유한 값이 있습니다. 선택됨은 특정 속성 선택 요소입니다. 이 속성과 함께 옵션이 첨부되면 해당 항목이 표시될 때 첫 번째 항목으로 나열됩니다. ? 소개 텍스트 상자의 내용은 행과 열에 따라 텍스트, 행 및 열 너비를 표시합니다. ? Fave_sport는 그룹에 따라 요소의 이름을 지정해야 합니다. 예를 들어 이 라디오 버튼 그룹은 사용자가 하나만 선택할 수 있습니다. 전송 스크립트의 값. ? 단일 옵션과 마찬가지로 모든 다중 옵션 멤버도 동일한 이름의 속성을 가져야 하며, 속성 이름에 대괄호 []를 추가해야 다중 옵션의 값이 PHP로 전송됩니다. 배열의 형태, 언어는 이런 형태입니다. ? 체크된 태그는 기본적으로 선택되어 있는 단일 옵션과 다중 옵션의 특정 값을 의미합니다. 위 형태의 표시 화면은 그림 5-3과 같습니다.
그림 5-3 위 HTML의 양식은 POST 메서드를 사용하여 데이터를 전송하기 때문에 사용자가 제출한 데이터는 $_POST 또는 $_REQUEST의 슈퍼 전역 배열에 저장됩니다. $_POST 또는 $_REQUEST 슈퍼 전역 배열을 사용하세요. _POST 배열의 값은 제출된 데이터를 처리할 수 있습니다. 위 양식의 데이터를 someform.php 스크립트에 제출합니다. 스크립트의 처리 로직은 다음과 같습니다. //버튼의 변수 이름이 정의되어 있는지 판단합니다. $_POST, 그렇다면 양식이 제출되었습니다 if(isset($_POST["btn_submit"])){ if (empty($_POST['username'])){ echo "사용자 이름을 입력하지 않았습니다."; exit(0); } if (empty($_POST['password'])){ echo "비밀번호를 입력하지 않았습니다: "; exit(0); } echo "사용자 이름: ".$_POST['user_name']." "; echo "비밀번호(일반 텍스트): ".$_POST['password'] ." "; echo "나이: ".$_POST['age']." "; if (!empty($_POST[' 언어'])){ echo "선택한 언어는 다음과 같습니다."; { 사용 사용 사용 사용 사용 ' 사용하여 전체를 통해 전체를 통해 전체를 통해 전체를 통해 out through out' out'' ' out out through out ''s' ‐ to ‐‐‐‐‐‐‐ } to } else { ['develop_ide'])){ echo "개발 도구는 여러분이 $ide를 사용 중입니다:"; $ide){ 에코 $ide. 소개: ".nl2br($_POST['intro'])" "; echo "웹페이지 숨겨진 값 (숨겨진 태그 값을 통해 전달됨): ".$_POST['from']. " "; } ?> 지침: POST 메서드를 사용하여 양식을 제출하세요. HTTP 프로토콜의 헤더 부분을 통해 양식 데이터를 전송합니다. 이론적으로 데이터 크기에는 상한이 없습니다. 그러나 POST 제출에 PHP를 사용하는 경우 파일 크기는 PHP 구성 파일(php.ini)에 의해 제한됩니다. php.ini 파일에서 post_max_size 매개변수를 수정하고 기본 2M 바이트를 필요한 크기로 변경할 수 있습니다. , HTTP 프로토콜의 특성상 이 값을 너무 크게 설정해서는 안 되며, 최대값은 8M입니다. 5.6 기타 양식 처리 방법 다음으로 양식 처리를 위한 두 가지 프로그래밍 방법과 장단점을 살펴보겠습니다. 5.6.1 import_request_variables() 함수를 사용하세요 전역 변수 모음을 선택적으로 등록하려면 import_request_variables() 함수를 사용하세요. 이 함수를 사용하여 $_GET, $_POST 및 $_COOKIE 값을 가져올 수 있습니다. 가져온 각 변수에 접두사를 추가할 수도 있습니다. bool import_request_variables(문자열 유형 [, 문자열 접두사]) 매개변수의 문자열 유형은 g, p, c 문자 또는 3개의 문자 조합을 허용합니다. 그 중 "g"는 GET 변수를 나타내고 "p"는 POST 변수를 나타내며 "c"는 쿠키를 나타냅니다. 참고: "pg"를 사용하면 POST 변수가 $_GET 변수를 동일한 이름으로 덮어쓰고, "gp"를 사용하면 $_GET의 순서에 차이가 있습니다. $_POST에서는 변수 배열이 우선 적용됩니다. prefix 매개변수는 변수 이름의 접두사 역할을 하며 전역 범위로 가져온 모든 변수 앞에 배치됩니다.예를 들어 "userid"라는 $_GET 슈퍼 전역 변수 배열이 있고 "pref_"를 접두사로 제공하면 $pref_userid라는 전역 변수가 생성됩니다. 다른 전역 변수(예: $_SERVER 변수)를 가져오려면 extract() 함수(함수 장에서 소개됨) 사용을 고려해 보십시오. 접두사를 사용할 때 기존 데이터나 변수 이름과 충돌하지 않도록 주의하세요. import_request_variable() 함수를 사용하여 변수 가져오기를 구현하는 스크립트 예제는 다음과 같습니다. //포스트에서 제출한 변수 값을 가져오고 접두사 post_ import_request_variable("p", "post_") ; // GET 및 POST로 제출된 변수 값 가져오기, 접두사는 gp_, GET이 POST보다 우선합니다 import_request_variable("gp", "gp_"); //가져오기 Cookie 및 GET의 변수 값 , 쿠키 변수 값은 GET import_request_variable("cg", "cg_"); import_request_variables()에서 "pg 매개변수"를 사용하는 경우 함수에 대해서는 다음 스크립트 예제를 참조하십시오: if( isset($_REQUEST['btn_submit'])){ echo "일반적으로 POST 변수 값에서 획득: ".$_REQUEST[ 'Username']." "; import_request_variables(" pg", "import_"); //가져온 변수 이름 표시 echo "import_request_variables를 사용하여 가져온 변수 값 function:".$import_Username; } ?> < ;form id="test_form" name="test_form" method="POST" action=""> 귀하의 이름을 입력하세요. 이름:
양식> 양식은 사용자에게 이름을 입력하라는 메시지를 표시합니다. 완료 및 제출 후 스크립트는 그림 5-4와 같이 제출된 이름을 브라우저에 표시합니다.
그림 5-4 참고: 접두사 매개변수는 필수입니다. 접두사가 지정되지 않거나 변수 접두사로 빈 문자열이 지정되면 PHP는 E_NOTICE 오류를 발생시킵니다. import_request_variables() 함수는 다음 상황에 적합한 중간 방법을 제공합니다. 1. 사용자가 슈퍼변수 배열을 사용할 수 없는 경우 2. php.ini 구성 파일의 Register_globals 매개변수가 Off(PHP 5 이후 버전의 기본값은 Off)인 경우 import_request_variables를 사용하여 GET/POST/Cookie 슈퍼 변수 배열을 전역 범위로 가져옵니다. 3. 개발 중에 도입된 변수 범위가 선언되는 한 $_GET 또는 $_REQUEST 및 긴 슈퍼 전역 배열 이름을 작성할 필요가 없습니다. 5.6.2 extract() 함수 사용 extract() 함수를 사용할 수 있습니다. 예를 들어 extract($_POST);extract($_GET); 다음 코드에 표시된 대로 양식 처리를 위해 여러 A 슈퍼 변수 배열 값을 내보내는 스크립트: @extract(i_addslashes($_POST), EXTR_OVERWRITE); @extract(i_addslashes($_GET), EXTR_OVERWRITE); @extract(i_addslashes($_COOKIE), EXTR_OVERWRITE); @extract(i_addslashes($_SESSION), EXTR_OVERWRITE); extract를 사용하여 일반 변수로 내보내는 스크립트 예제를 살펴보겠습니다. // $_GET, $_POST 슈퍼 변수 배열에서 얻은 변수를 일반 변수로 변환하여 변수 이름을 바로 표시할 수 있도록 합니다. extract($_GET); extract($_POST); echo "안녕하세요, $username $age"; ?>
구현된 인터페이스는 그림 5-5와 같습니다.
5.7 여러 페이지 간 데이터 전송 매우 큰 양식을 만나면 모든 양식을 한 페이지에 담는 것이 불가능하며 큰 양식을 여러 개의 작은 양식으로 나누어 저장해야 합니다. 여러 페이지에 걸쳐 첫 번째 양식을 작성하면 해당 양식의 값을 수집하여 다음 양식 페이지로 전달해야 합니다. 다음과 같은 방법으로 처리할 수 있습니다. 양식의 숨겨진 요소를 사용하시나요? 현재 양식의 데이터를 SESSION에 저장하세요(자세한 내용은 세션 장 참조). 현재 양식 데이터를 MySQL 데이터베이스에 저장하세요. 위의 세 가지 옵션 중에서 처리 및 디버깅이 쉬운 솔루션을 선택할 수 있습니다.POST를 사용하면 폼에 있는 값을 전송할 수 있으므로 전송되는 데이터의 크기는 문제가 되지 않습니다. 또한, 프로그램을 디버깅할 때 HTML 소스 파일을 보면 현재 변수가 예상한 값인지 알 수 있습니다. . 매우 큰 양식의 경우 사용자 입력을 용이하게 하기 위해 두 개 이상의 양식으로 나누는 방법을 찾아야 합니다. 이를 위해서는 페이지 간에 값을 전달해야 합니다.