JAMES WEB
Aprenda como se faz.
CRUD Categorias (Excluir)
Neste ponto do nosso projeto Ecommerce já seremos capazes de cadastrar e listar itens da categoria. Agora podemos criar os procedimentos para excluir uma categoria de nosso sistema.
Ao clicar no link “Categorias” no menu principal será apresentado o formulário “Lista de Categorias”, listando todas as categorias cadastradas. Em cada linha de dados temos dois botões: “Editar” e “Excluir”. Ao clicar em “Excluir” em uma destas linhas, o processo de exclusão será chamado e poderá ser executado.

Excluindo uma categoria.
Para acessar o código do botão excluir categoria, entre em “categories.html” dentro da pasta “xamp\htdocs\ecommerce\views\admin” e edite o código conforme o exemplo abaixo na linha 11. Observe que o trecho entre as tags “<tbody>” se refere a reprodução de uma tabela HTML exibindo os itens de categoria, onde cada linha apresenta um botão editar e o excluir.
HTML: categories.html > botão excluir categoria
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php // ... (inicio do código) <tbody> {loop= "$categories" } <tr> <td>{ $value .idcategory}</td> <td>{ $value .descategory}</td> <td> <a href= "/ecommerce/admin/categories_get/{$value.idcategory}" class = "btn btn-primary btn-xs" ><i class = "fa fa-edit" ></i> Editar</a> <a href= "/ecommerce/admin/categories_delete/{$value.idcategory}" " onclick=" return confirm( 'Deseja realmente excluir este registro?' ) " class=" btn btn-danger btn-xs "><i class=" fa fa-trash"></i> Excluir</a> </td> </tr> {/loop} </tbody> // ... (Final do código.) ?> |

