簡體   English   中英

PHP腳本發送郵件但不顯示表單數據

[英]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.'>');

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

  1. PHP函數之前的“ @”符號將禁止顯示任何錯誤消息。 最好在您的應用程序准備好進行部署之前不要使用它們。 我建議將其刪除,直到一切正常為止。

  2. 我建議在處理用戶輸入之前先對其進行驗證。 您可以使用幾種在線腳本來實現同一目的。

  3. 要解決當前問題,請使用: $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM