2014-11-02 143 views
0

我試圖通過聯繫表單發送郵件。該腳本被執行並將郵件發送到我的電子郵件,但無法捕獲數據......它顯示爲空白。PHP腳本發送郵件但未顯示錶單數據

這裏是我的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 = '[email protected]';//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模板..它是都在那裏......我試着許多方法來修改它,但它不捕獲表單數據。

任何建議...請檢查。

+0

在你的代碼中刪除@這是不好的做法,它是壓制錯誤信息。請刪除並檢查。以便您可以跟蹤錯誤。 – Asik 2014-11-02 06:08:02

回答

0

以上都不適用於我。只是有在底層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

您的內容位於名爲$message的變量中。您將一個名爲$body的人傳遞給mail()。如果你有錯誤報告打開php會報告給你。

$success = mail($email_to, $subject, $mesage, 'From: <'.$email_from.'>'); 

僅供參考,使用@來抑制錯誤是一種不好的做法。它只會使調試更加困難,而不是處理潛在錯誤的正確方法。

+0

$ body包含所有聯繫方式(姓名,電子郵件,主題,消息),我在該行中找不到任何問題。 – Asik 2014-11-02 06:14:10

1
  1. php中的函數之前的「@」符號將抑制任何錯誤消息。在您的應用程序準備好部署之前,最好不要使用它們。我建議刪除這些內容,直到所有內容都按照你的意願工作。

  2. 我建議在處理之前驗證用戶輸入。有幾個在線腳本,您可以使用相同的。

  3. 要解決當前的問題,使用:$success = @mail($email_to, $subject, $message, 'From: <'.$email_from.'>');

0

步驟來解決錯誤:

1)檢查這些變量存儲數據:

$name = @trim(stripslashes($_POST['name'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 

由一個回波一個。

2)然後將它們傳遞給$body變量。

3)使用適當的標題與內容類型和來自和回覆標籤。

試試這一個,如:

$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<[email protected]>' . "\r\n"; 
// Mail it 
mail($to, $subject, $body, $headers);  
1

注意閱讀答案的評論。在那裏我解釋,爲什麼你能夠發送郵件。而不是其他值

Like 更改這些行。 注意使用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 = '[email protected]';//replace with your email 

您的其他值取決於您的表單。 這些值。你沒有通過你的形式獲得這些價值。

$name = @trim(stripslashes($_POST['name'])); 
    $email = @trim(stripslashes($_POST['email'])); 
    $subject = @trim(stripslashes($_POST['subject'])); 
    $message = @trim(stripslashes($_POST['message'])); 

評論兩不要在生產中使用@。因爲它抑制了錯誤。在生產過程中錯誤信息很重要。

評論三總是衛生或驗證用戶輸入。出於安全目的。

0

解決方案:

1)在/ JS打開文件main.js

2)找到//接觸形式

3)代替代碼:

jQuery的(函數($){ '使用嚴格',

$('.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