2011-09-01 101 views
5

我開發PHP腳本包含HTML表單。「header()」php函數是否取消設置全局變量?

如果不是所有字段填寫正確的方式腳本會發出錯誤信號,並重定向回用頭功能相同的頁面與get方法設置錯誤變量是:

header("Location: registration_page.php?error_empty=yes"); 

我腳本有一個錯誤處理部分,其中突出顯示包含錯誤的字段,但我想保持字段的值正確填充。

我實現這個功能,因爲我在這等問題發現:

How can I keep a value in a text input after a submit occurs?

但問題是,當頁面重新打開表將不包含舊值。

我的問題是:沒有任何人知道,如果頭功能會取消$ _REQUEST數組中的全局變量?

而且你知道我是什麼樣的解決方案可以採用?也許會話?

在此先感謝,

Matteo!

回答

8

$_COOKIES將保持設置,但$_POST & $_GET將被銷燬,因爲客戶端正在移動到新頁面。如果需要保留它們,則在調用重定向之前,必須先將它們存儲到$_SESSION中。

session_start(); 
$_SESSION['last_post'] = $_POST; 
header("Location: http://example.com"); 
exit(); 

// On the redirected page, use the stored POST values and unset them in $_SESSION 
session_start(); 
if (empty($_POST) && isset($_SESSION['last_post'])) { 
    $post = $_SESSION['last_post']; 
    unset($_SESSION['last_post']); 
} 
else $post = $_POST; 
+0

開始會話的時候應該銷燬它嗎?當字段全部被成功填寫? – Matteo

+1

@Matteo'session_destroy()'在腳本執行完成時被隱式調用。除非您有理由在腳本完成之前關閉會話,否則無需調用它。 'session_destroy()'_不去除會話變量。我只是將當前腳本從會話中斷開。 –

+0

@Matteo在使用之後,請參閱上面關於取消設置'$ _SESSION'存儲的文章的附加內容 –

3

有沒有人知道如果頭函數取消$ _REQUEST數組中的全局變量?

不,不。 Cookies($_COOKIE)將保留。

顯然$_GET將包含任何你必須在重定向(如:$_GET['error_empty'] = 'yes') and $ _POST`將是空的,因爲你不張貼

所以$_REQUEST將是$_COOKIE組合和新的$_GET參數你。設置。


你可能不應該使用$_REQUEST無論如何,正是指定您希望您的請求參數是...

2

它沒有,但它確實提出了新的要求。新的請求意味着一個新的$_REQUEST,它不一定包含所有的舊數據。 $_COOKIE將仍然存在,但$_GET$_POST將成爲新的含義$_REQUEST將反映這一點。 ($_FILES也將是空的,雖然它不在$ _REQUEST中,但它是用戶提供的另一個值將被重置)。

如果你想恢復的形式,你需要要麼把所有的變量在url中的標頭,或使用$_SESSIONsetcookie,然後從$_GET$_SESSION$_COOKIES恢復。

+0

所以舊值將無法訪問了,這就是爲什麼如果使用命令 ? 結果會是空的? – Matteo

+0

很久以前''_FILES'已從'$ _REQUEST'中移除。 – NullUserException

+1

沒錯。因爲'$ _REQUEST'取決於來自瀏覽器的輸入,如果瀏覽器發出新的請求,則$ _REQUEST被清空。 – cwallenpoole