JAMES WEB
Aprenda como se faz.
CRUD Categorias (Editar)
Agora vamos editar uma categoria. Para isto vamos fazê-lo com os mesmos procedimentos que usamos com os usuários. Primeiro verifique o link no template categories.html no botão “Editar” se está conforme o modelo a seguir:
<a href=”/ecommerce/admin/categories_get/{$value.idcategory}” class=”btn btn-primary btn-xs”><i class=”fa fa-edit”></i> Editar</a>
Esse código é uma forma eficiente de gerar links dinâmicos para editar categorias em um painel administrativo de e-commerce. Ele usa o PHP para inserir o ID da categoria na URL, garantindo que o usuário seja direcionado para a página de edição correta.

Veja o que este código faz com o botão “Editar”:
- <a href=”/ecommerce/admin/categories_get/{$value.idcategory}” class=”btn btn-primary btn-xs”>:
Essa é a base do nosso link. A tag <a> define um hiperlink, o “href” especifica o destino do link, e o “class” define estilos visuais usando o Bootstrap. - /ecommerce/admin/categories_get/{$value.idcategory}:
Aqui está o coração da questão. Essa é a URL que o link aponta. - /ecommerce/admin/categories_get/:
Essa é a parte fixa da URL, indicando que estamos acessando uma função para obter dados de uma categoria no painel administrativo do ecommerce. - {$value.idcategory}:
Essa é a parte dinâmica. O PHP está inserindo o ID da categoria específica aqui. O “$value” representa um objeto ou array que contém os dados da categoria, e “idcategory” é a propriedade que armazena o ID. - <i class=”fa fa-edit”></i> Editar:
Essa é a parte visual do link. - <i class=”fa fa-edit”></i>:
Isso insere um ícone de edição usando a biblioteca Font Awesome. - Editar:
Esse é o texto que acompanha o ícone, informando ao usuário que o link serve para editar a categoria.
Rota Página Editar Categoria
Quando um usuário clica no botão “Editar” em uma categoria, o navegador faz uma requisição para a URL gerada, que contém o ID da categoria. O código PHP captura esse ID, busca os dados da categoria no banco de dados e os envia para o template “categories-update.html“. O template, por sua vez, exibe um formulário com os dados da categoria, permitindo que o usuário os edite.
Acesse o arquivo admin-categories.php e adiciona a “Rota Página Editar Categoria” logo abaixo da “Rota Listar Categorias” conforme o exemplo a seguir:
PHP: admin-categories.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php // ... Inicio do código // Rota Página Editar Categoria (categories_get) Botão Editar Template categories-update.html $app ->get( '/admin/categories_get/:idcategory' , function ( $idcategory ) { User::verifyLogin(); $category = Category::listByIdCategory((int) $idcategory ); $page = new PageAdmin(); $page ->setTpl( "categories-update" , array ( "category" => $category )); }); // ... Resto do código ?> |
Veja como o código funciona linha por linha:
- L5 – $app->get(‘/admin/categories_get/:idcategory’, function($idcategory) { … });: Aqui, estamos definindo uma rota no nosso aplicativo. Pense nisso como um endereço na internet. Quando alguém acessa /admin/categories_get/ seguido de um número (o idcategory), essa função é executada.
- $app->get: Indica que estamos lidando com uma requisição do tipo GET, ou seja, o navegador está pedindo informações.
- /:idcategory: É um parâmetro dinâmico. O PHP vai capturar o valor que for colocado ali e armazená-lo na variável $idcategory.
- L6 – User::verifyLogin();:
Essa linha é crucial para a segurança. Ela verifica se o usuário está logado no painel administrativo. Sem essa verificação, qualquer um poderia acessar a página de edição de categorias. - L7 – $category = Category::listByIdCategory((int)$idcategory);: Aqui, estamos buscando os dados da categoria no banco de dados.
- Category::listByIdCategory(): É uma função que busca uma categoria pelo ID.
- (int)$idcategory: Garante que o ID seja tratado como um número inteiro, evitando problemas de segurança.
- L8 – $page = new PageAdmin();: Estamos criando um objeto $page da classe PageAdmin. Essa classe é responsável por renderizar as páginas do painel administrativo.
- L9 – $page->setTpl(“categories-update”, array(“category”=>$category));: Essa linha é onde a mágica acontece.
- setTpl() Define qual template HTML será usado para exibir a página de edição (no caso, “categories-update.html“).
- array(“category”=>$category) Array que passa os dados da categoria para o template. Assim, o template pode exibir os dados da categoria no formulário de edição.
Função listByIdCategory(intval($_GET[‘id’]));
A linha category = Category::listByIdCategory((int)$idcategory); da “Rota Página Editar Categoria” Chama a função listByidCategory. Este trecho de código, define uma função estática dentro da classe Category que é responsável por buscar uma categoria específica no banco de dados com base em seu identificador.
Dentro do código “Category.php” insira a função listByidCategory().
PHP: Category.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php // ... Inicio do código public static function listByIdCategory( $idcategory ) { $sql = new Sql(); return $sql ->select( "SELECT * FROM tb_categories WHERE idcategory = :idcategory" , [ ':idcategory' => $idcategory ]); } // ... Resto do código ?> |
Vamos lá, pessoal, hora de dissecar esse código PHP e entender como ele busca informações de categorias no banco de dados. Imagine que você precisa buscar os dados de uma categoria específica no banco de dados. Essa função listByIdCategory recebe o ID da categoria como entrada, monta uma consulta SQL para buscar os dados dessa categoria e retorna o resultado da consulta.
- L4 – public static function listByIdCategory($idcategory):
Aqui, estamos definindo uma função pública e estática chamada listByIdCategory. - “Public” significa que essa função pode ser chamada de qualquer lugar do nosso código.
- “static” significa que podemos chamar essa função diretamente da classe Category, sem precisar criar um objeto dela.
- $idcategory é o parâmetro da função, ou seja, o ID da categoria que queremos buscar.
- L6 – $sql = new Sql();
Estamos criando um objeto $sql da classe Sql. Essa classe encapsula a lógica de interação com o banco de dados. - L7 – “SELECT * FROM tb_categories WHERE idcategory = :idcategory”
È a consulta SQL que estamos executando. Ela busca todas as colunas (*) da tabela tb_categories onde o idcategory é igual ao valor passado como parâmetro. - [‘:idcategory’=>$idcategory]
É um array que associa o valor do parâmetro $idcategory ao marcador :idcategory na consulta SQL. Isso é importante para evitar ataques de injeção de SQL.
categories-update.html
Esse código é a estrutura básica de uma página pra editar categorias de produtos em um e-commerce. Ele usa HTML pra organizar os elementos da página, e um sistema de templates (representado por {$value.idcategory} e {loop=”$category”}) pra exibir e processar os dados das categorias. É como se a gente estivesse montando um formulário dinâmico, que se adapta ao número de categorias que a gente tem.
Crie o código “categories-update.html” dentro da pasta “xammp/htdocs/ecommerce/view/admin“.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <!-- Content Wrapper. Contains page content --> < div class = "content-wrapper" > <!-- Content Header (Page header) --> < section class = "content-header" > < h1 > Lista de Categorias </ h1 > </ section > <!-- Main content --> < section class = "content" > < div class = "row" > < div class = "col-md-12" > < div class = "box box-primary" > < div class = "box-header with-border" > < h3 class = "box-title" >Editar Categoria</ h3 > </ div > <!-- /.box-header --> <!-- form start --> {loop="$category"} < form role = "form" action = "/ecommerce/admin/categories_post/{$value.idcategory}" method = "post" > < div class = "box-body" > < div class = "form-group" style = "display: none" > < label for = "idcategory" >idcategory</ label > < input type = "text" class = "form-control" id = "idcategory" name = "idcategory" placeholder = "idcategory" value = "{$value.idcategory}" > </ div > < div class = "form-group" > < label for = "idcategory" >Categoria</ label > < input type = "text" class = "form-control" id = "descategory" name = "descategory" placeholder = "Digite a categoria" value= "{$value.descategory}" > </ div > <!-- /.box-body --> < div class = "box-footer" > < button type = "submit" class = "btn btn-primary" >Salvar</ button > </ div > </ form > {/loop} </ div > </ div > </ div > </ section > <!-- /.content --> </ div > <!-- /.content-wrapper --> |
- L2 – <div class=”content-wrapper”>
É como o palco onde a mágica acontece. É aqui que a gente organiza todo o conteúdo da página de edição de categorias. Pensem nisso como o espaço principal do nosso painel administrativo. - L4 a L7 – <section class=”content-header”> e <h1>Lista de Categorias</h1>
São tipo o letreiro do nosso palco, dizendo “Ei, aqui a gente mexe nas categorias!”. É importante ter esse título pra gente se orientar, saber onde estamos e o que estamos fazendo. - L11 – <section class=”content”>
É onde a gente entra no coração da edição. É aqui que a gente encontra o formulário pra mudar as categorias. - L15 – <div class=”box box-primary”>
É como uma caixa de ferramentas. Dentro dela, a gente tem o formulário pra editar a categoria. - L17 – <h3 class=”box-title”>Editar Categoria</h3>
É o título dessa caixa de ferramentas, deixando claro que vamos mudar alguma coisa. - L24 – {loop=”$category”}
É uma instrução de um sistema de templates, não HTML puro, e desempenha um papel fundamental na exibição e edição de múltiplas categorias. Ela pega uma variável chamada $category, que contém uma lista de categorias, e itera (ou percorre) por cada item dessa lista. Dentro do loop, a variável $value é criada. Ela representa a categoria atual na iteração. $value contém um array associativo com os detalhes da categoria, como idcategory e descategory. - O código HTML dentro do bloco do loop é executado, e as variáveis como {$value.idcategory} e {$value.descategory} são substituídas pelos valores correspondentes da categoria atual. Isso gera um formulário de edição único para cada categoria.
Salvando dados editados da categoria.
Depois de acessados e editados os dados da ctegoria é necessário salvar estes dados no banco de dados. Para isto devemos chamar a rota “$app->post(“/admin/categories/:idcategory”… que deve ser criada dentro do código “admin-categories.php“. Imagine que estamos no painel administrativo do nosso e-commerce, editando uma categoria de produtos. Clicamos no botão “Salvar” no formulário, e é aí que esse código PHP entra em ação. Veja como será a seguir:
Veja o código abaixo:
Rota >$app->post(“/admin/categories/:idcategory”…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php // ... Inicio do código // Rota Salvar Edição Categoria (categories_post) Botão Salvar Template categoria-update.html $app ->post( '/admin/categories_post/:idcategory' , function ( $idcategory ) { User::verifyLogin(); $category = new Category; $category ->get((int) $idcategory ); $category ->setData( $_POST ); $category ->save(); header( "Location: /ecommerce/admin/categories" ); exit ; }); // ... Resto do código ?> |
- L5 – $app->post(‘/admin/categories_post/:idcategory’, function($idcategory) {
- $app->post():
Essa linha define uma rota que será acionada quando um formulário for enviado usando o método HTTP POST. - /admin/categories_post/:idcategory:
Essa é a URL da rota. O :idcategory é um parâmetro dinâmico, ou seja, ele pode mudar dependendo da categoria que estamos editando. É como se fosse um identificador único para cada categoria. - function($idcategory) { … }:
Essa é uma função que será executada quando a rota for acionada. O $idcategory é o valor do parâmetro dinâmico que recebemos da URL.
- $app->post():
- L6 – User::verifyLogin();:
Essa linha verifica se o usuário está logado e tem permissão para editar categorias. É como se fosse um porteiro que só deixa entrar quem tem a senha correta. - L7 – $category = new Category;:
Essa linha cria um novo objeto da classe Category. É como se estivéssemos instanciando um objeto que representa a categoria que vamos editar. - L8 – $category->get((int)$idcategory);:
Essa linha busca os dados da categoria no banco de dados, usando o $idcategory que recebemos da URL. O (int) garante que o $idcategory seja um número inteiro. - L9 – $category->setData($_POST);:
Essa linha pega os dados que o usuário enviou no formulário (usando $_POST) e os atribui ao objeto $category. É como se estivéssemos atualizando os dados da categoria com as informações que o usuário digitou. - L10 – $category->save();:
Essa linha salva as alterações no banco de dados. É como se estivéssemos confirmando as mudanças que o usuário fez. - L11 – header(“Location: /ecommerce/admin/categories”);:
Essa linha redireciona o usuário para a página de listagem de categorias. É como se estivéssemos levando o usuário de volta para a página principal após salvar as alterações. - L12 – exit;:
Essa linha garante que o script PHP pare de ser executado após o redirecionamento.
Ao retornar a página principal do seu Ecommerce na parte de categorias, voc~e perceberá que os dados editados foram atualizados.
Para saber mais…
- categories_get
- Tabela – tb_categories
- verifyLogin()