我可以为PHP中的$ _POST变量赋值吗?

时间:2011-09-15 15:15:28

标签: php post

例如,我使用$ _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!
  • 如果需要,请复制$ _POST并使用它。

4 个答案:

答案 0 :(得分:23)

您可以为$_POST分配值,但是如果您这样做,则应该在分配点和后续访问点上使用注释非常清楚地记录它。手动操作$_POST可以打破未来程序员(包括你自己)对超全局内容及其来源的期望。

可能还有其他选择,例如:

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

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

答案 1 :(得分:11)

  

可以为$ _POST ['hidden_​​value']分配一个新值,然后作为$ _POST传递给另一个函数,并且能够访问新的$ _POST ['hidden_​​value']吗?

它可以在正常的PHP中。

但是,像Suhosin Patch这样的扩展程序可能会阻止此操作。

另外,一般来说感觉不对。 $_POST旨在包含原始的传入POST数据 - 没有别的。它不应该被IMO修改。

更好的方法是将计划插入数据库的所有数据提取到数组中,然后在该数组中进行操作。

答案 2 :(得分:5)

你可以,它会起作用,但不会。

创建$_POST的副本,对其执行测试并修改它。例如。

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

如果你操纵由PHP自动创建的变量,那么当变量没有保存你期望的数据时,它可能会在以后再次出现。

答案 3 :(得分:1)

寻找替代方案!

$ _POST变量有明确的责任。不要滥用其全球主义。

我认为不要滥用全球主义,即使这意味着改变你的设计(或者想到)。

但如果您选择不这样做,那么请考虑根据您的需求创建专用的全局注册表。 不要操纵语言内置插件。

相关问题