Подтвердить что ты не робот

Можно ли присвоить значение переменной $_POST в PHP?

Например, я использую переменную $_POST для вставки данных в БД. Перед этим запросом у меня есть несколько тестов, и если они верны, я хочу настроить это (скрытое) значение $_POST.

Ex.

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 и поработайте с этим.
4b9b3361

Ответ 1

Вы можете назначить значения $_POST, но если вы это сделаете, вы должны четко документировать его с комментариями как в точке назначения, так и в более поздней точке доступа. Ручное манипулирование $_POST может нарушить ожидания будущих программистов (в том числе ваши собственные) от того, что находится в суперглобале и откуда оно взялось.

Могут быть другие альтернативы, например:

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

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

Ответ 2

Может ли $_POST ['hidden_value'] присваиваться новое значение, а затем передаваться другой функции как $_POST и иметь доступ к новому $_POST ['hidden_value']?

Это может быть в обычном PHP.

Однако расширения, такие как Suhosin Patch, могут блокировать это.

Кроме того, он чувствует себя не так в общем. $_POST предназначен для хранения необработанных входящих POST-данных - ничего другого. Его не следует изменять IMO.

Лучше всего было бы получить все данные, которые вы планируете вставлять в базу данных, в массив и выполнять манипуляции в этом массиве.

Ответ 3

Вы можете, он будет работать, но не делайте этого.

Создайте копию $_POST, выполните свои тесты и измените это. Например.

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

Если вы манипулируете переменными, автоматически создаваемыми PHP, это, вероятно, вернется, чтобы преследовать вас позже, когда переменная не содержит данные, которые вы ожидаете от нее.

Ответ 4

Найдите альтернативу!

Переменная $_POST несет определенную ответственность. Не злоупотребляйте своим глобализмом.

Я бы сказал, что не злоупотребляйте глобализмом в любом случае, даже если это означает изменение дизайна, который у вас есть (или иметь в виду).

Но если вы решите не делать этого, подумайте о создании специального глобального реестра только для ваших нужд. Не манипулируйте языковыми встроенными модулями.