69

Simple question: Is it possible to get all the data POSTed to a page, even if you don't know all the fields?

For example, I want to write a simple script that collects any POSTed data and emails it. I can foresee that the fields in the form are likely to change a lot over time, and so to save myself some time in the long run, I was wondering if I could write something that automatically gathered everything?

Is it possible?

2
  • 2
    ofcourse just use the global arrays $_POST, $_GET, $_Ser..... Commented Jun 13, 2011 at 18:54
  • 3
    possible duplicate of How to grab all variables in a post (PHP) Commented Jun 13, 2011 at 19:06

9 Answers 9

131

Sure. Just walk through the $_POST array:

foreach ($_POST as $key => $value) {
    echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>";
}
Sign up to request clarification or add additional context in comments.

3 Comments

@Django Reinhardt Note that non-checked checkboxes do not appear in the $_POST array so if you use checkboxes, you will need to handle them differently by using isset for example.
what if there is a file , will it come with it
Can the same be used for $_GET?
50

No one mentioned Raw Post Data, but it's good to know, if posted data has no key, but only value, use Raw Post Data:

$postdata = file_get_contents("php://input");

PHP Man:

php://input is a read-only stream that allows you to read raw data from the request body. In the case of POST requests, it is preferable to use php://input instead of $HTTP_RAW_POST_DATA as it does not depend on special php.ini directives. Moreover, for those cases where $HTTP_RAW_POST_DATA is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. php://input is not available with enctype="multipart/form-data".

Comments

8

Yes you can use simply

     $input_data = $_POST;

or extract() may be useful for you.

3 Comments

extract($_POST) will mimic register_globals. Don't do that.
@netcoder; i just suggest him that it can be useful; it is an option too. and will u please give me an example to make ur comments valuable.
Using extract on an unfiltered/unsanitized user supplied data is super, super bad idea. Do yourself a favor and don't bake insecurity into your code.
5

All posted data will be in the $_POST superglobal.

http://php.net/manual/reserved.variables.post.php

Comments

4

As long as you don't want any special formatting: yes.

foreach ($_POST as $key => $value) 
    $body .= $key . ' -> ' . $value . '<br>';

Obviously, more formatting would be necessary, however that's the "easy" way. Unless I misunderstood the question.

You could also do something like this (and if you like the format, it's certainly easier):

$body = print_r($_POST, true);

1 Comment

+1 The latter suggestion ($body = print_r($_POST, true);) worked for me as the simplest without having to iterate through child elements. I just needed to see the raw POST content temporarily while developing a webhook application.
2

You can retrieve all the keys of the $_POST array using array_keys(), then construct an email messages with the values of those keys.

var_dump($_POST) will also dump information about all of the information in $_POST for you.

Comments

1

You can use $_REQUEST as well as $_POST to reach everything such as Post, Get and Cookie data.

Comments

1

To add to the others, var_export might be handy too:

$email_text = var_export($_POST, true);

Comments

1

Just to echo all data of $_POST.

echo json_encode($_POST);

You can also do this for more better viewing.

echo var_dump($_POST);

1 Comment

why echo var_dump when var_dump already outputs?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.