2011-09-15 47 views
13

例如,我正在使用$ _POST變量將數據插入數據庫。就在這個查詢之前,我有幾個測試,如果他們是真的,我想調整(隱藏)$ _POST值。

例。

if($baby_dragon_eats_children){ 
    $_POST['hidden_value'] = "grapes"; 
} 

可以$ _POST [「hidden_​​value」]被賦予一個新的值,然後傳遞到另一個功能爲$ _ POST和能夠訪問新的$ _ POST [「hidden_​​value」]?

感謝


$ _ POST [ 'consolidate_answers']

  • IF您分配一個值到$ _ POST,你應該記錄是很清楚,因爲它是不常見的,也不考慮「最佳實踐。
  • IF你有PHP如Suhosin Patch的任何擴展......這可能會阻止這種行爲..
  • 手柄自己的陣列,不依賴於$ _ POST!
  • IF需要,使$ _ POST副本,並與工作。

回答

23

您可以將值分配給$_POST,但是如果您這樣做,則應該在賦值點和訪問點之後非常清楚地記錄它的註釋。手動操作$_POST可能會破壞未來程序員(包括您自己)對超全局內容以及它來自何處的期望。

可能有其他的選擇,比如:

$my_post = $_POST; 
$my_post['hidden_value'] = 12345; 

// In a function: 
function func() { 
    // Emulate a superglobal 
    echo $GLOBALS['mypost']['hidden_value']; 
} 
+0

我只是覺得,如果我爲這些值使用一個單獨的變量,將隱藏的輸入放在第一位毫無意義?這被認爲是不好的做法?我可能應該刪除隱藏的值,只是分配一個變量這些測試的結果並使用它。 – KRB

+0

@KRB用上面的方法,你沒有使用單獨的值 - 你用'$ my_post'替換'$ _POST'以備將來使用。我認爲操縱'$ _POST'是不好的做法,儘管我承認自己不時自己做。只要你非常清楚地評論你的意圖,它可能是好的。 –

+0

評論你的意圖不會真的幫助需要$ _POST變量的代碼中的其他地方,這可能是也可能不是他寫的(或者他自己有時可能不記得他可怕的全局操作)。 –

11

可以$ _ POST [「hidden_​​value」]被賦予一個新的值,然後傳遞到另一個功能爲$ _ POST和能夠訪問新的$ _POST ['hidden_​​value']?

它可以在普通的PHP。

然而,如同Suhosin Patch延伸部可以阻止此。

此外,一般感覺不對。 $_POST旨在包含原始的傳入POST數據 - 沒有別的。它不應該被修改IMO。

一種更好的方式去將擷取您打算插入到數據庫到一個數組中的數據,並執行操作該數組中來代替。

5

你可以,它會工作,但不。

創建的$_POST副本,在執行您的測試和修改來代替。例如。

$postdata = $_POST; 
if ($postdata['somevalue'] != 'someothervalue') $postdata['newvalue'] = 'anothervalue'; 
// ... 

如果操縱變量自動創建的PHP支持,它可能會稍後回來困擾你就當變量不抱你期望它的數據。

1

尋找替代品!

$ _POST變量有明確的責任。不要濫用其全球主義。

我會說不要以任何方式濫用全球主義,即使這意味着改變你的設計(或者想到)。

但是,如果您選擇不這樣做,那麼請考慮創建專門的全局註冊表,以滿足您的需求。 不要操縱語言內置插件。

+0

我的教授總是會說,「全局變量惡臭!」。聽起來很好的人,感謝您的建議! – KRB

相關問題