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?
Sure. Just walk through the $_POST
array:
foreach ($_POST as $key => $value) {
echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>";
}
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".
All posted data will be in the $_POST superglobal.
http://php.net/manual/reserved.variables.post.php
Yes you can use simply
$input_data = $_POST;
or extract() may be useful for you.
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);
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.
To add to the others, var_export might be handy too:
$email_text = var_export($_POST, true);
You can use $_REQUEST
as well as $_POST
to reach everything such as Post, Get and Cookie data.