Ir para conteúdo
Fórum Script Brasil
  • 0

A lei do retorno no PHP


Frank K Hosaka

Pergunta

Hoje eu descobri como funciona o projeto Vagas (GitHub - william-costa/wdev-crud-php-pdo-mysql: CRUD com PHP orientado a objetos, PDO e MySQL feito no canal WDEV), onde o William criou um arquivo chamado formulário, e ele utiliza tanto para cadastrar bem como atualizar o cadastro.

Eu não sabia como o formulário era capaz de devolver a resposta do usuário ao programa cadastrar.php ou editar.php.

O grande truque é a propriedade action do <form>, o William simplesmente omitiu, ou seja, se o programa cadastrar.php chamar o formulario.php e o usuário apertar o botão enviar, o PHP vai executar novamente o programa cadastrar.php. Desde 2020 eu faço a mesma coisa, mas só nessa semana é que entendi como funciona o PHP. O botão enviar é poderoso para preparar o navegador para receber um novo arquivo HTML, mas não tão poderoso para apagar o último código executado pelo PHP.

Essa é a poderosa lei do retorno. O PHP só vai apagar o último código se o HTML pedir.

Para testar isso na prática, eu criei o código teste.php:

<?php
if(isset($_POST['teste'])){
    echo "teste concluído";exit;}
echo "<form method=post><input type=submit name=teste></form>";

Eu fiz um complicado código no meu projeto para fazer o PHP executar a rotina de quem chamou o formulário, quando, na verdade, a solução do William é bem mais simples. Tudo o que o PHP tem que fazer é esperar a resposta do usuário e executar o código se o usuário responder.

Assim, eu tentei ajustar o meu código à simplicidade do William, mas não deu certo. A pergunta é: por que a lei do retorno só funciona no caso do William?

A resposta é simples. No caso do William, foi um código PHP puro que chamou o formulário. No meu caso, é uma função de uma classe que chamou o formulário.

Ou seja, na hora que o usuário submeter o formulário, o último código executado pelo PHP não é a função que chamou o formulário, mas a classe inteira a que a função pertence. Ou seja, se a classe não estiver preparada, certamente o usuário vai ver uma tela branca e se perguntar porque o PHP não funciona.

Mesmo assim, a solução do William (não usar action no <form>) parece funcionar na classe também. Eu pedi para a classe instanciar uma nova classe, e aguardar algum usuário apertar o botão de enviar, e pedi para escrever "olá mundo", e deu certo. Agora, preciso fazer uma gambiarra no formulário para a classe saber se vai cadastrar ou editar um registro. No formulário eu tenho um botão e o texto será definido pela função novo ($btn="novo";) ou pela função edite ($btn="edite";), e dentro do <form> vou criar um
<input type=hidden name=retorno value=<?=$btn?>>, e lá na classe instanciada, vou fazer isso:
 

<?php
class Diario { ... }
$Diario=new Diario()
if(isset($_POST['retorno']){
	if($_POST['retorno']=="novo"){$Diário->novo();}
	if($_POST['retorno']=="edite"){$Diário->edite();} }

Ideias simples são fáceis de entender, o duro é como usar na prática.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...