메일 전송 성공시 팝업

조회수 1166회
<?php
header("Location:http://www.studiojpg.co.kr");

// 빈 필드가 있는지 확인하는 구문
if(empty($_POST['name'])        || // post로 넘어온 name값이 비었는지 확인
   empty($_POST['email'])       || // email값이 비었는지 확인
   empty($_POST['phone'])       || // phone값이 비었는지 확인
   empty($_POST['message']) || // message값이 비었는지 확인
   !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) // 전달된 이메일 값이 유효한 이메일값인지 검증
   {
    echo "인수를 확인해주세요!";
    return false;
   }
// Cross-Site Scripting (XSS)을 방지하는 시큐어코딩
// strip_tags() -> 문자열에서 html과 php태그를 제거한다
// htmlspecialchars() -> 특수 문자를 HTML 엔터티로 변환
// 악의적인 특수문자 삽입에 대비하기 위함

$name = strip_tags(htmlspecialchars($_POST['name']));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$phone = strip_tags(htmlspecialchars($_POST['phone']));
$message = strip_tags(htmlspecialchars($_POST['message']));

$to = 'wnsgkcjswo@naver.com'; // 받는 측의 이메일 주소를 기입하는 부분
$email_subject = "FROM:  $name"; // 메일 제목에 해당하는 부분
$email_body = "본 메일은 홈페이지 폼메일로부터 전송된 이메일입니다..\n\n"."세부정보는 다음과 같습니다.\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
$headers = "Reply-To: $email_address\r"; // 답장 주소

mail($to,'=?UTF-8?B?'.base64_encode($email_subject).'?=',$email_body,$headers);
return true;    



?>

소스는 이렇습니다.

여기서 메일을 보내면 '성공적으로 전송되었습니다.'

이런 메세지를 뜨게 만들고 싶습니다. ㅠㅠ 어떻게 해야될까요

1 답변

  • "메시지를 뜨게" 한다는 건 팝업 경고를 하나 띄운다는 말씀이시죠? 이건 정말 오래된 문제이고 조금만 검색해 보면 예제가 수천만 개 나오는 사례이기 때문에 여기서는 대략의 얼개만 보여 드리겠습니다.

    (테스트해보지 않은 코드입니다. 시도해 보세요.)

    20세기식 방법: 맨 끝에 return true; 대신 이걸 씁니다.

    header('Content-Type: text/html; charset=UTF-8');
    echo "<script>alert('성공적으로 전송되었습니다.'); window.location.href='http://www.studiojpg.co.kr'</script>";
    

    21세기식 방법: 이 PHP 스크립트를 ajax로 콜하도록 HTML 폼의 JS를 조정합니다. (PHP 소스는 메일발송 성공 시 echo 'success';로 문자열을 반환한다고 가정)

    <script>
    var form = document.getElementById('send_mail');
    form.addEventlistener('submit', function (e) {
        e.preventDefault();
        var xmlhttp = new XMLHttpRequest();
        var emailData = new FormData(e.target);
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                if (this.responseText == 'success') {
                    alert('성공적으로 전송되었습니다.');
                    window.location.href = 'http://www.studiojpg.co.kr';
                } else {
                    alert('실패적으로 전송되었습니다. 다시 해 주세요.');
                    return false;
                }
            } else {
                alert('서버 오류!! '+this.status);
            }
        };
        xmlhttp.open("POST", "sendmail.php");
        xmlhttp.send(emailData);
    });
    </script>
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)