3

$_REQUEST includes cookies which I do NOT want in my form posts.

Ken
  • 2,849
  • 8
  • 24
  • 23
  • 1
    Change `variables_order` in your php.ini to suit your needs. You can then safely doom your code to rely on proper input to `$_REQUEST`. – Linus Kleen Feb 28 '11 at 23:17
  • @Linus Kleen That doesn't answer the question at all, despite being related to `$_REQUEST`. – coreyward Feb 28 '11 at 23:17
  • @coreyward It kind of hints at the assumption that `$_REQUEST` contains all GPC, though. Also, answer the following: *"I need the result of `9 / 3`. Division is prone to divide by zero errors, which I do NOT want in my code."* – Linus Kleen Feb 28 '11 at 23:22
  • @Linus Nice edit. Be clear in your answers — chances are someone asking a question isn't going to pick up on a slight hint. – coreyward Feb 28 '11 at 23:28
  • @Linus Kleen Pffft, that's easy: just subtract a bunch of times. – Dan J Feb 28 '11 at 23:51

6 Answers6

11

The php.ini setting responsible for what is in $_REQUEST is variables_order

Default: variables_order "EGPCS"

Change that in your php.ini to:

GP

for it to include only $_GET and $_POST

Maybe you don't want to do that

Usually in a web application you use $_GET values to select what to show and $_POST values to transmit what there is to change in a webpage (or user actions that change state in general). Generally it's not advisable to mix those :)

Also that answers explains it quite nice: When and why should $_REQUEST be used instead of $_GET / $_POST / $_COOKIE?

Or maybe read this: What's wrong with using $_REQUEST[]?

Also thanks for the comment mario :)

Community
  • 1
  • 1
edorian
  • 38,542
  • 15
  • 125
  • 143
  • +1 ... I didn't up-vote before because I don't like this sort of "clever" solution, but with the addition (and emphasis), I believe it's deserving. –  Mar 01 '11 at 00:15
  • 4
    `variables_order` was only ever intended for changing the order. If unset to `GP` it will lead to an empty $_SERVER and $_COOKIE array. Hencewhy PHP 5.3 introduced `request_order` which specifically only affects $_REQUEST. – mario Mar 01 '11 at 00:17
3
$new_array = array_merge($_GET, $_POST);
Duniyadnd
  • 4,013
  • 1
  • 22
  • 29
3

You can change what $_REQUEST holds by looking into the php.ini setting variables_order. Start here.

Chris Tonkinson
  • 13,823
  • 14
  • 58
  • 90
3

You should not use $_REQUEST for exactly that reason. Access $_GET, $_POST and friends for their dedicated purposes instead of using $_REQUEST.

tobyS
  • 860
  • 1
  • 7
  • 15
2

You can simply use:

$_REQUEST = array_merge($_GET, $_POST);

Which has the benefit of explicitly listing the order you'd like so you don't override something you didn't expect because the REQUEST order was off.

coreyward
  • 77,547
  • 20
  • 137
  • 166
2

I would be explicit.

If a GET/POST merge is required in some context, then apply it then -- but I would avoid a blatant clobber. This merge can be easily done per-item and hidden behind a nice, tidy and default-applying wrapper -- perhaps even with a sanitizing/coversion layer right then and there.

No magic required. Happy coding.

  • Thanks for the replies, they are all helpful. The best is to do an array_merge($_GET, $_POST); – Ken Mar 02 '11 at 16:59