Jaki jest najlepszy sposób sprawdzenia, czy formularz został przesłany, czy nie, aby określić, czy powinienem przekazać zmienne formularza do mojej klasy walidacji?
Najpierw pomyślałem, że może:
isset($_POST)
Ale to zawsze wróci prawdą, ponieważ superglobal jest zdefiniowany wszędzie. Nie chcę powtarzać każdego elementu mojego formularza za pomocą:
if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc
Pisząc to pytanie, pomyślałem o dużo bardziej podstawowym rozwiązaniu, dodając ukryte pole, które będzie działać jako flaga, którą mogę sprawdzić.
Czy jest na to „czystszy” sposób niż dodanie własnej flagi?
php
forms
validation
Anonimowy
źródło
źródło
submited
a następnie użyć phpif(isset($_POST['submited']))
lub ukrytego wejścia ...Odpowiedzi:
Aby sprawdzić, czy było jakieś
POST
działanie, użyj:EDYCJA : Jak stwierdzono w komentarzach, ta metoda nie będzie działać w niektórych przypadkach (np. Z polami wyboru i przyciskiem bez nazwy). Naprawdę powinieneś użyć:
źródło
Co powiesz na
źródło
Właściwie przycisk przesyłania już pełni tę funkcję.
Wypróbuj w FORMULARZU:
Następnie w module obsługi PHP:
źródło
if (null !== (filter_input(INPUT_POST, 'macaddress'))){
Posługiwać się
źródło
if ($_SERVER['REQUEST_METHOD'] == 'POST')
.źródło
Spróbuj tego
źródło
Z drugiej strony, zawsze dobrym zwyczajem jest dodanie tokena do formularza i zweryfikowanie go, aby sprawdzić, czy dane nie zostały wysłane z zewnątrz. Oto kroki:
Wygeneruj unikalny token (możesz użyć hasha) Np .:
Przypisz ten token do zmiennej sesji. Dawny:
Dodaj ukryte dane wejściowe, aby przesłać token. Dawny:
następnie w ramach walidacji sprawdź, czy przesłany token pasuje do zmiennej sesji.
źródło
Miałem ten sam problem - również upewnij się, że dodałeś
name=""
przycisk wejścia. Cóż, ta poprawka zadziałała dla mnie.źródło
Możesz również użyć:
źródło
is_array($_POST)
zawsze daje prawdę (na moim komputerze). Według stackoverflow.com/questions/5594020/php-check-if-post-is-array :$_POST is a superglobal array which is always defined
,unless somewhere in your code you either unset or overwrite $_POST somehow
, więc wydaje się, że należy się spodziewać, że ten zawsze zwraca true ..is_array($_POST)
zdecydowanie nie jest sposobem na sprawdzenie, czy formularz został przesłany.