2013-04-29 77 views
0

我有一個register.php頁面。我通過表單將數據發送到php_register.php文件。這個文件檢查表單是否有效(電子郵件是真實的等等)。我想的是,php_register.php會做他的工作,併發送給客戶端回register.php文件中的無效形式的情況下:如何將POST值傳遞到一個php頁面

header("Location: register.php"); 

我想這php_register.php會發送更多數據來一個register.php。在我的情況下,我想發送錯誤的輸入。我能做到這一點是這樣的:

header("Location: register.php?error=5"); 

通過register.php $_GET['error']我可以顯示正確的輸出。我想要做的是同樣的事情,但取而代之的是使用post方法(不涉及任何形式)? 我該怎麼辦?

+0

添加公佈值$ _SESSION,這些U可以在整個訪問整個網站。不要忘記在第1行添加session_start() – DarkBee 2013-04-29 17:24:01

+0

相關:http://programmers.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect – 2013-04-29 17:30:45

回答

3

長和短是你不能。互聯網不會那樣工作。老實說,瀏覽器甚至可以忽略header(這就是爲什麼header應該,無一例外,其次是die,exit或其他強制終止腳本的函數)。

您可以將值存儲在$_SESSION中,或者您可以將它存儲到表單所在的同一頁面(這是大多數框架如何處理的),但是您無法告訴瀏覽器「在其他地方提交此POST 「。

+0

http狀態碼307 - 使用相同方法重定向/數據作爲原始請求。它會正確地重定向一個帖子。但這樣做可能不安全。 – 2013-04-29 17:32:13

+0

@MarcB我不知道。 – cwallenpoole 2013-04-29 17:35:11

+0

不常用,因爲POSTS一般不應該重複。例如「刪除上次添加的用戶」可能會在第一時間正常工作。 2小時後重新載入該頁面/重定向,您可能會再次遇到另一個用戶。 – 2013-04-29 17:36:16

0

使用會話,例如php_register.php

// start the session 
session_start(); 

// Email check (do a more robust check of course) 
if($_POST['email'] == "") 
{ 
    $_SESSION['error'] = "Please enter an email address." 
    header("Location: register.php"); 
    die(); 
} 

然後register.php

// start session 
session_start(); 

if(isset($_SESSION['error'])) 
{ 
    echo $_SESSION['error']; 

    // unset now so it doesn't show again 
    unset($_SESSION['error']); 

} 
相關問題