后返回php浏览器

后返回php浏览器,php,browser,notifications,back,Php,Browser,Notifications,Back,我有一个php页面,在那里我使用了一个表单来提交消息。它认为: action="<? php echo $_SERVER['PHP_SELF'];?>" action=“” 然后它发送电子邮件,我有一个javascript函数,它使用jnotify来警告消息是否成功发送。此函数检查php变量$sent=='yes',然后通知成功消息,否则通知错误 问题是,当用户发送消息并转到另一个页面,然后使用浏览器返回按钮返回时,它会显示通知。我希望它只显示一次通知,并且在使用浏览器返回或刷新

我有一个php页面,在那里我使用了一个表单来提交消息。它认为:

action="<? php echo $_SERVER['PHP_SELF'];?>"
action=“”
然后它发送电子邮件,我有一个javascript函数,它使用jnotify来警告消息是否成功发送。此函数检查php变量$sent=='yes',然后通知成功消息,否则通知错误

问题是,当用户发送消息并转到另一个页面,然后使用浏览器返回按钮返回时,它会显示通知。我希望它只显示一次通知,并且在使用浏览器返回或刷新时忘记通知


最好的解决方案是什么?

您可以使用ajax请求发送表单

$.ajax({
  type: 'POST',
  url: processor.php,
  data: $('#form_id').serialize(),
  success: function(data){
       if(data==0){ alert('message sent'); }else{ alert('message not sent'); }
  }
});
我想Zend助手可能就是你要找的

这意味着该消息将在下一次请求时可供检索,但在以后的请求中不可用


试试这样的方法:

<?php

session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (form_is_valid()) {
        $_SESSION['form_success'] = true;
    } else {
        $_SESSION['form_success'] = false;
    }
    header('Location: ' . $_SERVER['PHP_SELF'];
    exit;
} else if (isset($_SESSION['form_success'])) {
    if ($_SESSION['form_success'])) {
        // insert success javascript
    } else {
        // insert failure javascript
    }
    unset($_SESSION['form_success']);
}

// display_form

首先,由于XSS的原因,尽量不要使用
$\u服务器['PHP\u SELF']
,除非您过滤HTML。因此,您的网页可能非常不安全。(据我所知,这是;从未测试过它-只是读了很多。)
$\u服务器['PHP\u SELF']
如何不安全?你能指出一些文章吗?@Paul-你可以很容易地在谷歌上找到它们,只需键入“php form php_self security”,就会弹出一些。问题当然是,信不信由你。我在顶部有if(isset($\u POST['submit']){}函数,我如何用我的实现你的代码?你的
$\u服务器['REQUEST\u METHOD']=='POST'
可以被
isset($\u POST['submit'])
替换。对不起,它不起作用。我认为在header('Location:'。$\u SERVER['PHP_SELF'];exit;会话的值在后续请求中丢失($\u SESSION);
。$\u会话变量在请求之间持续存在。再次抱歉,您的代码工作得很好!这是我愚蠢的错误。我忘记调用会话启动();在顶部。我通常创建会话类并在其中使用Session_start();但这次我没有。非常感谢!