PHP-刷新包含'?var = value'

时间:2015-08-01 09:06:42

标签: php

我正在使用PHP和MySQL开发一个快递应用程序,我遇到了一个小错误。说,我有一个页面添加了一个新的货物(add.php)。在填写详细信息并单击"提交"在表单中的按钮,addshipment.php被触发,其中包含将新货件添加到sql表的代码。如果成功输入数据,将执行以下代码:

header("location:add.php?add=success");

因此,add.php页面将使用URL "add.php?add=success"重新加载,并带有一个警告框,表示数据已成功插入。该警报框通过页面底部的以下代码执行:

if(isset($_GET['add']))
{
    switch($_GET['add'])
    {
        case "invalid":
            echo "<script>alert('Please fill all the fields');</script>";
            break;
        case "fail":        
            echo "<script>alert('Your data was not inserted successfully');</script>";
            break;
        case "success": 
            echo "<script>alert('Your Data was Added Successfully');</script>";
            break;
    }
}

工作正常,但每次刷新页面时,我都会收到相同的提醒框,因为网址仍然包含?add=success。我希望add.php页面在数据插入后不包含值,但仍显示警告消息。有什么想法吗?

由于

3 个答案:

答案 0 :(得分:0)

使用邮件ID替换URL中的success

将消息存储在与ID关联的数据库中。

请求ID后,生成带有警报的页面,然后将数据库中的消息标记为已显示(或完全删除)。

如果有另一个相同ID的请求,请不要包含警报(或重定向到最后带有查询字符串的URL)。

答案 1 :(得分:0)

此问题的常见解决方案是将消息存储在会话中并在显示后将其删除。许多框架都包含适当的mechasnim(例如,Zend Framework有FlashMessenger)。

你也可以自己创建这样的机制,这很简单。最基本的用法可能如下所示:

// put any message in $_SESSION['message'] BEFORE redirection
$_SESSION['message'] = 'success';

header("location:add.php");

然后在页面底部:

if(isset($_SESSION['message']))
{
    switch($_SESSION['message']) {
        case "invalid":
            echo "<script>alert('Please fill all the fields');</script>";
            break;
        case "fail":        
            echo "<script>alert('Your data was not inserted successfully');</script>";
            break;
        case "success": 
            echo "<script>alert('Your Data was Added Successfully');</script>";
            break;
    }

    // do not display this message again
    unset($_SESSION['message']); 
}

不要忘记在代码顶部的某处调用session_start。

答案 2 :(得分:-1)

我们需要使用提交按钮的名称。如果单击提交按钮,则需要从表单中获取值。然后我们可以检查是否单击了提交按钮。 假设提交按钮的名称是&#34;提交&#34;。然后:

if (isset($_POST[submit]))
{
  /* do the form validation and processing here. */ 
}

这是我们第一次查看此页面或是否单击“提交”按钮的方式。网址不会改变。因此,当我们刷新页面时,警报消息不会弹出。只需使用$ _POST []而不是$ _GET []。