Jump to content
Fórum Script Brasil
  • 0

A lei do retorno no PHP


Frank K Hosaka

Question

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.

Edited by Frank K Hosaka
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...