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:
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:
Pergunta
Frank K Hosaka
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:
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:
Ideias simples são fáceis de entender, o duro é como usar na prática.
Editado por Frank K HosakaLink para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.