Могу ли я присвоить значение переменной $ _POST в PHP? - PullRequest
14 голосов
/ 15 сентября 2011

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

Пример.

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

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

Спасибо


$ _ POST ['consolidate_answers']

  • IF вы присваиваете значение $ _POST, которое вы должны документировать очень четко, поскольку оно не является распространеннымне считается «лучшей» практикой.
  • ЕСЛИ у вас есть какие-либо расширения PHP, такие как Suhosin Patch ... он может блокировать такие действия ..
  • Обработка ваших собственных массивов, не зависит от $ _POST!
  • ЕСЛИ необходимо, сделайте копию $ _POST и работайте с этим.

Ответы [ 4 ]

23 голосов
/ 15 сентября 2011

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

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

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

// In a function:
function func() {
   // Emulate a superglobal
   echo $GLOBALS['mypost']['hidden_value'];
}
11 голосов
/ 15 сентября 2011

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

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

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

Кроме того, в целом это не так. $_POST предназначен для хранения необработанных входящих данных POST - ничего больше. Не следует изменять ИМО.

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

5 голосов
/ 15 сентября 2011

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

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

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

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

1 голос
/ 15 сентября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...