2012-09-11 23 views
0

當按下按鈕:

<form action="index.php" method="get"> 
    <input type="hidden" name="act" value="run"> 
    <input type="submit" value="Truncate map"> 
</form> 

if (!empty($_GET['act'])) { 
    mysql_query("TRUNCATE TABLE mapinfo"); 
} 

它重定向我index.php?act=run

我想擺脫它,所以說:header("Refresh: 0; url=$page");

if (!empty($_GET['act'])) { 
    mysql_query("TRUNCATE TABLE mapinfo"); 
    $page = $_SERVER['PHP_SELF']; 
    header("Refresh: 0; url=$page"); 
} 

但它第一次加載index.php?act=run不是重定向瀏覽器index.php這使得2頁刷新。

如何做到這一點的好方法?

+0

您需要顯示錶單本身的代碼。 – Duniyadnd

+0

根據您的要求添加表格代碼。 –

+0

讓用戶僅僅使用GET請求就可以清除表格,這是一個非常糟糕的主意。僅處理數據會更好。 – Alex

回答

1

而是採用了刷新頭,使用

header("Location: $page");

+0

工程就像一個魅力:) –

-1

這真的是最好的做法。您可以取消設置$_GET['act']變量,以便它不會影響控制流的其餘部分,或者像正常情況下渲染頁面的其餘部分(即,您不需要重定向,只需渲染頁面的其餘部分就好像$_GET['act']變量從未設置)。的

+0

-1 URL將會如此。如果您在瀏覽器中單擊「返回」,您將再次截斷表格 – Peter

+0

在這種情況下,我沒有想到這一點。在任何情況下,作爲'$ _GET'請求具有破壞性操作是一個真正的_really_壞主意...... – slugonamission

1

除此之外還有使用該腳本的一些重大安全問題,爲什麼不使用下列內容:

<form action="index.php" method="post"> 
    <input type="hidden" name="act" value="run"> 
    <input type="submit" value="Truncate map"> 
</form> 

if (!empty($_POST['act'])) { 
    mysql_query("TRUNCATE TABLE mapinfo"); 
} 

這將做一個POST請求,而不是GET請求。但請注意,在POST請求後您仍應該重定向用戶(Post/Redirect/Get)。但是,請求參數是隱藏的。

備註不要在生產環境中使用這些腳本,它們遠非安全!

+0

你指出什麼**重大安全問題? –

+0

@李:你對安全性絕對正確**,POST請求不安全;但請注意,它並非設計爲安全的,它旨在回答user1656447的問題。 – KilZone

+0

@ user1656447如果我知道您的網絡服務器的URL /地址,我可以導航到.... com/index.php?act =運行並刪除服務器上的整個數據庫。就我所見,在你的代碼中,如果請求來源於你自己的服務器,或者我甚至有足夠的權利來執行這種操作,那麼就沒有驗證。 – KilZone