Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-刷新包含';的页面;?var=值';_Php - Fatal编程技术网

PHP-刷新包含';的页面;?var=值';

PHP-刷新包含';的页面;?var=值';,php,Php,我正在使用PHP和MySQL开发courier应用程序,遇到了一个小错误。比如说,我有一个页面添加了一个新的装运(add.php)。填写详细信息并单击表单中的“提交”按钮后,将触发addShipping.php,其中包含将新装运添加到sql表的代码。如果数据输入成功,将执行以下代码: header("location:add.php?add=success"); 因此,add.php页面将重新加载URL“add.php?add=success”,并显示一个警告框,提示数据已成功插入。该警报框通

我正在使用PHP和MySQL开发courier应用程序,遇到了一个小错误。比如说,我有一个页面添加了一个新的装运(add.php)。填写详细信息并单击表单中的“提交”按钮后,将触发addShipping.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;
    }
}
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']); 
}
if(isset($\u GET['add']))
{
开关($\u GET['add']))
{
案例“无效”:
echo“警报('请填写所有字段');”;
打破
“失败”案例:
echo“警报('您的数据未成功插入');”;
打破
“成功”案例:
echo“警报(‘您的数据已成功添加’);”;
打破
}
}
工作正常,但每次刷新页面时,我都会收到相同的警报框,因为URL仍然包含
?add=success
。我希望add.php页面不包含插入数据后的值,但仍然显示警报消息。有什么想法吗


谢谢

用消息ID替换URL中的
成功

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

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


如果出现另一个相同ID的请求,请不要包含警报(或重定向到URL,并在末尾显示查询字符串)。

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

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

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

header("location:add.php");
然后在页面底部:

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;
    }
}
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']); 
}
if(isset($\u会话['message']))
{
开关($\u会话['message']){
案例“无效”:
echo“警报('请填写所有字段');”;
打破
“失败”案例:
echo“警报('您的数据未成功插入');”;
打破
“成功”案例:
echo“警报(‘您的数据已成功添加’);”;
打破
}
//不再显示此消息
取消设置($_会话['message']);
}

别忘了在代码顶部的某个地方调用session\u start。

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


这是我们第一次查看此页面或是否单击“提交”按钮时可以进行检查的方式。URL不会更改。因此,当我们刷新页面时,不会弹出警告消息。只需使用$\u POST[]而不是$\u GET[]

您需要在警告数据可能重复后重置标题部分。您是否真的进行填充重新加载?这看起来很难看,速度很慢,并且会导致这样的问题。为什么不改为通过ajax请求发送请求,并在已加载的页面中显示成功消息?您可以始终将它们添加到$\u会话或使用另一个get变量。或者将add=success更改为add=pending,显示消息,然后将其更改为success-via-
标题('位置:…
重定向到不包含add表单的任何其他页面