2014-10-02 3 views
1

아래와 같은 표준 HTML 양식이 제공됩니다. PHP를 사용하여 이메일 보내기

<form method="post" action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>> 
          <div class="row half"> 
           <div class="6u"><input type="text" placeholder="Name" name="name" /></div> 
           <div class="6u"><input type="text" placeholder="Email" name="email" /></div> 
          </div> 
          <div class="row half"> 
           <div class="12u"><textarea name="message" placeholder="Message" name="message"></textarea></div> 
          </div> 
          <div class="row"> 
           <div class="12u"> 
            <ul class="actions"> 
             <li><input type="submit" class="button" value="Send Message" name="submit" /></li> 
             <li><input type="reset" class="button alt" value="Clear Form" name="clear"/></li> 
            </ul> 
           </div> 
          </div> 
         </form> 

다음과 같은 PHP 이메일을 보낼 수

if(isset($_POST['submit'])){ 
    $to = "[email protected]"; // this is your Email address 
    $from = $_POST['email']; // this is the sender's Email address 
    $name = $_POST['name']; 
    $subject = "Website Enquiry"; 
    $message = $name . " wrote the following:" . "\n\n" . $_POST['message']; 
    $headers = "From:" . $from; 
    $headers2 = "From:" . $to; 

    if(isValidString($from) && isValidString($name) && isValidString($message)){ 
     mail($to,$subject,$message,$headers); 
    } 
} 

그러나,이 방법은 몇 가지 문제가 발생합니다. 내 양식은 페이지 하단에 있기 때문에 보내기를 클릭하면 페이지가 다시 리디렉션되고 초점은 페이지의 맨 위로 되돌아갑니다.

전자 메일을 보낸 사실을 사용자가 알 수 있도록 적절한 사용자 피드백을 제공하는 올바른 방법은 페이지로 다시 이동하여 자동으로 아래로 스크롤 할 수 있다는 점입니다. 송신 단추를 초록색으로 변경하거나 어떤 것?

실패한 이유는 더 나은 방법이 있습니까?

감사합니다.

+0

하는 경우를 의견을 보내고 싶습니다. if ($ mail) {header ('Location : form.php? status = success')와 같은 것을 할 수 있습니다. }''''그리고 form.php에''''$ response = $ _GET [ 'status'];를 추가 할 수 있습니다. if ($ response == 'success') {echo "메일을 보냈습니다"; }'''' –

답변

0

양식 동작은 페이지 자체를 가리켜 야합니다 (예 : 사용자의 경우처럼). 그렇지 않으면 유효성 검사에서 오류 메시지를 표시 할 수 있습니다. 양식이 페이지의 상단에없는 경우

당신이 앵커 추가 할 수 있습니다

<h2><a name="theForm">The form</a></h2> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>#theForm"> 

양식 (= 메일 전송) 제대로 처리되는 경우를, 또 다른 페이지로 리디렉션하는 것이 좋습니다이며, 성공 메시지를 보여줍니다. 따라서 F5를 누르면 다시 양식을 제출하지 않고 다른 메일을 보냅니다.

if (mail($to,$subject,$message,$headers)) { 
    // redirect to page showing success message and exit script 
} else { 
    // redirect to page showing error message and exit script 
} 
나는 보통 다시 같은 페이지로 리디렉션,하지만 난 성공 메시지, 오류 메시지 나 형태로 표시할지 여부를 결정 템플릿 내에서 다음 PARAM ( $_SERVER["PHP_SELF"].'?mail_success=1')를 부착하고

:

if (isset($_REQUEST['mail_success'])) { 
    // show success message 
} elseif (isset($_REQUEST['mail_error'])) { 
    // show error message, technical issues, try again bla bla 
} else { 
    // show the form (including validation errors if necessary) 
} 
4

양식 앞에 앵커 링크를 추가하십시오. <a id="anchorName"></a>

양식을 앵커에 게시하십시오.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>#anchorName">

0

당신은 XMLHttpRequest 객체를 사용하여 양식을 제출하고 제출을 눌러의 기본 동작을 취소 할 수 있습니다. jQuery의 .post() 및 event.preventDefault() 메소드는 특히 유용합니다.

관련 문제