2012-07-27 49 views
0

我有php页面,我用表单提交messaage。它提交给自己:php浏览器回帖后

action="<? php echo $_SERVER['PHP_SELF'];?>" 

然后将其发送电子邮件,和我有一个使用jnotify,提醒消息是否成功发送一个JavaScript函数。这个函数检查php变量$ sent =='yes',然后通知成功的消息,否则通知错误。

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

它的最佳解决方案是什么?

+0

首先,尽量不要使用'$ _SERVER ['PHP_SELF']'由于XSS,除非您过滤HTML。您的网页可能因此而非常不安全。 (据我所知,这是,从来没有测试过 - 只读了很多。) – 2012-07-27 20:33:32

+0

@RobinV。 - $ _SERVER ['PHP_SELF']'不安全?你能指出一些文章吗? – 2012-07-27 20:44:23

+0

@Paul - 您可以在Google上轻松找到它们,只需输入“php form php_self security”,就会弹出一些。问题当然是,是否相信他们。 – 2012-07-27 20:49:44

回答

1

尝试是这样的:

<?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 

这应该使它这样他们只看到了成功/失败消息一次,如果他们使用后退按钮在稍后的时间,他们会不会收到关于重新提交发布数据的警告,而且他们也不会看到成功/失败消息两次。 JavaScript应该显示的唯一时间是他们是否仅在最后一次请求中提交了表单。

+0

我有if(isset($ _ POST ['submit'])){}函数在顶部,我如何实现你的代码与我的? – Jamol 2012-07-27 21:08:56

+0

'$ _SERVER ['REQUEST_METHOD'] =='POST''可以用'isset($ _ POST ['submit'])'替代。 – drew010 2012-07-27 21:12:42

+0

对不起,但它没有工作。我想在header('Location:'。$ _SERVER ['PHP_SELF']; exit; SESSION的值丢失 – Jamol 2012-07-27 21:40:08

0

您可以使用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'); } 
    } 
});