야매강좌 php9강 : POST전송과 입력검사

야매강좌 php9강 : POST전송과 입력검사 

 

POST전송에 대해서 계속 배워보겠습니다.

 

(1) 준비과정 

잊지 않으셨겠죠? APMSETUP Monitor 를 실행해서 Apache와 MySQL을 켜둡시다.

 

(2) 주석(주석문)이 뭘까?

참고삼아서 써두는 글을 주석이라고 합니다. 막상 프로그램이 돌아갈 때 아무 영향도 미치지 않는 글이죠.

앞으로 주석을 이용해서 설명을 해보고자 합니다.

// <- 이렇게 슬래쉬 2개 뒤에 글을 쓰면 주석문이 됩니다. 보통 초록색으로 표시합니다.

 

(3) 오늘 배울 것

7강에서는 한 쪽 php파일의 문자열을 포스트로 보내고, 다른 쪽 php 파일에서 받아보는 걸 했습니다.

이번에도 비슷합니다. 다만 입력검사를 해보겠습니다. 문자열에 공백이 있는지, 길이는 적절한지, 영문자 및 숫자로 쓰여졌는지 알아보는거죠.

입력검사는 두 가지로 합니다. 하나, 자바스크립트, 둘, php.

 

(4) Get1.php

Get1.php 파일을 코딩해봅시다. 코딩한다는 건 그냥 쓴다는 겁니다. 프로그래밍을 배우기 전까진 뭐 있어보이는 단어라 생각했겠지만 그 뿐이죠.

 

여기선 자바스크립트란 걸 배울겁니다. 자바스크립트도 프로그래밍 언어입니다. 주절주절 설명하자면 길지만 좀 유명한 언어라고만 알아둡시다.

 

 <html>
 <head>
  <title> 입력받기 </title>
 </head>

  <script language=”JavaScript”> //자바스크립트를 쓰겠다는 겁니다
 function check_input() //check_input이란 이름의 함수를 만듭니다 (함수 생성)
  {
  if(document.aaa.name.value == ”)  //만약 문서의 aaa.name값이 비어있다면,
  {
   alert(‘이름을 입력하세요’); //이름을 입력하라는 메시지박스를 띄우고
   document.aaa.name.focus();  //aaa.name에 포커스합니다. 포커스란 커서를 위치시킨다는 뜻이에요
  }
  else //그 외의 경우(=문서의 aaa.name값이 비어있지 않다면)
  {
   document.aaa.submit(); //문서의 aaa값을 전송합니다

  }

 }
 </script> //자바스크립트 끝

 

 <body>

  <form name=’aaa’ method=’post’ action=’result1.php’> //폼 이름은 aaa, 포스트 방식, 결과는 result1.php로!
 <input type=’text’ name=’name’ size=’20’> //name이란 이름의 입력 박스를 만듭니다

 <input type=’button’ value=’글 입력’ onclick=”javascript:check_input();”> //누를경우 check_input 함수 로드

  </form> //폼 끝

 </body>
</html>

 

 

[잠깐!] 함수를 만들고 부른다는 게 뭘까?(함수 생성과 로드)

언어마다 기존의 함수들을 갖고 있죠.

예를 들면 php 함수 중에선 echo. echo는 글자를 출력하는 함수죠.

자바스크립트 함수로는 위에서 본 alert가 있겠네요. 메시지 박스를 띄우는 함수입니다.

 

하지만 기존 함수 외에 우리도 함수를 만들 수 있습니다.

어떻게요?

</head>와 <body> 사이에 아래와 같이 쓰는거죠.

<script language=”JavaScript”>

function hamsoo()

{

alert(‘새로운 함수다!’);

alert(‘하하하!’);

}

</script>

 

 

그리고 body 안에 이런식으로 쓰는 겁니다.

<input type=’button’ value=’클릭’ onclick=”javascript:hamsoo();”>

실행해서 버튼을 클릭하면 메시지가 뜨겠죠? “새로운 함수다! 하하하!” 하고 말이죠. 이게 바로 함수를 만들어서 불러온겁니다. 별거 아니죠.

자주 쓰일 법한 것들을 함수로 만들어 놓으면 편합니다.

 

(5) result1.php

 <html>
 <head>
  <title> 결과보기 </title>
 </head>

 <body>

 

<? //php 언어를 쓰겠다는 뜻이죠. 참고로 자바스크립트를 쓰는건 <script language=”JavaScript”>였어요
  $name = $_POST[“name”];
//전송된 name값을 변수 $name에 넣습니다

  if(!ereg(“([^[:space:]])”, $name)) //ereg는 비교함수인데요.  $name이 공백인지 아닌지 비교하는 겁니다

  {
  echo “공백이 있으면 안됩니다”;
  exit;
  }

  if(!ereg(“(^[0-9a-zA-Z]{6,8}$)”, $name)) //0-9, a-z, A-Z의 영어 혹은 숫자, 6~8글자인지 비교합니다
  {
  echo “이름은 6~8자의 영문자 또는 숫자를 입력하세요”;
  exit;
  }
  echo “이름 = $name”; //위 조건문을 다 피하면 비로소 이름이 표시됩니다
?> //php사용 끝

 </body>
</html>

 

[잠깐!] ereg란?

ereg는 비교함수입니다. ereg(패턴, 문자열) 의 형식으로 쓰고, 문자열에서 패턴을 찾아봅니다.

즉 ereg(“([^[:space:]])”, $name)) 는 변수 $name에 공백이 있나 없나 보는겁니다.

([^[:space:]])라는게 좀 어려워보이긴 한데 자세히 설명할건 없고 공백이 하나라도 있으면 false값을 나타냅니다.

다만 ereg앞에 느낌표(!)가 붙어있네요. 느낌표는 반대의 의미를 갖습니다. 즉 공백이 하나라도 있을 경우 false가 아니라 true값이 나오게 되죠. 공백이 있으면 -> true -> if 조건 성립 -> if 내용 실행이 되는거죠.

 

복잡하다고요? 제 생각에도 그렇습니다.

그러니까 그냥 아래 소스를 어딘가에 보관해두면 됩니다.

if(!ereg(“([^[:space:]])”, $변수))

{

//공백있을 경우 실행할 것

}

공백이 있는지 확인할 때 붙여넣기해서 써버리면 되겠네요. 야매좋다는 게 뭡니까.

 

다음 if(!ereg(“(^[0-9a-zA-Z]{6,8}$)”, $name))도 마찬가지입니다.

영문자 혹은 숫자는 [0-9a-zA-Z]가 표현하고, {6,8}은 6자에서 8자라는 의미입니다.

많이 알면 다칩니다.

 

[잠깐!] exit란?

exit는 그 자리에서 문서를 빠져나갑니다. 그 줄에서 멈춘다는 얘깁니다.

만약 exit가 없다면 그 아래 줄을 전부 실행할 게 분명합니다.

 

(6) 실행해본다

실행해봅니다. get1.php와 result1.php 모두 C:\APM_Setup\htdocs 에 저장해두셨겠죠.

아시겠지만 해당 폴더에서 실행하면 안됩니다.

반드시 http://localhost/get1.php 으로 실행하시기 바랍니다.