我能否在PHP中将一个值分配给$_POST变量?

15

比如,我正在使用一个 $_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 并使用该副本。
4个回答

25

你可以给$_POST赋值,但是如果这么做,你应该在赋值的地方和后面访问的地方用注释清晰地记录。手动操作$_POST可能会破坏未来程序员(包括你自己)对超全局变量中内容和来源的期望。

可能存在其他替代方案,例如:

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

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

我只是觉得如果我为这些值使用单独的变量,那么我的隐藏输入框就没有意义了?这算是不好的做法吗?我可能应该删除隐藏值,只需将测试结果分配给一个变量并使用它。 - KRB
@KRB 通过上述方法,您并没有使用单独的值--您正在替换$_POST为将来的$my_post使用。我认为操纵$_POST是不好的做法,尽管我承认自己有时也这样做。只要您非常清楚地注释您的意图,那么可能还可以接受。 - Michael Berkowski
在代码中注释你的意图并不能真正帮助其他需要 $_POST 变量的地方,这些地方可能是由他人编写的(或者他自己某天也可能不记得他可怕的全局操作)。 - Yam Marcovic
@Yam 的意思是在赋值和访问时都进行了注释。很抱歉我的帖子没有表达清楚。 - Michael Berkowski
我能理解,但是 $_POST 是一个全局变量,可以从程序的任何地方访问,想要使用它的程序员并不需要知道访问或赋值它的任何特定代码的存在。 - Yam Marcovic

11

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

在普通的PHP中是可以的。

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

此外,一般来说这样做感觉不正确。 $_POST旨在包含原始的POST数据-没有其他内容。我认为它不应该被修改。

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


5
你可以这样做,它会起作用,但不要这样做。
复制 $_POST,对其进行测试并进行修改。例如:
$postdata = $_POST;
if ($postdata['somevalue'] != 'someothervalue') $postdata['newvalue'] = 'anothervalue';
// ...

如果您操作PHP自动生成的变量,当变量不保存您期望的数据时,它可能会在以后困扰您。


1

寻找替代方案!

$_POST变量有着独特的职责。不要滥用它的全局性。

我会说无论如何都不要滥用全局性,即使这意味着改变你已经拥有(或想象中拥有)的设计。

但如果你选择不这样做,那么考虑创建一个专门的全局注册表来满足你的需求。 不要操纵语言内置功能。


1
我的教授总是说:“全局变量很糟糕!”听起来不错,谢谢你的建议!! - KRB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接