PHP重新加载问题

PHP重新加载问题,php,post-redirect-get,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 isValid

我有以下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);如何解决此问题?

1)您不应该使用$\u请求,因为它会为您的应用程序带来一些安全问题。改用$\u POST


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

Dude refresh意味着再次发送请求,该请求将包含也要重新发送的变量。。 这就是为什么许多网站在提交后会如此谨慎地不刷新

但是有一个解决办法

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

header('Location: http://www.example.com/contact.php');
这样,它会将页面请求重新发送到同一页面,但这次没有变量


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

此问题的解决方案称为

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


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

无论如何,这将有助于刷新。请注意,标题前不能有任何输出(即使是空白)

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


当然,当设置了
$submit
时,您必须设置此选项,否则不能设置。

您可以取消设置var$submit,但不能取消设置$\u请求['submit']


因此,在每次重新加载时,您再次设置$submit,并且数据仍然存储在$\u请求数组中:)

您从
$\u POST
$\u get
中获得
$\u请求
数据?无论哪种方式,重新加载页面时提交都是正常行为。但是如果您使用
$\u GET
您可以尝试在成功提交时用javascript更改
窗口。位置
。@user873286然后您应该使用$\u POST而不是$\u REQUEST。快速而肮脏的解决方案的可能重复是在成功提交时用
回显小表单。LOL@Rajat“Dude refresh意味着再次发送请求”杜德试着这样做,然后评论:制作一个表单,将动作作为另一个页面,并在该动作页面上将数据插入数据库…然后让您的用户保持该动作页面,并刷新该页面..并检查您的数据库..使用(f5)或刷新按钮..问题是:主页、关于、联系人都在同一页面中。一页设计。所以在提交表单后,如果有错误,我会输出错误,否则我会回显成功。因此,每当我刷新页面时,它都会尝试重新发送。我认为取消设置$submit是可能的,为什么不可能?如果您单击url并再次输入,刷新将不会再次发送变量。这样您就向服务器发出了新请求。因为如果您的用户在提交变量后手动刷新页面(通过f5)它将再次发送变量。在我的脚本之前和之后都有html元素,我希望在提交联系人详细信息后,它会显示javascript警报并保持在同一页面上,但在第一次打开页面时,我的意思是,如果用户要刷新页面,它不应该再次发送相同的值并尝试发送消息