Muszę wstawić wszystkie zmienne wysłane pocztą, były to pola wyboru, z których każda reprezentowała użytkownika.
Jeśli używam GET, otrzymuję coś takiego:
?19=on&25=on&30=on
Muszę wstawić zmienne do bazy danych.
Jak uzyskać wszystkie zmienne wysłane za pomocą POST? Jako tablica lub wartości oddzielone przecinkami czy coś?
Odpowiedzi:
Zmienna
$_POST
jest wypełniana automatycznie.Spróbuj
var_dump($_POST);
zobaczyć zawartość.Możesz uzyskać dostęp do poszczególnych wartości, na przykład:
echo $_POST["name"];
To oczywiście zakłada, że twój formularz używa typowego kodowania formularza (tj
enctype=”multipart/form-data”
Jeśli dane Twojego posta są w innym formacie (np. JSON lub XML, możesz zrobić coś takiego:
$post = file_get_contents('php://input');
i
$post
będzie zawierać nieprzetworzone dane.Zakładając, że używasz
$_POST
zmiennej standardowej , możesz sprawdzić, czy pole wyboru jest zaznaczone w następujący sposób:if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes') { ... }
Jeśli masz tablicę pól wyboru (np
<form action="myscript.php" method="post"> <input type="checkbox" name="myCheckbox[]" value="A" />val1<br /> <input type="checkbox" name="myCheckbox[]" value="B" />val2<br /> <input type="checkbox" name="myCheckbox[]" value="C" />val3<br /> <input type="checkbox" name="myCheckbox[]" value="D" />val4<br /> <input type="checkbox" name="myCheckbox[]" value="E" />val5 <input type="submit" name="Submit" value="Submit" /> </form>
Użycie
[ ]
w polu wyboru nazwy wskazuje, że wybrane wartości będą dostępne przez skrypt PHP jako tablica. W tym przypadku$_POST['myCheckbox']
nie zwróci pojedynczego ciągu, ale zwróci tablicę składającą się ze wszystkich wartości zaznaczonych pól wyboru.Na przykład, jeśli sprawdzone wszystkie pola,
$_POST['myCheckbox']
będzie tablica składający się z:{A, B, C, D, E}
. Oto przykład, jak pobrać tablicę wartości i wyświetlić je:$myboxes = $_POST['myCheckbox']; if(empty($myboxes)) { echo("You didn't select any boxes."); } else { $i = count($myboxes); echo("You selected $i box(es): <br>"); for($j = 0; $j < $i; $j++) { echo $myboxes[$j] . "<br>"; } }
źródło
powinieneś mieć do nich dostęp ze
$_POST
zmiennej:foreach ($_POST as $param_name => $param_val) { echo "Param: $param_name; Value: $param_val<br />\n"; }
źródło
Jest przestarzały i nie chciał mieć bezpośredniego dostępu do superglobali (myślę, że od PHP 5.5?)
Każde nowoczesne IDE powie Ci:
W naszym rozwiązaniu, aby uzyskać wszystkie parametry żądania, musimy użyć metody
filter_input_array
Aby uzyskać wszystkie parametry z metody wprowadzania, użyj tego:
Teraz możesz go użyć w
var_dump
lub swoichforeach
-LoopsTo, co nie działa, to dostęp do $ _REQUEST Superglobal za pomocą tej metody. Zawsze wraca
NULL
i to prawda.Jeśli chcesz uzyskać wszystkie parametry wejściowe, przechodząc przez różne metody, po prostu połącz je, jak w poniższej metodzie:
function askForPostAndGetParams(){ return array_merge ( filter_input_array(INPUT_POST), filter_input_array(INPUT_GET) ); }
Edycja: rozszerzona wersja tej metody (działa również gdy jedna z metod żądania nie jest ustawiona):
function askForRequestedArguments(){ $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array(); $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array(); $allRequests = array_merge($getArray, $postArray); return $allRequests; }
źródło
Więc coś w rodzaju
$_POST
tablicy?Możesz użyć,
http_build_query($_POST)
aby ponownie uzyskać je wvar=xxx&var2=yyy
ciągu. Albo po prostuprint_r($_POST)
zobaczyć, co tam jest.źródło
Dlaczego nie to, to proste:
źródło
Używając tego u możesz uzyskać wszystkie zmienne post
źródło