2011-06-13 12 views
38

Proste pytanie: czy możliwe jest umieszczenie wszystkich danych POSTED na stronie, nawet jeśli nie znasz wszystkich pól?PHP: Możliwe automatyczne pobieranie wszystkich danych POSTed?

Na przykład chcę napisać prosty skrypt, który zbiera wszystkie dane POST i wysyła je e-mailem. Mogę przewidzieć, że pola w formularzu prawdopodobnie z czasem bardzo się zmienią, więc aby zaoszczędzić sobie trochę czasu na dłuższą metę, zastanawiałem się, czy mogę napisać coś, co automatycznie zgromadzi wszystko?

Czy to możliwe?

+2

ofcourse wystarczy użyć globalnych tablic $ _POST, $ _GET, $ _Ser ..... –

+2

możliwy duplikat [Jak pobrać wszystkie zmienne w poście (PHP)] (http://stackoverflow.com/questions/ 3058336/how-to-grab-all-variables-in-a-post-php) – mario

Odpowiedz

73

Jasne. Wystarczy przejść przez tablicę $_POST:

foreach ($_POST as $key => $value) 
echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>"; 
+4

@Django Reinhardt Zwróć uwagę, że niezaznaczone pola wyboru nie pojawiają się w tablicy '$ _POST', więc jeśli użyjesz pól wyboru, będziesz musiał potraktuj je inaczej, używając na przykład 'isset'. – jeroen

+0

co jeśli jest plik, to przyjdzie z nim – bhawin

2

Możesz pobrać wszystkie klucze tablicy $ _POST używając array_keys(), a następnie skonstruowanie wiadomości e-mail z wartościami tych kluczy.

var_dump($_POST) spowoduje również zrzucenie informacji o wszystkich informacjach w $ _POST dla Ciebie.

1

Tak można użyć po prostu

 $input_data = $_POST; 

lub extract() mogą być przydatne dla Ciebie.

+2

'extract ($ _ POST)' będzie naśladować 'register_globals'. Nie rób tego. – netcoder

+1

@netcoder; po prostu sugeruję mu, że może być użyteczny; to także opcja. i podam mi przykład, aby cenne uwagi były cenne. – diEcho

2

Tak długo, jak nie chcesz specjalnego formatowania: tak.

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

Oczywiście, bardziej formatowania byłoby to konieczne, jednak to jest „łatwy” sposób. Chyba że źle to zrozumiałem.

Można też zrobić coś takiego (i jeśli lubisz formatu, to z pewnością łatwiej):

$body = print_r($_POST, true); 
0

Można użyć $_REQUEST jak również $_POST osiągnąć wszystko, takie jak post, Get a dane Cookie .

1

dodać do innych, var_export może być przydatny także:

$email_text = var_export($_POST, true); 
28

Nikt nie wspomniał Raw danych post, ale dobrze jest wiedzieć, czy wysłane dane nie ma klucza, ale tylko wartość, wykorzystanie Raw Post Data:

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

PHP Man:

php: // wejście jest strumieniem tylko do odczytu, który umożliwia odczytywanie nieprzetworzonych danych z treści żądania. W przypadku żądań POST lepiej jest użyć php: // input zamiast $ HTTP_RAW_POST_DATA, ponieważ nie wymaga ono specjalnej instrukcji php.ini.Co więcej, w przypadkach, w których $ HTTP_RAW_POST_DATA nie jest domyślnie wypełniona, jest to potencjalnie mniej intensywna pamięć alternatywą do aktywowania zawsze_populate_raw_post_data. php: // wejście nie jest dostępne z enctype = "multipart/form-data". .

0
foreach ($_POST as $key => $value) 

echo "pole" .htmlspecialchars ($ key) "jest" .htmlspecialchars ($ value) "
.";

+0

proszę wyjaśnić i sformatować odpowiedź – Mazz

+0

, więc jaka jest różnica zaakceptowanej odpowiedzi http://stackoverflow.com/a/6334857/2359679? – hassan

Powiązane problemy