티스의 이야기

PHP-메일전송폼 2 본문

프로그래밍

PHP-메일전송폼 2

밍딩이 2016. 6. 16. 15:28

PHP-메일전송폼 2


확인 화면에서 checkInput() 함수로 $_POST 확인한뒤 CSRF 대책용 고정 토큰 확인 -> 종료


메일 전송 폼1에서 값 검증하고 문제 없으면 세션 변수에 저장하고 확인 화면


입력이 부족하면 메일전송폼1로 되돌림



<?php

// h() 함수 레시피 218를 불러옵니다 레시피 041.

require_once '../../../../lib/h.php';

// checkInput() 함수를 읽습니다.

require_once '../../../../lib/checkInput.php';


// 클릭재킹(clickjacking) 대책 레시피 287을 마련합니다.

header('X-FRAME-OPTIONS: SAMEORIGIN');


// 세션을 시작합니다.

session_start();


// POST된 데이터를 체크합니다.

$_POST = checkInput($_POST);


// 토큰을 확인합니다.

if (isset($_POST['token']) && isset($_SESSION['token'])) {

$token = $_POST['token'];

if ($token != $_SESSION['token']) {

die('잘못된 엑세스입니다.');

}

}else {

die('잘못된 엑세스입니다.');

}


// 변수에 POST된 데이터를 대입합니다.

$name   = isset($_POST['name'])    ? $_POST['name']    :  '';

$email   = isset($_POST['email'])     ? $_POST['email']    :  '';

$comment = isset($_POST['comment'])  ? $_POST['comment']  : '';


// 오류 메시지를 저장하는 배열을 초기화합니다.

$error = array();


// 이름 필드를 확인합니다.

if (trim($name) == '') {

$error[] = '메일 주소는 필수 항목입니다.';

} elseif (mb_strlen($email) > 256) {

$error[] = '메일 주소는 256문자 이내로 해 주세요';

} else {

$pattern = '/\A([a-z0-9_\-\+\/\?]+)(\.[a-z0-9_\-\+\/\?]+)*' .

   '@([1-z0-9\-]+\ .)+[a-z]{2,6}\z/i';

if (! preg_match($pattern, $email)) {

$error[] = '메일 주소 형식이 올바르지 않습니다.';

}

}

// 내용을 확인합니다.

if (trim($comment) == '') {

$error[] = '내용은 필수 항목입니다.';

} elseif (mb_strlen($comment) > 500) {

$error[] = '내용은 500문자 이내로 해주세요.';

}


// POST된 데이터와 오류 메시지를 세션 변수에 저장합니다.

$_SESSION['name']   = $name;

$_SESSION['email']   = $email;

$_SESSION['comment'] = $comment;

$_SESSION['error'] = $error;

// 오류 수를 확인합니다.

if (count($error) > 0) {

// 오류가 있다면 입력 폼으로 되돌립니다 레시피 235.

$dirname = dirname($_SERVER['SCRIPT_NAME']);

// Windows에서는 dirname() 함수의 결과가 '/'의 경우는 '\'가 됩니다.

$dirname = ($dirname == DIRECTORY_SEPARATOR) ? '' : $dirname;

$uri = 'http://' . $_SERVER['SERVER_NAME'] . $dirname . '/mailform.php';

header('HTTP/1.1 303 See Other');

header('Location: ' . $uri);


// 확인 화면을 표시합니다.

} else {

?>

<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width,initial-scale=1.0">

<title>내용 확인</title>

</head>

<body>

<div id="mailbox">

<p>다음의 내용으로 전송하려면 전송 버튼을 눌러 주세요.</p>

<dl>

<dt>이름:</dt>

<dd><?php echo h($name);?></dd>

</dl>

<dl>

<dt>메일 주소:</dt>

<dd><?php echo h($email);?></dd>

</dl>

<dl>

<dt>코멘트:</dt>

<dd><?php echo nl2br(h($comment), false);?></dd>

</dl>


<form action="mailform.php" method="post">

<input type="submit" name="back" value="입력 화면으로 되돌아가기.">

</form>

<form action="mailform_thanks.php" method="post">

<input type="hidden" name="token" value="<?php echo h($token);?>">

<input type="submit" name="submit" value="전송">

</form>

</div>

</body>

</html>

<?php

}

?>


'프로그래밍' 카테고리의 다른 글

PHP-magic_quotes_gpc  (0) 2016.06.23
PHP-메일전송폼3  (3) 2016.06.17
PHP-메일 전송 코드  (0) 2016.06.16
PHP-메일전송 폼을 작성하고 싶을때  (0) 2016.06.15
PHP-인증을 요구하고 싶은 페이지  (0) 2016.06.14
Comments