Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Formulário de edição de conteúdo (consulta via BD ou via POST?)

Saudações companheiros programadores, aqui no curso PHP e MySQL 1, aula10 - Ítem 5, surgiu a seguinte dúvida duvidosa :D

Problema: Formulário de alteração: Faça o formulário de alteração de produto. Lembre-se de pegar o produto no banco de dados, e exibir os valores em cada um dos campos do formulário. Lembre-se também do campo hidden com o ID.

Caros colegas, o problema é que eu não fiz essa busca no BD, eu simplesmente fiz o envio dos dados que queria alterar para uma nova página PHP que recebe os dados vis POST (fiz isso em uma página separada para facilitar a organização de meus códigos/OBS: Não sei nada de PHO-OO).

A pergunta é: É errado fazer isso?

Segue os dados abaixo para facilitar o entendimento do que eu fiz (estou seguindo o tutorial usando PDO e não "SQLi":

  • BOTÃO EDITAR PRODUTO DE UM ÍTEM DA MINHA TABELA

    <div class="btn-group">
                      <button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                          Opções <span class="caret"></span>
                      </button>
                      <ul class="dropdown-menu">
                          <li class="text-center">
                              <form action="chamado_atualiza_form.php" method="post">
                                  <input type="hidden" name='nome' value="<?= $cadastro->nome ?>">
                                  <input type="hidden" name='departamento_id' value="<?= $cadastro->departamento_id ?>">
                                  <input type="hidden" name='mensagem' value="<?= $cadastro->msg ?>">
                                  <input type="hidden" name='id' value="<?= $cadastro->id ?>">
    
                                  <button class="btn btn-warning">Editar</button>
                              </form>
                          </li>
                          <li role="separator" class="divider"></li>
                          <li class="text-center">
                              <form action="chamado_deleta.php" method="post">
                                  <input type="hidden" name='id' value="<?= $cadastro->id ?>">
                                  <button class="btn btn-danger">Excluir</button>
                              </form>
                          </li>
                      </ul>
                  </div>

*PÁGINA QUE RECEBE OS DADOS PARA EDIÇÃO DE CONTEÚDO VIA POST

$nome = $_POST['nome'];
$departamento = $_POST['departamento_id'];
$msg = $_POST['mensagem'];
$id = $_POST['id'];
6 respostas

Olha não testei mas achei estranho...acho que seria mais interessante passar o id do que vai editar e fazer o select, pode ser que sua variável não pegue exatamente o que tenha no banco e induza o usuário ao erro.

Olá André, obrigado por responder. Mais os dados que estou editando foram "retirados" do banco, apenas não vi necessidade de TENTAR fazer outra busca no banco, achei mais fácil enviar meus dados via POST para outra página e inseri-los no formulário de edição.

Ainda não tinha visto o vídeo sobre esse assunto, quando vi, fiquei na dúvida do que seria "MAIS CORRETO" :(

solução!

Boa noite Adriano, tudo bem? O "mais correto" é relativo. Mas, a prática mais comum nesse caso é passar o ID do produto para uma página de edição e nela executar um select no banco para resgatar os dados mais atuais do produto e então exibi-los no formulário.

Imagine um sistema com vários usuários acessando simultaneamente e editando produtos. Há uma chance muito grande de um usuário visualizar informações desatualizadas de um produto utilizando a sua implementação.

Além disso, tome um certo cuidado ao utilizar hidden fields ou parâmetros via query string em seu código. Certifique-se de que os valores desses parâmetros não são nocivos, pois, utilizá-los diretamente em queries de banco de dados, por exemplo, abre uma grande brecha de segurança em sua aplicação.

Em termos de performance a sua ideia de evitar um acesso ao banco de dados é super válida.

Espero ter ajudado.

Abs e boa sorte!

Olá Murilo, obrigado pelo comentário, se não for pedir muito, poderia me explicar um pouco melhor sobre os hidden fields ou parâmetros via query string servindo como brecha de segurança de uma aplicação (que você falou) ou indicar aonde posso aprender sobre tal?

Sou muito preocupado em desenvolver uma aplicação para um cliente e ele ser atacado, já vi isso acontecer com um amigo que já é programador, talvez (não, certeza) esse é meu maior medo em começar a colocar aplicações no "ar".

Eu estou me aventurando em desenvolver uma aplicação web para meu TCC seguindo os cursos da Alura, mais optei por usar PDO para tentar "fugir" (pelo menos diminuir) desta preocupação.

O que posso fazer/estudar/implantar/boas práticas para aumentar a "muralha" da minha aplicação?

Oi Adriano, a casa do código tem um livro que fala sobre segurança web, se você tiver como compra-lo acho que seria bacana para você, se não tiver como, recomendo que pegue o sumário do livro e veja quais falhas eles falam e comece a estudar cada uma procurando no google mesmo, você pode comprar o livro aqui.

Mas fazendo algumas coisinhas pequenas já ajudam nessa questão de segurança, como salvar a senha no banco de dados criptografada, filtrar os dados que chegam de formulários, sempre validar tudo.. Claro que tem muito mais para fazer, mas acho que esses detalhes também ajudam.

Oi Adriano, além da dica do Daniel, você pode fazer um curso aqui do Alura sobre segurança Web (https://cursos.alura.com.br/course/seguranca-web-vulnerabilidades-do-seu-sistema).

Acredito que ajudará bastante!

Boa sorte!