我正在使用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页面在数据插入后不包含值,但仍显示警告消息。有什么想法吗?
由于
答案 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 []。