发布后的PHP重定向和谢谢消息

时间:2015-01-12 17:13:44

标签: php forms redirect post

这是我的第一个问题,我希望不要做错。

我在我的网站上使用一个简单的表格,这是邮件程序的PHP代码:

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'xxxxx'; 
    $to = 'xxxx@xxxx.com'; 
    $subject = 'xxxxx';
    $human = $_POST['human'];

    $body = "De: $name\n E-Mail: $email\n Mensaje:\n $message";

    if ($_POST['submit']) {
        if ($name != '' && $email != '') {
            if ($human == '4') {                 
                if (mail ($to, $subject, $body, $from)) { 
                echo '<p>Su mensaje ha sido enviado correctamente!</p>';
            } else { 
                echo '<p>Ocurrió un error, porfavor vuelva e intentlo de nuevo!</p>'; 
            } 
        } else if ($_POST['submit'] && $human != '4') {
            echo '<p>Su respuesta anti-spam es incorrecta!</p>';
        }
        } else {
            echo '<p>Por favor, rellene todos los campos obligatorios!!</p>';
        }
    }
?>

1)我想在谢谢你的消息之后重定向到索引!!我找不到这样做的方法。

2)如果可行的话,请指出正确的方向来改进反垃圾邮件系统。

提前致谢!! ;)

3 个答案:

答案 0 :(得分:0)

您确实可以使用SimonEritsch所述的php标头重定向。但是,如果表单有问题,请注意不要重定向,因为您很可能需要再次显示/重新呈现表单以允许用户更正错误。只有在成功时才会重定向。

你也可以立即使用标题(&#34;位置:myResponsePage.php&#34;),而不是加入延迟。

您可以采用多种方法来限制垃圾邮件/机器人处理表单。这些范围从captures such as that from Google(再次由SimonEritsch提到)到在表单的任一侧执行您自己的附加检查。例如:

  1. 检查引荐来源实际上是您自己网站上的提交页面,而且数据并非来自其他地方。
  2. 也许在提交表单之前必须访问的流程的其他阶段创建会话变量。然后,您还可以将其作为隐藏的表单变量传递。如果传递的值不正确或会话值不存在,则可能无法跟踪所有进程。
  3. 有一个simple "blank field" trick,但我个人不建议JUST这样做。虽然有意思。
  4. 你可以使用很多东西。好好看看这篇文章&#34; Stop spam without Captcha&#34;或Practical non-image based CAPTCHA approaches这两个都在SO。

答案 1 :(得分:0)

在您的代码中,您可以使用PHP header来使页面重定向,但是您可能想要合并延迟以便用户看到谢谢你&#39;消息。

例如,您可以使用:

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'xxxxx'; 
    $to = 'xxxx@xxxx.com'; 
    $subject = 'xxxxx';
    $human = $_POST['human'];

    $body = "De: $name\n E-Mail: $email\n Mensaje:\n $message";

    if ($_POST['submit']) {
        if ($name != '' && $email != '') {
            if ($human == '4') {                 
                if (mail ($to, $subject, $body, $from)) { 
                echo '<p>Su mensaje ha sido enviado correctamente!</p>';

                $redirSec = 3;
                $redirPage = "http://example.com/secretarea";
                header("Refresh: ". $redirSec ."; url=". $redirPage);
            } else { 
                echo '<p>Ocurrió un error, porfavor vuelva e intentlo de nuevo!</p>'; 
            } 
        } else if ($_POST['submit'] && $human != '4') {
            echo '<p>Su respuesta anti-spam es incorrecta!</p>';
        }
        } else {
            echo '<p>Por favor, rellene todos los campos obligatorios!!</p>';
        }
    }
?>

至于您的反垃圾邮件人工验证,您应该尝试使用Recaptcha解决方案,例如one offered by Google,要求用户点击I'm not a robot框以继续:

enter image description here

答案 2 :(得分:-1)

您可以使用php标头功能:

header('Refresh: 2; url=http://google.com');

2(刷新后:)是第二个url和url。 (也可以是相对于您的域名:“/success.php”)

关于你的反垃圾邮件系统:我不能说太多,因为我只看到你得到了POST值。 (但不是它来自何处或它是什么) 但谷歌“Captchas”或Howtos可以了解如何制作它们。