2012-03-01 5 views
1

PHP를 사용하여 웹 사이트에 대한 피드백 양식을 작성 중입니다. 작동하고 있다고 생각했지만 코드에 화살표가 표시되었습니다.PHP 메일 양식이 작동하지 않습니다.

어쨌든 양식에는 "name", "email", "subject"및 "message"의 4 개의 필드가 있습니다.

네 개의 필드에 모두 내용이 있으면 "메시지 실패"알림이 표시됩니다. 다음

combo 1 - "name", "email", "subject" 
combo 2 - "name", "email", "message" 
combo 3 - "name", "subject", "message" 
combo 4 - "email", "subject", "message" 

결과 말하자면 : 여기는

combo 1 - "Thank you for your message." 
combo 2 - "Thank you for your message." 
combo 3 - "Message failed." 
combo 4 - "Thank you for your message." 

즉 마찬가지로

보면, I는 4 개 조합 날을 제공하는 4 개 개의 필드 3 콘텐츠 테스트 내가 사용하고 HTML 코드 :

012 : 여기

<form action="contact.php" method="post"> 
    <input type="hidden" name="page" value="contact" /> 
    <input type="hidden" name="req" value="submit" /> 
    Your Name: <input type="text" name="name" /> 
    <br/> 
    Your Email: <input type="text" name="email" /> 
    <br/> 
    Subject: <input type="text" name="subject" size="69" /> 
    <br/> 
    Message: 
    <br/> 
    <textarea cols="63" rows="8" name="message"></textarea> 
    </br> 
    <input type="submit" value="Send" /> 
    <input type="reset" value="Clear" /> 
</form> 

그리고는 contact.php입니다

<?php 
    $field_name = $_POST['name']; 
    $field_email = $_POST['email']; 
    $field_subject = $_POST['subject']; 
    $field_message = $_POST['message']; 

    $mail_to = '[email protected]_website.com'; 
    $subject = 'Message from a site visitor '.$field_name; 

    $body_message = 'From: '.$field_name."\n"; 
    $body_message .= 'E-mail: '.$field_email."\n"; 
    $body_message .= 'Subject: '.$field_subject."\n"; 
    $body_message .= 'Message: '."\n"; 
    $body_message .= $field_message; 

    $headers = 'From: '.$field_email."\r\n"; 
    $headers .= 'Reply-To: '.$field_email."\r\n"; 

    $mail_status = mail($mail_to, $subject, $body_message, $headers); 

    if ($mail_status) { ?> 
<script language="javascript" type="text/javascript"> 
    alert('Thank you for your message.'); 
    window.location = './contact.html'; 
</script> 
<?php 
    } 
    else { ?> 
<script language="javascript" type="text/javascript"> 
alert('Message failed.'); 
window.location = './contact.html'; 
</script> 
<?php 
    } 
?> 

코드에 문제가 있습니까? 나는 왜이 일을하는지 이해하지 못합니다.

+1

, 당신은 필드에있는 모든 시간을 같은 값을 입력 않았다 즉 @ 핫메일 thisadress .이메일을 보낼 때마다 – Anton

+0

글쎄, 전자 메일은 실패한 메시지에서 사용되지 않은 유일한 예제이기 때문에 나쁜 예입니다. 그러나 당신은 요점을 얻는다. – Anton

+0

그래, 나는 각 필드에 동일한 값을 넣었다. – Anon

답변

3

Anton의 위대한 답변이지만이 부분을 조금 더 자세히 읽고 그 답을 넓히고 싶습니다.

이메일을 보내려면 누군가가 이메일을 보내도록하고 싶다면 PHP로 하드 코딩해야합니다. (그리고 html5도 멋지지만 피할 수 있으므로 여전히 PHP가 필요합니다). 나는 거기에 부적절하다고 느낄 때 자바 스크립트 비트도 삭제했다. 이것은 내가 시도 할 것이고, 짧은 것이기 때문에 나는 같은 페이지에서 그것을 모두 할 것이다. 많은 미묘한 변화가 있습니다

<?php 
$field_name = $_POST['name']; 
$field_email = $_POST['email']; 
$field_subject = $_POST['subject']; 
$field_message = $_POST['message']; 


//If all required fields are filled 
if (!empty($field_name)&&!empty($field_email)&&!empty($field_message)) 
    { 
    $mail_to = '[email protected]_website.com'; 
    $subject = 'Message from a site visitor: '.$field_name; 

    $body_message = 'From: '.$field_name."\n"; 
    $body_message .= 'E-mail: '.$field_email."\n"; 
    $body_message .= 'Subject: '.$field_subject."\n"; 
    $body_message .= 'Message: '."\n"; 
    $body_message .= $field_message; 

    $headers = 'From: '.$field_email."\r\n"; 
    $headers .= 'Reply-To: '.$field_email."\r\n"; 

    $mail_status = mail($mail_to, $subject, $body_message, $headers); 

    echo "Thank you for your message."; 
    } 

//If not all required fields are filled display form again. 
else 
    { ?> 
    Please fill all the required fields.<br> 

    <form action="" method="post"> 
    <input type="hidden" name="page" value="contact" /> 
    <input type="hidden" name="req" value="submit" /> 

    <?php //The php bits are to retrieve the valid fields ?> 
    Your Name*: <input required type="text" value="<?php echo $field_name; ?>" name="name"/> 
    <br/> 
    Your Email*: <input required type="email" value="<?php echo $field_email; ?>" name="email" /> 
    <br/> 
    Subject: <input type="text" name="subject" value="<?php echo $field_subject; ?>" size="69" /> 
    <br/> 
    Message*: 
    <br/> 
    <textarea required cols="63" rows="8" name="message"><?php echo $field_message; ?></textarea> 
    </br> 
    <input type="submit" value="Send" /> 
    <input type="reset" value="Clear" /> 
    </form> 

    <?php 
    } 
?> 

그렇지 않으면, 전달하는 것은, 당신은 단지이

$field_name = $_POST['name']; 
$field_email = $_POST['email']; 
if (empty($field_email)) $field_email="[email protected]"; 
$field_subject = $_POST['subject']; 
$field_message = $_POST['message']; 

마지막 일이 같은 것을 넣을 수에 대해 상관하지 않는 경우,이 그냥 의사 희망 거의 모든 html 규칙을 따르지 않으므로 코드를 작성하십시오. 당신은

그냥 테스트 (큰 일 등 < HTML> 태그, < 몸> ... 필요;? 조합을 테스트 할 때

+0

나는 여전히 같은 문제가있다. 나는 4 가지 조합을 시도해 보았고 동일한 이슈가있었습니다. 이번에는 "당신의 메시지에 감사드립니다." 하지만 이메일을받지 못했습니다. – Anon

1

문제는 아마 이것이다 : 메일을 보낼 때 메일 헤더에서을을 포함해야 http://php.net/manual/en/function.mail.php

에서

견적. additional_headers 매개 변수를 사용하여 을 설정하거나 php.ini에 기본값을 설정할 수 있습니다. 경고 유사한 오류 메시지가 표시됩니다 이렇게 실패

: 메일() : 실종 헤더 "sendmail_from을"이 "에서"php.ini 파일 또는 사용자 정의로 설정되지 않았습니다. From 헤더는 Windows의 Return-Path도 설정합니다.

즉, 적절한 "보낸 사람 : [email protected]"이 포함 된 헤더가없는 경우 오류가 발생합니다.

관련 문제