Analizando linha por linha o código:
- L5 – {loop=”$categories”}
- {loop … } Esta construção representa um sistema de laço de repetição. Indica que o código dentro deste bloco será executado repetidamente para cada item presente na variável $categories, isto é, para cada categoria.
- “$categories” Esta variável contém um conjunto de dados, isto e, um array ou lista, onde cada elemento representa uma categoria.
- L7 – < td>{$value.idcategory}</td >
- < td> … </td > Esta tag define uma célula de dados em uma tabela HTML.
- {$value.idcategory} Esta expressão exibe o valor do campo idcategory do item atual da iteração do laço. Este campo representa o identificador único da categoria.
- L8 – < td>{$value.descategory}</td >
- Similar ao anterior, este trecho exibe o valor do campo descategory do item atual. Este campo contém o nome da categoria.
- L9 a L12 – < td> … </td > (Linha com links)
- Esta célula contém dois links nos botões: “Editar” e “Excluir”.
- L10 – <a href=”/ecommerce/admin/categories_get/{$value.idcategory}” class=”btn btn-primary btn-xs”><i class=”fa fa-edit”></i> Editar</a>
- <a> … </a>: Esta tag define um link HTML.
- href=”/ecommerce/admin/categories_get/{$value.idcategory}”: Este atributo define o destino do link. Note que ele inclui o idcategory da categoria atual, permitindo que a página de edição seja aberta para a categoria correta.
- class=”btn btn-primary btn-xs”: Esta classe define a aparência do botão como um botão primário pequeno, utilizando provavelmente um framework CSS como Bootstrap.
- <i class=”fa fa-edit”></i>: Este ícone de edição, provavelmente proveniente de um framework de ícones como Font Awesome, é exibido dentro do botão.
- Editar: Texto do link.
- L11 – <a href=”/ecommerce/admin/categories_delete/{$value.idcategory}” onclick=”return confirm(‘Deseja realmente excluir este registro?’)” class=”btn btn-danger btn-xs”><i class=”fa fa-trash”>&t;/i> Excluir</a>
- Similar ao link de edição, este link leva à página de exclusão da categoria.
- onclick=”return confirm(‘Deseja realmente excluir este registro?’)”>: Este código JavaScript exibe uma caixa de diálogo de confirmação antes de o link ser seguido, impedindo exclusões acidentais.
- class=”btn btn-danger btn-xs”: Esta classe define a aparência do botão como um botão primário pequeno, utilizando um framework CSS Bootstrap.
- <i class=”fa fa-trash”></i>: Este ícone de lixeira é exibido dentro do botão.
- Excluir: O texto do link.
- L13 – </tr> : Esta tag define o fim de uma linha da tabela.
- L14 – {/loop} : Esta marca indica o fim do bloco de repetição.
Excluindo um registro de categoria.
Ao clicar no botão excluir o código JavaScript exibe uma caixa de diálogo de confirmação antes de o link ser seguido, impedindo exclusões acidentais. Se confirmarmos a exlusão do registro seremos direcionados para a rota “admin/categories/:idcategory/delete” que recebe o ID da categoria s ser tratada.
Portanto teremos de criar a rota “admin/categories/:idcategory/delete” dentro do código “admin-categories.php” exemplificado a seguir:
admin-categories.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php use \Hcode\Page; use \Hcode\PageAdmin; use \Hcode\Model\User; use \Hcode\Model\Category; // ... Restante do código admin-categories.php ... $app ->get( "/admin/categories_delete/:idcategory" , function ( $idcategory ) { User::verifyLogin(); $category = new Category(); $category ->get((int) $idcategory ); $category -> delete (); header( "Location: /ecommerce/admin/categories" ); exit ; }); ?> |
- L10 – $app-> get (¨/admin/categories/:idcategory/delete”, function($idcategory) Criamos a rota de exclusão de categoria que recebe o ID da categoria por “idcategory” e excuta a função function($idcategory).
- L12 – User::verifyLogin(); Verificamos se o usuário está logado, através do método “verifyLogin()“.
- L13 – $Category = new Category; Crie o objeto “$Category” em uma nova instância Category()“.
- L14 – $Category->get((int)$idcategory); Usando o método “get” (ainda não criado) vamos carregar o objeto juntamente com os dados.
- L15 – $Category->delete(); Se o objeto for carregado, poderá ser excluído, através do método “delete()“.
- L16 – header(‘Location: /admin/categories’); Após a exclusão da categoria seremos redirecionados de volta na página “Lista de Categorias”.
- L4 – public function delete():
Essa é a função delete(). Ela é pública, ou seja, pode ser chamada de qualquer lugar do seu sistema. O objetivo dela? Excluir uma categoria. - L6 – $sql = new Sql();:
Aqui, a gente cria um objeto $sql da classe Sql. Essa classe é responsável por interagir com o banco de dados. - L7 – $sql->query(“DELETE FROM tb_categories WHERE idcategory = :idcategory”, array( “:idcategory”=>$this->getidcategory() ));
Essa é a query ‘Delete‘ que significa apagar. ‘From tb_categories‘ diz que a gente quer apagar algo da tabela ‘tb_categories‘. ‘Where idcategory = :idcategory‘ é a condição: a gente só vai apagar a categoria que tiver o ‘idcategory‘ igual ao valor que a gente vai passar.- :idcategory”=>$this->getidcategory();:
Aqui, a gente passa o valor do ‘idcategory‘. O “:idcategory” é um placeholder, um espaço reservado. O “$this->getidcategory()” pega o ID da categoria que a gente quer apagar. É uma boa prática usar placeholders para evitar “SQL injection“, um tipo de ataque hacker. Segurança em primeiro lugar, pessoal!
- :idcategory”=>$this->getidcategory();:
- L11 – Category::update_menu_categories();
E pra finalizar, a gente chama a função update_menu_categories(). Essa função, atualiza o menu de categorias do seu site. Se você apagou uma categoria, o menu precisa refletir essa mudança, certo? É como atualizar o cardápio depois que um prato sai de linha.
Excluindo registro através do metodo delete()
O código a seguir, dentro da classe Category.php, é responsável por deletar uma categoria específica do banco de dados. Esse código pega o ID da categoria que você quer apagar, manda um comando pro banco de dados deletar essa categoria, e depois atualiza o menu do seu site. Simples assim! É um exemplo clássico de como o PHP interage com o banco de dados para manipular informações.
Inclua o código “função delete()” dentro da classe “Category.php“.
Veja o código linha por linha:
Category.php (trecho – função delete())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php // ... início código Category.php ... public function delete () { $sql = new Sql(); $sql ->query( "DELETE FROM tb_categories WHERE idcategory = :idcategory" , array ( ":idcategory" => $this ->getidcategory() )); Category::update_menu_categories(); } // ... resto código Category.php ... ?> |
Método update_menu_category
Esse código pega todas as categorias do banco de dados, cria um menu HTML dinâmico com links para cada categoria, e salva esse menu em um arquivo HTML. É assim que a gente mantém o menu de categorias do site sempre atualizado, sem precisar editar o código HTML manualmente. É uma forma de automatizar a criação do menu, e manter o site sempre atualizado.
Insira dentro do código “Category.php” o método “update_menu_category” descrito linha por linha a seguir:
Category.php (trecho “update_menu_category”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // ... início código Category.php ... public function update_menu_categories() { $category = Category::listAll(); $html = []; foreach ( $category as $row ) { array_push ( $html , '<li><a href="/ecommerce/category/' . $row [ 'idcategory' ]. '">' . $row [ 'descategory' ]. '</a></li>' ); } file_put_contents ( 'c:\xampp\htdocs\ecommerce\views\categories-menu.html' , implode( '' , $html )); } // ... resto código Category.php ... ?> |
Pessoal, essa é a função “update_menu_categories()“. Ela é pública, então pode ser chamada de qualquer lugar do sistema. O objetivo dela? Atualizar o menu de categorias do site, que fica na parte inferior da página principal de nossa loja ecommerce.
Aqui, a gente chama a função listAll() da classe Category. Essa função busca todas as categorias do banco de dados e retorna um array com os dados de cada categoria. Pensa nisso como um ‘cardápio completo’ de todas as categorias.
A gente cria um array vazio chamado $html. Esse array vai armazenar as linhas de código HTML que representam cada item do menu.
Esse é um loop foreach. Ele percorre cada categoria que a gente pegou do banco de dados. Para cada categoria, a gente executa o código dentro das chaves.
Dentro do loop, a gente usa a função array_push() para adicionar uma nova linha de código HTML ao array $html. Essa linha cria um item de lista (<li>) com um link (<a>) para a página da categoria.
- /ecommerce/category/’.$row[‘idcategory’]
Essa parte cria o link dinamicamente, usando o ID da categoria. - $row[‘descategory’]
Essa parte pega o nome da categoria do banco de dados e coloca como texto do link.

Veja a seguir o código gerado “categories-menu.html“:
1 2 | < li >< a href = "/ecommerce/category/25" >Android</ a ></ li >< li >< a href = "/ecommerce/category/8" >Apple</ a ></ li >< li >< a href = "/ecommerce/category/11" >Motorola</ a ></ li >< li >< a href = "/ecommerce/category/9" >Samsung</ a ></ li > |