Validação e redirecionamento PHP Multiform
-
09-06-2019 - |
Pergunta
Eu tenho buy.php
com um forma onde você entra itens, quantidade, dados de envio, etc.
Quando você clica no Botão de envio, ele posta de volta para buy.php
($_SERVER['PHP_SELF'])
e faz alguma validação de dados.
Se houver campos faltando ou erros, eles serão destacados.Se tudo estiver correto, eu salvo o $_POST
dados em $_SESSION
variáveis, então faça um header('Location: check.php')
, onde exibo os dados para que o comprador possa verificar as informações uma última vez antes de realmente comprar.
Agora, se eu estiver dentro check.php
e aperte o botão Voltar para buy.php
para que eu possa alterar as coisas, o navegador pergunta se desejo reenviar os dados do POST.Estou tentando evitar isso.
Alguém tem algum bom conselho ou boas práticas para validação do PHP Multiform?
Além disso, se eu tivesse n páginas para o usuário preencher, buy.php, buy2.php, ... buyn.php
antes de check.php as mesmas ideias ainda seriam válidas?
Solução
Você poderia fazer um redirecionamento para buy.php depois de salvar no objeto de sessão, que então redireciona o servidor para check.php, isso significaria que quando o usuário clicar de volta, ele voltará para a solicitação GET e não para a solicitação POST
Outras dicas
Sim - concordo com o acima.EU SEMPRE faço um redir
longe da última postagem, então clicar em voltar os devolve sem esse erro OU reenvios.também evita complicações.você sempre pode marcar o redir
página de link com um ?m
ou &m
(ou seja: page.php?m
) e tem isto no topo da página:(usar elseif
Depois disso)
if (isset($_GET['m'])) {
echo 'order placed.';
}
else {
//...
}
Você também pode ter tudo em uma página.Basta nomear os botões de envio submit1
, submit2
, como:(tenha em mente que se você usar uma imagem para envios, ela se tornará $_POST['submit1_x']
:)
if (isset($_POST[submit1]) {
//validate + save session data from form1
//display form 2
} else if(isset($_POST[submit2])) {
//validate + save session data from form2
//display form 3
} else {
//display first form
//<input type="submit" name="submit1" value="Continue">
}