2014-01-24 45 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