Qual é a melhor maneira de verificar se um formulário foi ou não enviado para determinar se devo passar as variáveis do formulário para minha classe de validação?
Primeiro pensei que talvez:
isset($_POST)
Mas isso sempre retornará verdadeiro, pois uma superglobal é definida em todos os lugares. Não quero ter que percorrer cada elemento do meu formulário com:
if(isset($_POST['element1']) || isset($_POST['element2']) || isset(...etc
Enquanto escrevia essa pergunta, pensei em uma solução muito mais básica, adicione um campo oculto para atuar como uma bandeira que eu possa verificar.
Existe uma maneira 'mais limpa' de fazer isso do que adicionar minha própria bandeira?
php
forms
validation
Anônimo
fonte
fonte
submited
e, em seguida, usar o phpif(isset($_POST['submited']))
ou uma entrada escondida ...Respostas:
Para verificação geral, se houve uma
POST
ação, use:EDIT : Como indicado nos comentários, este método não funciona em alguns casos (por exemplo, com caixas de seleção e botão sem nome). Você realmente deve usar:
fonte
E se
fonte
Na verdade, o botão enviar já executa essa função.
Tente no FORMULÁRIO:
Então, no manipulador PHP:
fonte
if (null !== (filter_input(INPUT_POST, 'macaddress'))){
o que você recebe o hábito de usar filter_inputUsar
fonte
if ($_SERVER['REQUEST_METHOD'] == 'POST')
.fonte
Tente isto
fonte
Em uma observação diferente, também é sempre uma boa prática adicionar um token ao seu formulário e verificar se os dados não foram enviados de fora. Aqui estão os passos:
Gere um token exclusivo (você pode usar o hash)
Atribua esse token a uma variável de sessão. Ex:
Adicione uma entrada oculta para enviar o token. Ex:
como parte de sua validação, verifique se o token enviado corresponde à var da sessão.
fonte
Eu tive o mesmo problema - também certifique-se de adicionar
name=""
o botão de entrada. Bem, essa correção funcionou para mim.fonte
Você também pode usar:
fonte
is_array($_POST)
sempre dá verdade (na minha máquina). De acordo com 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
, por isso parece-se esperar que este sempre retorna true ..is_array($_POST)
definitivamente não é a maneira de verificar se o formulário foi enviado.