[英]PHP script sending mails but not showing form data
我正在嘗試通過聯系表格發送郵件。 該腳本已執行並將郵件發送到我的電子郵件,但無法捕獲數據...顯示為空白。
這是我的HTML代碼:
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
<div class="col-sm-5 col-sm-offset-1">
<div class="form-group">
<label>Name *</label>
<input type="text" name="name" class="form-control" required="required">
</div>
<div class="form-group">
<label>Email *</label>
<input type="email" name="email" class="form-control" required="required">
</div>
<div class="form-group">
<label>Phone</label>
<input type="number" class="form-control">
</div>
<div class="form-group">
<label>Company Name</label>
<input type="text" class="form-control">
</div>
</div>
<div class="col-sm-5">
<div class="form-group">
<label>Subject *</label>
<input type="text" name="subject" class="form-control" required="required">
</div>
<div class="form-group">
<label>Message *</label>
<textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
</div>
</div>
</form>
這是完整的PHP腳本
<?php
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Thank you for contact us. As early as possible we will contact you '
);
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$email_from = $email;
$email_to = 'vishal@gmail.com';//replace with your email
$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;
$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
echo json_encode($status);
die;
實際上,我正在使用HTML模板..一切就在那里...我嘗試了許多修改它的方法,但是它沒有捕獲表單數據。
任何建議...請檢查。
您的內容在名為$message
的變量中。 您將一個名為$body
傳遞給mail()
。 如果您打開了錯誤報告功能,php可能會向您報告。
$success = mail($email_to, $subject, $mesage, 'From: <'.$email_from.'>');
僅供參考,使用@
來抑制錯誤是一種不好的做法。 這只會使調試更加困難,而不是處理潛在錯誤的正確方法。
PHP函數之前的“ @”符號將禁止顯示任何錯誤消息。 最好在您的應用程序准備好進行部署之前不要使用它們。 我建議將其刪除,直到一切正常為止。
我建議在處理用戶輸入之前先對其進行驗證。 您可以使用幾種在線腳本來實現同一目的。
要解決當前問題,請使用: $success = @mail($email_to, $subject, $message, 'From: <'.$email_from.'>');
注意請閱讀答案中的注釋。 我在那里解釋,為什么您能夠發送郵件。 而不是其他值
喜歡更改這些行。 注意使用input type
代替button
<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
對於這些
<input type="submit" name="submit" class="btn btn-primary btn-lg" required="required">
注釋您可以發送mail
因為您在腳本中對其進行了硬編碼
喜歡這條線
$email_to = 'vishal@gmail.com';//replace with your email
您的其他值取決於您的表格。 這些價值。 您沒有通過表單獲得這些價值。
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
注釋兩個在生產中不要使用@
。 因為它抑制了錯誤。 錯誤消息在生產過程中很重要。
注釋三始終清理或驗證用戶輸入。 為了安全起見。
解決錯誤的步驟:
1)檢查這些變量是否正在存儲數據:
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
一一回聲。
2)然后將它們傳遞給$body
變量。
3)使用內容類型正確的標頭以及from和reply標簽。
嘗試這樣的一個:
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers`enter code here`
$headers .= 'To:' . "\r\n";
$headers .= 'From: Admin<youremail@email.com>' . "\r\n";
// Mail it
mail($to, $subject, $body, $headers);
以上這些都不對我有用。 底層javascript只是一個問題...無法獲取數據,序列化表單對我來說效果很好
// 聯系表
var form = $('#main-contact-form');
var data = $form.serialize()
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
type: "POST",
dataType: "json",
data: data,
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
});
});
解:
1)在/ js中打開文件main.js
2)查找//聯系表格
3)將代碼替換為:
jQuery(function($){'use strict',
$('.contact-form').submit(function () {'use strict',
$this = $(this);
$.post("sendemail.php", $(".contact-form").serialize(),function(result){
if(result.type == 'success'){
$this.prev().text(result.message).fadeIn().delay(3000).fadeOut();
}
});
return false;
});
});
4)測試! :D
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.