2

我正在创建一个 PHP 联系表单,我所拥有的只是我拥有的 php 脚本的一个小问题,当电子邮件发送出去时,会调用一个新的“谢谢”页面。所以实际的网站联系表格消失了,但我不希望发生这种情况。

如果点击发送按钮,我想在我的网站上,显示一个空的联系表格,并且可能在联系表格下方只有 1 行,说“谢谢......”

我怎样才能做到这一点?是否有任何代码片段可以向我解释我必须包含在我的 html 和我的 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
也许您可以为我指明正确的方向。当然,这里的所有人都会提供帮助。

4

2 回答 2

7

将表单设置为将数据发送到同一页面,并让您的脚本监听提交。就像是:

联系人.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 -->

更新

考虑到提供的额外信息,我个人会通过 AJAX 使用 jQuery 来完成。首先,为结果设置表单和容器:

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;
});

希望这可以帮助 !

于 2010-10-03T13:46:57.107 回答
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
于 2010-10-03T14:08:24.197 回答