解决GET参数在刷新和返回时触发函数的问题


workaround the GET arguments triggering functions on refresh and on "go back"?

我一直在构建一个小型CMS的演示,它将主要用于添加和编辑表单数据库的内容,其中一个要求是有确认对话框和操作成功的消息(或不成功的错误解释)。

我使用jquery ui对话框来处理它。确认对话框出现在按钮点击之前,数据被发送到(单独)php脚本通过POST方法,他们工作得很好。"成功"answers"错误"消息是通过引用带有GET函数处理的url参数的主页来触发的,它们也可以工作。唯一的问题是,如果用户刷新页面,他会再次得到相同的信息(当然,当他转到其他页面然后返回时也会发生这种情况)。对于这个问题是否有一个简单的解决方法,或者是否有合适的替代方案来解决整个消息问题?

代码示例:

主页:

$val=$_GET['check'];
if ($val){
  $msg=$_GET['msg'];
  echo '<div id="error"><h4>';
  echo $msg;
  echo '</div></h4>';
  echo '<script>';
  echo '$( "#error" ).dialog({ autoOpen: true });';
  echo '$( "#error" ).dialog({ buttons: [{ text: "Close", click: function() { $( this
   ).dialog( "close" ); } } ]});';
  echo '</script>';
}

header("Location: ../projects.php?check="true"&msg=Project%20name%20updated!");

这种问题可以使用会话来解决,在您的例子中,当用户收到提示消息成功或错误时,您可以在会话参数中设置一个值,表示用户已经看到了警告消息。

<?php
session_start();
$val = $_GET['check'];
if ($val && !isset($_SESSION['alert'])){
      $_SESSION['alert'] = true;
      $msg = $_GET['msg'];
      echo '<div id="error"><h4>';
      echo $msg;
      echo '</div></h4>';
      echo '<script>';
      echo '$( "#error" ).dialog({ autoOpen: true });';
      echo '$( "#error" ).dialog({ buttons: [{ text: "Close", click: function() { $( this
       ).dialog( "close" ); } } ]});';
      echo '</script>';
}
?>