2014-01-24 18 views
-1

我找到了一个使用fancyBox的简单联系表单教程。我能够将表单应用到我的网站,然后修改表单的代码以满足我的需求。但我的表单不起作用。 一旦我将所有信息放入表单中,然后按下发送电子邮件按钮,该按钮就会消失,并且我得到一个“发送......”,如果所有字段都为“真”,则它应该执行该操作。但它不想执行运行php文件的最后一步。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 = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[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 = "[email protected]"; 
$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"; 
} 

?> 

我试图改变形式向特定文件上的动作,但它也不能工作。

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

+0

这方面的哪个方面不起作用?请求是否发送到'sendmessage.php'脚本?该脚本没有返回响应?如果不是你从PHP获取错误消息? sendmessage.php是否与表单所在页面位于同一目录? –

+0

你确定你的问题不是,'我如何发送一个HTML邮件与PHP的sendmail' – Ohgodwhy

+0

我有sendmessage.php文件在同一页作为窗体和根文件夹。我实际上已将它放置在任何地方,然后调用文件的特定位置。 – jhovapple

回答

0

更新时间:

你正在改变你的邮件头的From:属性。有些互联网服务提供商会阻止那些传出的电子邮件。这可能是你的问题。注释掉该行:

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

并重试。

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

.1。在sendmessage.php中,将文件最顶端改为:

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

.2。然后,回到你的Ajax代码块,修改它(临时)阅读:

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

这至少会告诉你,如果它是沟通。

.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功能回显出来。

+0

我做了更改的时候,表单根本不再出现。 – jhovapple

+0

奇怪的事情正在发生。 “死掉”('got to here')不应该影响表单的形式......它应该影响AJAX的输出 - 除非我们在结尾处理解更多。你需要用AJAX做一些简单的实验。 [尝试这三个](http://stackoverflow.com/questions/17973386/ajax-request-callback-using-jquery/17974843#17974843) - 应该每个约需要5分钟,你应该学习重要的东西(1 )它是如何工作的,以及(2)它有多简单。 – gibberish

+0

我终于明白了!我的服务器需要指定smtp – jhovapple