2012-07-27 50 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'); } 
    } 
});