2012-02-15 17 views
0

我有一個包含註冊表單的PHP站點(帶有CodeIgniter)。我有一個包含一些細節的頁面,這些細節鏈​​接到單獨頁面上的表單。表單發佈到第三個URL,進行處理,如果成功則重定向回第一個頁面(如果沒有,則返回表單頁面)。如何在不更改URL的情況下在表單上顯示「成功」消息?

目前我正在添加成功的參數:example.com/page?success=1顯示成功消息。問題是有些人一直在分享這個URL(並點擊Facebook Like按鈕),所以當其他用戶打開該URL時,他們會看到一條消息「感謝您註冊!」他們顯然尚未完成。

我認爲這是做表格的標準方式(提交到一個URL並重定向到另一個),但有沒有更好的方法?我不想回發到同一頁面,因爲在嘗試重新加載頁面時,您會收到POSTDATA警告。

+0

看看Ajax – Fredrik 2012-02-15 16:47:39

+0

相關:http://stackoverflow.com/questions/7120746/codeigniter-reusable-message-library – DanMan 2013-07-11 10:34:39

回答

2

上通常你需要設置你的標誌成功的會議,顯示此消息的下一個頁面加載時。這通常被稱爲Flash消息。然後,您將檢查此會話標誌的值/存在,並相應地顯示您的消息。在大多數框架中都有內置的功能,這包括在下一個請求中清除標誌,以便消息只在產生它的操作之後直接顯示。

從CI Sessions Documentation

笨支持「flashdata」,或會話數據將只可用於下一次服務器請求 ,然後被自動清除 。這些信息可能非常有用,通常用於提供信息或狀態消息(例如:「記錄2已刪除」) 。

注意:Flash變量的前綴爲「flash_」,因此請在您自己的會話名稱中避免使用前綴 。

要添加flashdata:作爲 set_userdata

$this->session->set_flashdata('item', 'value'); 

您還可以傳遞數組set_flashdata(),以相同的方式()。

要讀取flashdata變量:

$this->session->flashdata('item'); 

如果你發現你需要通過 額外的請求保留一個flashdata變量,你可以這樣做使用keep_flashdata()函數。這裏

$this->session->keep_flashdata('item'); 
3

您有三種方法可以做到這

  • 你使用
  • 實際上沒有重定向但隨着AJAX發送請求(S)
  • 會議的方式(或者,在邊緣的情況下,餅乾)

如果您選擇使用SESSION,你可以指定一個會話變量設置爲true

$_SESSION['registered'] = true; 

,並檢查它的第一頁

if (isset($_SESSION['registered'])) { 
     unset($_SESSION['registered']); 
     // shot the message 
} 
-1

幾種解決方案,一個是檢查的表單提交,如果它沒有被提交重定向到頁面上它的形式。

即:

<?php 
if (isset($_POST['submit'])) 
    { 
    // process the form 
    } 
else 
    { 
    //redirect to the form itself 
    header('Location: http://www.yourform.com') ; 
    } 
?> 
0

你應該在你的代碼處理表單數據的處理,以確保所需要的字段填寫了一些驗證檢查。否則,你應該重定向到你的第一頁,讓用戶填寫表格。

而且,這可以通過AJAX來處理,但是這將是第二個步驟,以在你的表單處理頁面的適當覈查

0

HTML:

<form method="post"> 
    <input type="text"> 
    <input name="submitted" type="submit"> 
</form> 

PHP:

if($_POST['submitted']{ 
    //post was submitted process it 

    if(/*whatever you're doing to the form succeeds*/){ 
     //show success 
    } 
} 

POST不會在URL中顯示變量。

+0

爲了我的利益......爲什麼這是downvoted? – 2012-02-15 17:23:21

+0

我想知道這一點,所以我可以學習 - 我懷疑這是一些Codeigniter怪癖閱讀上述答案。 – davidjwest 2012-02-16 13:37:32

+0

@ChrisSobolewski因爲它不能遠程回答問題。問題不在於如何閱讀postdata。 – DisgruntledGoat 2012-02-16 17:04:14

相關問題