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