1
resposta

[Sugestão] Verificação na busca por produtos

Olá! Gostaria de compartilhar com a comunidade algumas alterações que fiz no código para lidar com IDs inexistentes. Meu método buscar() em ProdutoRepositorio.php ficou assim:

public function buscar(string $id): ?Produto
    {
        $sql = 'SELECT * FROM produtos WHERE id = :id';
        $statement = $this->pdo->prepare($sql);
        $statement->bindValue('id', $id, PDO::PARAM_INT);
        $statement->execute();
        $dados = $statement->fetch(PDO::FETCH_ASSOC);
        if ($dados === false) {
            return null;
        }
        return $this->formarObjeto($dados);
    }

Como o método fetch() do PDO retorna false se não houver ocorrência, incluí um retorno null para esse caso. Em editar-produto.php fiz uma verificação do produto retornado para que caso seja nulll, redirecionoe usuário para admin.php:

<?php

require 'src/conexao-bd.php';
require 'src/Modelo/Produto.php';
require 'src/Repositorio/ProdutoRepositorio.php';

if (!isset($_GET['id'])):
  header("Location: admin.php");
  exit;
endif;
  $produtoRepositorio = new ProdutoRepositorio($pdo);
  $produto = $produtoRepositorio->buscar($_GET['id']);
  
  if ($produto === null):
    header("Location: admin.php");
    exit;
  endif;

  if (isset($_POST['editar'])):
    $produtoEditado = new Produto(
      $_POST['id'], 
      $_POST['tipo'], 
      $_POST['nome'], 
      $_POST['descricao'], 
      $_POST['preco'],
      $_POST['imagem']
    );
      $produtoRepositorio->atualizar($produtoEditado);
      header("Location: admin.php");
  endif;

?>

Como podem ver, também coloquei uma verificação no início para a página não se acessada sem que um id seja passadon a url.

1 resposta

Boa, Aurélio. Isso aí!

Essas validações garantem um sistema mais resiliente. Parabéns!