2013-06-24 101 views
0

我在PHP的非常新的,但即便如此,這沒有任何意義,我: 我有一個包含PHP形式的HTML頁面如下: ...PHP電子郵件形式不能正常工作

<article id="content"><div class="ic">Here comes the contact form!</div> 
    <div class="wrapper"> 
    <h2>Contact form</h2> 
    <form method="post" id="ContactForm" name="myemailform" action="sendemail.php"> 
    <div> 
    <div class="wrapper"> 
    <span>Nume:</span> 
    <div class="bg"><input type="text" class="input" name="myname"></div> 
    </div> 
    <div class="wrapper"> 
    <span>Adresa:</span> 
    <div class="bg"><input type="text" class="input" name="myadresa" ></div>        
    </div> 
    <div class="wrapper"> 
    <span>Email:</span> 
    <div class="bg"><input type="text" class="input" name="myemail" ></div>         
    </div> 
    <div class="textarea_box"> 
    <span>Mesaj:</span> 
    <div class="bg"><textarea name="textarea" cols="1" rows="1" name="mymesaj"></textarea></div> 
    </div> 
    <a href="#" class="button1" name='submit' value="submit" onclick='javascript: document.myemailform.binset=2; document.myemailform.submit();'>Send message</a> 
    </div> 
    </form> 
    </div> 
    </article> 

和動作sendemail.php如下:

<?php 
if(isset($_POST['submit'])) { 

// EDIT THE 2 LINES BELOW AS REQUIRED 
$email_to = "[email protected]"; 
$email_subject = "Message from contact form"; 

function died($error) { 
// your error code can go here 
echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
echo "These errors appear below.<br /><br />"; 
echo $error."<br /><br />"; 
echo "Please go back and fix these errors.<br /><br />"; 
die(); 
} 

// validation expected data exists 
if(!isset($_POST['myname']) || 
!isset($_POST['myadresa']) || 
!isset($_POST['myemail']) || 
!isset($_POST['mymesaj'])) { 
died('We are sorry, but there appears to be a problem with the form you submitted.');  
} 

$first_name = $_POST['myname']; // required 
$last_name = $_POST['myadresa']; // required 
$email_from = $_POST['myemail']; // required 
$comments = $_POST['mymesaj']; // required 

$error_message = ""; 
$email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
if(!preg_match($email_exp,$email_from)) { 
$error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
} 
$string_exp = "/^[A-Za-z .'-]+$/"; 
if(!preg_match($string_exp,$first_name)) { 
$error_message .= 'The First Name you entered does not appear to be valid.<br />'; 
} 
if(!preg_match($string_exp,$last_name)) { 
$error_message .= 'The Last Name you entered does not appear to be valid.<br />'; 
} 
if(strlen($comments) < 2) { 
$error_message .= 'The Comments you entered do not appear to be valid.<br />'; 
} 
if(strlen($error_message) > 0) { 
died($error_message); 
} 
$email_message = "Form details below.\n\n"; 

function clean_string($string) { 
    $bad = array("content-type","bcc:","to:","cc:","href"); 
    return str_replace($bad,"",$string); 
} 

$email_message .= "Name: ".clean_string($first_name)."\n"; 
$email_message .= "Adresa: ".clean_string($last_name)."\n"; 
$email_message .= "Email: ".clean_string($email_from)."\n"; 
$email_message .= "Mesaj efectiv: ".clean_string($comments)."\n"; 

// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 
?> 
<!-- include your own success html here --> 
Thank you for contacting us. We will be in touch with you very soon. 
<?php 
} 
    ?> 

現在的問題是,我收到郵件,主題是好的,發件人的電子郵件是好的,但該消息是空的...沒有收到$ email_message。 這是怎麼回事? 任何幫助,將不勝感激。 謝謝

+0

檢查郵件發送之前'$ email_message'的輸出。 – Rikesh

+0

在發送郵件之前echo $ email_message,並檢查變量是否包含消息。 – KAsh

+0

您的'clean_string()'函數將無法刪除目標爲大寫的項目(例如'Bcc:'或'Cc:'等)。您的用於驗證電子郵件地址的正則表達式將失敗像[email protected]這樣的地址。英國或[email protected]。所有這些過濾都是必須的,但是可以通過'filter_input_array()'來更好地完成,最後告訴別人他們的名字是無效的,充其量是無禮的! – 2013-06-24 06:32:24

回答

3

的問題是在你

<textarea name="textarea" cols="1" rows="1" name="mymesaj"></textarea> 

有兩個名字與textarea的檢查。

<textarea cols="1" rows="1" name="mymesaj"></textarea> 
+0

謝謝你的觀察Nomi。你是部分正確的。但是,如果(isset($ _ POST ['submit'])) 似乎有問題。我認爲提交不POSTED。在修正了Nomi注意到的現在它的工作後,我用'myemail'取代了'submit'。謝謝大家 –

1

如果你是usinh HTML 5或更高版本...在輸入標籤...它會自動驗證輸入數據是否存在或不使用「必要」 ......

這樣:

<input type="text" class="input" name="myname" required> 

和電子郵件驗證給輸入類型爲電子郵件......不是文本

這樣的:

<input type="email" class="input" name="myemail" required > 

也嘗試ajax,jquery進一步形式驗證..

+0

Prem,我沒有看到代碼,因爲你沒有正確格式化它。您必須在代碼前留下一個空行,並且代碼必須縮進8個空格才能顯示爲未解釋。 –

+0

對不起@CalinM感謝您的提示 –