php表单不会做最后一步

时间:2014-01-24 01:39:17

标签: php ajax

我找到了一个使用fancyBox的简单联系表单的教程。我能够将表单应用到我的网站,然后修改表单的代码以满足我的需求。但我的表格不起作用。 一旦我将所有信息输入到表单中,然后按下发送电子邮件按钮,按钮就会消失,我会收到“发送...”,如果所有字段都是“真实”,则应该这样做。但是它不想做最后一步来运行php文件。

该表单还带有必要的php文件,但它不会发送它。

php文件是否必须位于网站的特定位置?我试图将它从几个不同的地方放置但无济于事。

<div id="inline">

<form id="contact" name="contact" action="#" method="post">

    <label for="name">Your Name </label>
    <input type="text" id="name" name="name" class="txt">
    <br>
    <label for="email">Your E-mail</label>
    <input type="email" id="email" name="email" class="txt">
    <br>
    <label for="msg">Enter a Message</label>
    <textarea id="msg" name="msg" class="txtarea"></textarea>

    <button id="send">Send E-mail</button>
</form>
</div>


<script type="text/javascript">
function validateEmail(email) { 
    var reg = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    return reg.test(email);
}

$(document).ready(function() {
    $(".modalbox").fancybox();
    $("#contact").submit(function() { return false; });


    $("#send").on("click", function(){
        var nameval   = $("#name").val();

        var emailval  = $("#email").val();
        var msgval    = $("#msg").val();
        var msglen    = msgval.length;
        var mailvalid = validateEmail(emailval);

        var namelen   = nameval.length;

        if(namelen < 2) {
            $("#name").addClass("error");
        }
        else if(namelen >= 2) {
            $("#name").removeClass("error");
        }

        if(mailvalid == false) {
            $("#email").addClass("error");
        }
        else if(mailvalid == true){
            $("#email").removeClass("error");
        }

        if(msglen < 4) {
            $("#msg").addClass("error");
        }
        else if(msglen >= 4){
            $("#msg").removeClass("error");
        }

        if(mailvalid == true && msglen >= 4 && namelen >= 2) {
            // if both validate we attempt to send the e-mail
            // first we hide the submit btn so the user doesnt click twice
            $("#send").replaceWith("<em>sending...</em>");

            $.ajax({
                type: 'POST',
                url: 'sendmessage.php',
                data: $("#contact").serialize(),
                success: function(data) {
                    if(data == "true") {
                        $("#contact").fadeOut("fast", function(){
                            $(this).before("<p><strong>Success! We will respond to your request as soon as possible.</strong></p>");
                            setTimeout("$.fancybox.close()", 1000);
                        });
                    }
                }
            });
        }
    });
});
</script>

sendmessage.php

<?php
$sendto   = "antiques47@aol.com";
$username = $_POST['name'];
$usermail = $_POST['email'];
$content  = nl2br($_POST['msg']);

$subject  = "More information request";
$headers  = "From: " . strip_tags($usermail) . "\r\n";
$headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html;charset=utf-8 \r\n";

$msg  = "<html><body style='font-family:Arial,sans-serif;'>";
$msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>New User Feedback</h2>\r\n";
$msg .= "<p><strong>Sent by:</strong> ".$username."</p>\r\n";
$msg .= "<p><strong>Email:</strong> ".$usermail."</p>\r\n";
$msg .= "<p><strong>Message:</strong> ".$content."</p>\r\n";
$msg .= "</body></html>";


if(@mail($sendto, $subject, $msg, $headers)) {
echo "true";
} else {
echo "false";
}

?>

我尝试将表单上的ACTION更改为特定文件,但它也不起作用。

我注意到ajax部分也有发送message.php的URL,我试图改变它,因此它有一个特定的文件目录,但是没有用。

1 个答案:

答案 0 :(得分:0)

<强>更新

您正在更改邮件标头中的From:属性。一些ISP会阻止这样做的外发电子邮件。这可能是你的问题。注释掉这一行:

$headers  = "From: " . strip_tags($usermail) . "\r\n";

再试一次。

如果失败,请检查AJAX的每一步:

0.1。在sendmessage.php中,将文件的最顶部更改为:

<?php
    die('Got to here');

0.2。然后,回到你的ajax代码块,修改它(暂时),阅读:

        $.ajax({
            type: 'POST',
            url: 'sendmessage.php',
            data: $("#contact").serialize(),
            success: function(data) {
               alert(data);
            }
        });

这至少会告诉你它是否在沟通。

0.3。然后,回显您收到的POST项目,以确保那里没有问题:

PHP:

$username = $_POST['name'];
$usermail = $_POST['email'];
$content  = nl2br($_POST['msg']);

$out = 'username [' .$username. ']';
$out .= 'usermail [' .$usermail. ']';
$out .= 'content [' .$content. ']';
echo $out;

再次,看看ajax success函数回显了什么。