联系表单发送空白电子邮件


Contact form sends blank emails

我的联系人表单不包含邮件中的消息和其他信息。

有'Unknown sender'和'No subject'。电子邮件包含我的标签(from:, subject:, message:),但后面没有内容。

我已经尝试了一些其他的脚本,但他们给出了相同的结果。

My JS code

(function($){
$(document).ready(function() {
    $('#submit-form').click(function(e){
        e.preventDefault();
        var reg = /^([A-Za-z0-9_'-'.])+'@([A-Za-z0-9_'-'.])+'.([A-Za-z]{2,4})$/;
        var name  = $('#rp_name').val(),
            email  = $('#rp_email').val(),
            subject  = $('#rp_subject').val(),
            message  = $('#rp_message').val(),
            data_html,
            success = $('#success');
        if(name === ""){
            $('#rp_name').val('Please enter your name.');
        }
        if(subject === ""){
            $('#rp_subject').val('Please enter your name.');
        }
        if(email === ""){
            $('#rp_email').val('Your email is required.');
        }else if(reg.test(email) === false){
            $('#rp_email').val('Invalid Email Address.');
        }
        if(message === ""){
            $('#rp_message').val('Message is required.');
        }
        if(message !== "" && name !== "" && reg.test(email) !== false) {
            data_html = "name=" + name + "&email="+ email + "&message=" + message + "&subject="+ subject;
            alert(data_html);
            $.ajax({
                type: 'POST',
                url: 'php_helpers/contact_form.php',
                data: data_html,
                success: function(msg){
                    if (msg == 'sent'){
                        success.html('<div class="alert alert-success">Message <strong>successfully</strong> sent!</div>')  ;
                        $('#rp_name').val('');
                        $('#rp_email').val('');
                        $('#rp_message').val('');
                    }else{
                        success.html('<div class="alert alert-error">Message <strong>not</strong> sent! Please Try Again!</div>')  ; 
                    }
                }
            });
        }
        return false;
    });
});
})(jQuery);

PHP代码

<?php
$to = 'email'; // I changed it 
$subject = $_POST['subject'];
if($to) {
$name = $_POST['name'];
$email = $_POST['email'];
$fields = array(
    0 => array(
        'text' => 'Imie',
        'val' => $_POST['name']
    ),
    1 => array(
        'text' => 'Email',
        'val' => $_POST['email']
    ),
    2 => array(
        'text' => 'WIADOMOSC',
        'val' => $_POST['message']
    )
);
$message = "";
foreach($fields as $field) {
    $message .= $field['text'].": " . htmlspecialchars($field['val'], ENT_QUOTES) . "<br>'n";
}
$$headers  = 'MIME-Version: 1.0' . "'r'n";
$headers .= 'Content-type: text/html; charset=utf-8' . "'r'n";
$headers .= 'From: '. $email . "'r'n" . 'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
if ($message){
echo 'sent';
}else{
echo 'failed';
}
} else {
echo "Don't access this file directly"; 
}
?>

当我检查您的contact.php文件代码是ok的。但是如果使用firefox,你需要一样东西。请安慰您的代码。我的意思是,当你打开firebug时,会有一个控制台选项。有了帮助,你可以检查你的值和变量是要走还是空。

我认为你的值不去PHP文件。使用控制台,你可以很容易地修改你的值。

检查您的php脚本是否接收到姓名,电子邮件和消息。你可以用

来检查
var_dump($_POST);

如果服务器没有接收到这些变量,尝试发送data_html作为一个对象:把

data: data_html,

data: {name: name, email: email, message: message}

我没有测试它,但我总是使用这种方式从js发送数据到服务器

您在行中使用了两个美元符号:$$headers = 'MIME-Version: 1.0'。"' r ' n";
请删除"$",然后再试。

感谢大家的回复。我终于找到了解决办法。我以前没有使用过firebug,但多亏了它,我可以找到错误信息。现在脚本运行正常。

它不是在代码,但在。htaccess重写规则为。php文件,这是建议301错误的ajax请求(…/contact.php).

我有一个。php页面(文件上传器),我认为为它添加另一个seo友好的链接规则将是一个好主意。