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.