JAMES WEB
Aprenda como se faz.
CRUD Usuários (Editar usuário)
Ao acessar os usuários na página administrativa temos a disposição o botão editar. Para habilitar sua função temos que configurar a linha no template “users.html” referente ao botão conforme exemplo a seguir:
<a href=”/ecommerce/admin/users_get/{$value.iduser}” class=”btn btn-primary btn-xs”> <i class=”fa fa-edit”> Editar </a>

Veja o que este código faz com o botão “Editar”:
- <a href=”/ecommerce/admin/users_get/{$value.iduser}”>: <a>: Esta tag HTML define um link para outra página. href=”/ecommerce/admin/users_get/{$value.iduser}”: Este atributo especifica o endereço (URL) para onde o usuário será direcionado ao clicar no link. &id={$value.iduser}: Indica outro parâmetro “id”. O valor deste parâmetro é dinâmico e é obtido de uma variável PHP chamada “$value.iduser”. Esse valor corresponde ao ID do usuário que está sendo editado.
- class=”btn btn-primary btn-xs”: class: Este atributo define as classes CSS que serão aplicadas ao elemento . As classes “btn”, “btn-primary” e “btn-xs” são usadas para estilizar o link como um botão primário (geralmente azul) de tamanho extra pequeno, utilizando um framework CSS como o Bootstrap.
- <i class=”fa fa-edit”></i>: <i>: Esta tag define um ícone. class=”fa fa-edit”: A classe “fa fa-edit” é usada para exibir o ícone de edição do Font Awesome, um conjunto de ícones utilizado em muitos projetos web.
- Editar: Este texto é o texto visível do link. Ele indica a ação que será realizada ao clicar no link.
Carregando usuário para edição (Update)
O código apresentado a seguir está relacionado à atualização de informações de usuários do sistema. Insira o código no arquivo admin-users.php. A rota indica que esta parte do código é acessível apenas por administradores e é utilizada para editar informações de um usuário específico.
PHP: admin-users.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php // ... Inicio do código // Rota Formulário Editar usuário (users-get) Template users-update.html $app ->get( '/admin/users_get/:iduser' , function ( $iduser ) { User::verifyLogin(); $user = new User(); $user ->get((int) $iduser ); $page = new PageAdmin(); $page ->setTpl( "users-update" , array ( "user" => $user ->getValues() )); }); // ... Resto do código ?> |
Explicação detalhada
- L5 – $app->get(‘/admin/users_get/:iduser’,: Essa linha define uma nova rota GET dentro da aplicação. A rota é acessível pelo URL “/admin/users_get/:iduser,” onde “:iduser” é um parâmetro que será capturado e passado para a função anônima.
- function($iduser) {: Aqui, inicia-se uma função anônima que será executada quando a rota for acessada. A função recebe o parâmetro $iduser, que representa o ID do usuário a ser buscado.
- L6 – User::verifyLogin();: Essa linha chama o método estático “verifyLogin” da classe User para verificar se o usuário está logado. Se o usuário não estiver autenticado,será redirecionado ou exibida alguma mensagem de erro.
- L7 – $user = new User();: Cria-se um novo objeto da classe User, que representa um usuário no sistema.
- L8 – $user->get((int)$iduser);: Chama-se o método get do objeto $user, passando o ID do usuário como parâmetro. Esse método busca no banco de dados as informações do usuário com o ID correspondente e as atribui às propriedades do objeto $user. A conversão para inteiro (int)$iduser garante que o parâmetro seja tratado como um número.
- L9 – $page = new PageAdmin();: Cria-se um novo objeto da classe PageAdmin, que representa a página de administração.
- L10 – $page->setTpl(“users-update”, array(…));:
Chama-se o método setTpl do objeto $page, passando dois parâmetros:
- “users-update”: Nome do template (view) que será utilizado para renderizar a página.
- array(“user” => $user->getValues()): Um array associativo que contém os dados a serem passados para o template. O método getValues do objeto $user retorna um array com todas as propriedades do usuário, que serão utilizadas para preencher os campos da página.
Atualizando os dados editados
A efetuar as edições nas informações, precisamos salvar estas modificações no banco de dados. Para isto temos de modificar a linha que envia os dados via Post para edição. Veja a linha abaixo refente a linha no template “users-update”.
<!– form start –>
<form role=”form” action=”/ecommerce/admin/users_post/{$user.iduser}” method=”post”>
Essa linha de código encabeça um formulário HTML que, quando submetido, enviará os dados para a URL /ecommerce/admin/users_post/{$user.iduser} usando o método HTTP POST. O ID do usuário “{$user.iduser}” será incluído na URL dinamicamente.
Ao clicar no botão “Salvar” as ações relacionadas acima serão executadas e a rota que atualiza os dados será chamada. Insira o código a seguir no arquivo admin-users.php.
PHP: admin-users.php > Incluindo Rota Editar Usuário
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php // ... Inicio do código // Rota Salvar Edição Usuário - users_post // Botão Salvar Template users-update.html $app ->post( '/admin/users_post/:iduser' , function ( $iduser ) { User::verifyLogin(); $user = new User(); $user ->get((int) $iduser ); $user ->setData( $_POST ); $user ->update(); header( "Location: /ecommerce/admin/users" ); exit ; }); // ... Resto do código ?> |
Explicando linha por linha a rota “Editar Usuário”:
- L7 – $app->post(‘/admin/users_post/:iduser’,: Essa linha define uma nova rota POST dentro da aplicação. A rota é acessível pelo URL /admin/users_post/:iduser, onde :iduser é um parâmetro que será capturado e passado para a função anônima “function($iduser) { …“.
- L8 – User::verifyLogin();: Essa linha chama um método estático da classe User para verificar se o usuário está logado. Se o usuário não estiver autenticado, será redirecionado ou exibida alguma mensagem de erro.
- L9 – $user = new User(); cria um novo objeto User da classe User
- L10 – $user->get((int)$iduser); Busca as informações do usuário com o ID correspondente no banco de dados
- L11 – $user->setData($_POST);: Essa linha chama o método setData do objeto $user, passando o array $_POST como parâmetro. O array $_POST contém os dados enviados pelo formulário, incluindo os novos valores que o usuário deseja atualizar. O método setData atualiza as propriedades do objeto $user com esses novos valores.
- L12 – $user->update();: Essa linha chama o método update do objeto $user, que salva as alterações feitas no objeto no banco de dados.
- L13 – header(“Location: /ecommerce/admin/users”);: Essa linha define um cabeçalho de redirecionamento, indicando que o navegador deve ser redirecionado para a URL /ecommerce/admin/users, “Lista de Usuários”
- L14 – exit;: Essa linha interrompe a execução do script, evitando que qualquer código subsequente seja executado.
Método update() do objeto $user
O código a seguir define a função pública update() dentro de uma classe (User). Essa função, chamada na linha 12 “$user->update();”, é responsável por atualizar as informações de um usuário no banco de dados, utilizando um procedimento armazenado. Insira dentro do arquivo user.php.
PHP: user.php > Incluindo função Update:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php // ... Inicio do código public function update() { $sql = new Sql(); $results = $sql ->select("CALL sp_usersupdate_save(:iduser, :desperson,:deslogin, :despassword, :desemail, :nrphone, :inadmin)", array ( ":iduser" => $this ->getiduser(), ":desperson" => $this ->getdesperson(), ":deslogin" => $this ->getdeslogin(), ":despassword" => $this ->getdespassword(), ":desemail" => $this ->getdesemail(), ":nrphone" => $this ->getnrphone(), ":inadmin" => $this ->getinadmin() )); $this ->setData( $results [0]); } // ... Resto do código ?> |
Explicando linha por linha a função Update:
- L4 – public function update()
- public: A função é pública, ou seja, pode ser acessada de qualquer lugar do código.
- update: Este é o nome da função, indicando que ela é responsável por atualizar os dados de um usuário.
- L6 – $sql = new Sql(); Instanciando a Classe Sql: Cria uma nova instância da classe Sql. Essa classe encapsula a interação com o banco de dados, oferecendo métodos para executar consultas SQL.
- L7 – $results = $sql->select(“CALL sp_usersupdate_save(:iduser, :desperson, :deslogin, :despassword, :desemail, :nrphone, :inadmin)”, array( ….. Executa a procedure CALL sp_usersupdate_save(…): que neste caso é responsável por atualizar um registro na tabela de usuários.
- L10 a 16 – Parâmetros: Os valores dos parâmetros do procedimento são obtidos através dos métodos getiduser(), getdesperson(), etc. Esses métodos retornam os valores das propriedades correspondentes do objeto $this (ou seja, do objeto User que está sendo atualizado). O resultado da execução do procedimento é armazenado na variável $results.
- L18 – $this->setData($results[0]); Chama o método setData do próprio objeto para atualizar suas propriedades com os dados retornados do banco de dados.
- L19 – } Fim da Função: Indica o fim da definição da função.
Procedure user_usersupdate_save
No contexto do código que analisamos, o procedimento sp_usersupdate_save recebe os parâmetros e atualiza a tabela propriamente dita. Faça o download do código correspondente e carregue a procedure no banco de dados db_ecommerce. Veja o código sql a seguir:
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 | BEGIN DECLARE vidperson INT; SELECT idperson INTO vidperson FROM tb_users WHERE iduser = piduser; UPDATE tb_persons SET desperson = pdesperson, desemail = pdesemail, nrphone = pnrphone WHERE idperson = vidperson; UPDATE tb_users SET deslogin = pdeslogin, despassword = pdespassword, inadmin = pinadmin WHERE iduser = piduser; SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) WHERE a.iduser = piduser; END |
Veja como a procedure funciona:
- L1 – BEGIN Início do Procedimento: Indica o início do procedimento armazenado.
- L3 – DECLARE vidperson INT; Declara uma variável inteira chamada vidperson. Essa variável será usada para armazenar o valor do idperson do usuário que está sendo atualizado.
- L5 – SELECT idperson INTO vidperson FROM tb_users WHERE iduser = piduser; Seleciona o valor do idperson da tabela tb_users onde o iduser é igual a piduser. O valor selecionado é atribuído à variável vidperson. Isso é feito para obter o idperson do usuário antes de atualizar os dados nas tabelas relacionadas.
- L9 – UPDATE tb_persons SET desperson = pdesperson, desemail = pdesemail, nrphone = pnrphone WHERE idperson = vidperson; Atualiza os campos desperson, desemail e nrphone da tabela tb_persons onde o idperson é igual a vidperson. Os novos valores são fornecidos pelos parâmetros pdesperson, pdesemail e pnrphone.
- L16 – UPDATE tb_users SET deslogin = pdeslogin, despassword = pdespassword, inadmin = pinadmin WHERE iduser = piduser; Atualiza os campos deslogin, despassword e inadmin da tabela tb_users onde o iduser é igual a piduser. Os novos valores são fornecidos pelos parâmetros pdeslogin, pdespassword e pinadmin.
- L23 – SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) WHERE a.iduser = piduser; Realiza uma consulta para selecionar todos os campos das tabelas tb_users e tb_persons onde o iduser é igual a piduser. Isso é feito para retornar os dados atualizados do usuário após as alterações.
- L26 – END Indica o fim do procedimento armazenado.
Para saber mais: