PHP联系表 - 希望在发送后留在我的网站上

时间:2010-10-03 13:37:17

标签: php forms echo contact

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

如果发送按钮被点击我想在我的网站上保持 ,显示一个空的联系表格,也许在联系表格下面只有一行,说“谢谢.....”

我怎样才能做到发生了吗?有没有任何代码片段可以向我解释我必须包含在我的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
也许你可以指出我正确的方向。当然,周围的所有人都会感谢你的帮助。

2 个答案:

答案 0 :(得分:7)

设置表单以将数据发送到同一页面,让脚本监听提交。类似的东西:

<强> 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 -->

<强>更新

考虑到提供的额外信息,我个人会通过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;
});

希望这有帮助!

答案 1 :(得分: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