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

发布和感谢消息后的PHP重定向,php,forms,redirect,post,Php,Forms,Redirect,Post,这是我的第一个问题,我希望不要做错 我在我的网站上使用了一个简单的表单,下面是mailer php代码: <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $from = 'xxxxx'; $to = 'xxxx@xxxx.com'; $subject = 'xxxxx'; $human = $_POST['h

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

我在我的网站上使用了一个简单的表单,下面是mailer 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)如果可能,为我指出改进反垃圾邮件系统的正确方向


提前谢谢!!;)

您可以使用php头函数:

header('Refresh: 2; url=http://google.com');
2(刷新后:)是秒数,url是url。(也可以与您的域相关,如:“/success.php”)

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

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

您还可以使用标题(“Location:myResponsePage.php”),它是即时的,而不是包含延迟

您可以使用多种方法来限制垃圾邮件/机器人程序处理表单。这些检查的范围从(正如SimonEritsch在下面提到的)到在表单的任意一侧执行您自己的附加检查。例如:

  • 检查推荐人实际上是您自己网站上的提交页面,并且数据不是来自其他地方
  • 也许在提交表单之前必须访问的流程的其他阶段创建一个会话变量。然后还可以将其作为隐藏的表单变量传递。如果传递的值不正确或会话值不存在,则可能没有遵循所有进程
  • 有一个问题,但我个人不建议这样做。不过很有趣

  • 你可以用很多东西。仔细看一看,比如这篇文章“”,或者这两篇文章都是如此。

    在你的代码中,你可以使用一个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>';
    
                    $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解决方案,如,该解决方案要求用户单击
    I not a robot
    框以继续:


    谢谢cybermonkey,你能告诉我如何在我的代码中使用它吗?@Diego我不使用任何Recaptcha解决方案,因为我不运行任何网站(需要它),但实施过程有很好的文档记录。没关系,我会找到Recaptcha,我的意思是你给我的标题代码。@Diego不清楚你的
    谢谢你
    代码在哪里,因为它不是英文的,我翻译它有困难。是这句话:
    echo'sumensaje ha sido enviado correctante

    ",?请查看我的编辑并给出反馈。是的,这是正确的一行。我试过了,但我的朋友认为它不起作用。