PHP重装问题

时间:2012-01-02 16:51:53

标签: php post-redirect-get

我有以下php脚本:

<?php

$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$subject = $_REQUEST['subject'];
$message = $_REQUEST['message'];
$submit = $_REQUEST['submit'];
$to = "torayevagajan@gmail.com";

if(isset($submit))
{

    function isValidEmail($email)
    {
        return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);
    }

    if(!empty($name) && !empty($email) && !empty($message) && isValidEmail($email))
    {
        $text = "From: ".$email."<br>Name: ".$name."<br>".$message;
        if(mail($to, $subject, $text) && !empty($submit)){
            echo "<script type=\"text/javascript\">alert(\"Your message has been sent!\");</script>";
            }
        else{
            echo "<script type=\"text/javascript\">alert(\"Error Occured!\");</script>";
            }
    }elseif(empty($name) || empty($email) || empty($message))
    {
        echo "<script type=\"text/javascript\">alert(\"Please fill in the all fields!\");</script>";
    }else echo "<script type=\"text/javascript\">alert(\"Incorrect email format!\");</script>";

    unset($submit);
}
?>

我有以下问题,在提交详细信息后联系php,每当我想刷新页面时,它会一次又一次地尝试发送邮件,我的意思是它试图运行脚本,即使我未设置($ submit);怎么解决这个问题?

5 个答案:

答案 0 :(得分:2)

此问题的解决方案称为Post Redirect Get

您可以在此处查找示例代码解决方案:

Simple Post-Redirect-Get code example

答案 1 :(得分:0)

1)您不应该使用$ _REQUEST,因为它会为您的应用程序打开一些安全问题。请改用$ _POST。

2)为什么需要刷新联系页面?另一种方法是使用单独的脚本来处理表单提交,然后在完成后重定向回原始联系页面。

答案 2 :(得分:0)

Dude刷新意味着再次发送请求,其中包含的变量也将被重新发送。 这就是为什么许多网站在提交后都不会刷新这种谨慎的原因......

但是有一个解决方案..

发送邮件后,将脚本重定向到同一页面。

header('Location: http://www.example.com/contact.php');

这样它会将页面请求重新发送到同一页面,但这次没有变量..

或者在成功发送邮件后将其发送到另一个页面..

答案 3 :(得分:0)

刷新页面时,浏览器会从表单重新发送POST数据。取消设置$submit对您没有任何好处,因为每次执行脚本时都会再次设置它。虽然我不确定刷新页面的目标是什么,但在脚本完成后,您必须编写代码来刷新页面。 (除非您想使用会话来检测是否已提交该表单。)

无论如何,这将有助于刷新。请注意,在标题之前不能有任何输出(甚至是空格)。

<?php header('Refresh: 0'); ?>

当设置$submit时,你当然必须这样做,而不是。

答案 4 :(得分:0)

你取消了var $ submit,但没有设置$ _REQUEST ['submit']。

所以在每次重新加载时,你再次设置$ submit,数据仍然存储在$ _REQUEST数组中:)