2010-10-03 69 views
2

我正在創建一個PHP聯繫表格的過程中,我所擁有的是這個小問題,與我的PHP腳本,當電子郵件發送出來一個新的「謝謝」頁面被稱爲。所以與聯繫表格的實際網站消失,但我不希望發生。

如果發送按鈕被擊中,我想留在我的網站,顯示一個空的聯繫表格,也許下面的聯繫表格只有1行,說「謝謝你.....」

我該如何做到這一點?是否有任何代碼片斷可以向我解釋我必須包括到我的HTML和我的PHP文件?希望它會......下面是我的PHP如何結束現在。PHP聯繫表格 - 想要留在我的網站後發送

// send Email 
if (@mail($empfaenger, htmlspecialchars($betreff), $mailbody, $mailheader)) 
{ 
    // if email was successfully send 
    echo 'Thank you for your Email. We will get in touch with you very soon.'; 
} 

編輯
@FreekOne
目前我使用你的代碼稍加修改,因爲我想使感謝您和或錯誤面板使滑出,並在文本褪色。腳本正在接受我的代碼(因爲它仍在工作),但實際上我看不到文本實際上已經淡入。我已經看到滑動面板的樣本在文本中淡入淡出。所以這似乎是我做的一種錯誤的編碼。
如果你願意,請在這裏查看代碼:
http://jsbin.com/ohuya3
也許你可以指點我正確的方向。當然,如果你們周圍的人們都能提供幫助,

回答

8

設置表單將數據發送到同一頁面,並讓腳本偵聽提交。喜歡的東西:

contact.php

<?php 
// Check if form was previously submitted 
if(isset($_POST['myFormSubmitted'])) { 
    // Do your form processing here and set the response 
    $response = 'Thank you for your Email. We will get in touch with you very soon.'; 
} 
?> 
<!-- HTML here --> 
<?php 
if (isset($response)) { // If a response was set, print it out 
    echo $response; 
} 
?> 
<form method="POST" action="contact.php"> 
    <!-- Your inputs go here --> 
    <input type="submit" name="myFormSubmitted" value="Submit"> 
</form> 
<!-- More HTML here --> 

UPDATE

考慮提供額外的信息,我會親自用jQuery做,通過AJAX。首先,設置您的形式和結果的容器:

HTML

<form id="myForm" method="POST" action="contact.php"> 
    <input type="text" id="name" name="name"> 
    <input type="text" id="email" name="email"> 
    <input type="text" id="message" name="message"> 
    <input type="submit" name="myFormSubmitted" value="Submit"> 
</form> 
<div id="formResponse" style="display: none;"></div> 

然後安裝的PHP腳本處理提交的數據,並輸出響應。

PHP(contact.php)

<?php 
if(isset($_POST['myFormSubmitted'])) { 
    // Do your form processing here and set the response 
    echo 'Thank you for your Email. We will get in touch with you very soon.'; 
} 
?> 

最後,jQuery的腳本,將提交表單,而不必離開頁面並插入結果在結果的容器(有一個很好的和簡單的淡入影響)。

jQuery的

$("#myForm").submit(function() { 
    $.post('contact.php', {name: $('#name').val(), email: $('#email').val(), message: $('#message').val(), myFormSubmitted: 'yes'}, function(data) { 
     $("#formResponse").html(data).fadeIn('100'); 
     $('#name, #email, #message').val(''); /* Clear the inputs */ 
    }, 'text'); 
    return false; 
}); 

希望這有助於!

+0

@FreekOne我認爲您的解決方案非常接近我想要什麼,但我需要一些時間來弄清楚如何使用它。這是一個完全不同的方法。現在我正在使用這樣的文本佔位符的郵件主體:
$ mailbody = file_get_contents('mailbody.txt'); ('name ###',htmlspecialchars($ name),$ mailbody); \t $ mailbody = str_replace('### EMAIL ###',$ email,$ mailbody); ('### NACHRICHT ###',htmlspecialchars($ nachricht),$ mailbody);

我不再需要這個了 - 對嗎?但是,如果JavaScript被禁用會發生什麼? – markimark 2010-10-03 15:02:20

+0

爲什麼我不能在該評論部分使用任何代碼,對此抱歉........希望你瞭解反正..... – markimark 2010-10-03 15:03:08

+0

不,你仍然需要這個,你也必須定義'$ name','$ email','$ nachricht'。如果JS被禁用,表單仍然會被正確提交,儘管用戶只會看到一個帶有「謝謝」信息的白頁。 – 2010-10-03 15:07:05

1

以下所有答案都是錯誤的。它會讓你偶爾發送垃圾信息並混淆顧客。

雖然該解決方案是有點棘手

所有你必須學習的金科玉律首先:
處理POST請求後,你的代碼應該使用GET方法重定向瀏覽器。沒有例外。

因此,首先要像這樣

if ($_SERVER['REQUEST METHOD']=='POST') { 
    mail($empfaenger, htmlspecialchars($betreff), $mailbody, $mailheader); 
    header("Location: ".$_SERVER['PHP_SELF']); 
    exit; 
} 
// your form goes here 

你應該也會這麼做吧。

接下來,如果你仍然想顯示這個無用的消息,你有幾種方法來做到這一點。

  • 使用GET參數
  • 使用的cookie
  • 伊辛AJAX。

例如,使用GET參數

if ($_SERVER['REQUEST_METHOD']=='POST') { 
    mail($empfaenger, htmlspecialchars($betreff), $mailbody, $mailheader); 
    header("Location: ".$_SERVER['PHP_SELF']."?thanks"); 
    exit; 
} 
if ($_SERVER['QUERY_STRING']=='thanks') { 
    echo 'Thank you for your Email. We will get in touch with you very soon.'; 
} 
// your form goes here 
+0

我一直以來都是這樣做的,而且從來沒有一次有過這樣的信息。然而,我對你在處理POST請求後使用GET重定向所說的話感興趣。這是爲了避免雙重發布還是有更多的呢? – 2010-10-03 14:17:45

+0

@FreekOne - 基本上,如果用戶在POST請求後點擊F5/refresh,他們將被提示重新發送數據。用戶說是,他們的數據是第二次處理。 – chigley 2010-10-03 14:26:11

+0

@Co。 Shrapnel
感謝您的幫助,我明白您的意思,但恐怕我不得不解釋一些細節。聯繫表格是1頁垂直/水平滾動設計的一部分。這就是訪客永遠不應該離開網站的原因。因此它被設置爲一個普通的html頁面,其中包含action =「mail.php」的表單,這是我單獨的php文件。在那個php文件中,我從開始時發佈的代碼片段中獲得了該代碼。不,我試圖找出我需要修改的地方。什麼在我的PHP文件和什麼在我的HTML文件。 – markimark 2010-10-03 14:31:05