JAMES WEB
Aprenda como se faz.
CRUD Usuários (Cadastrar usuários)
Continuando nossas ações do CRUD Usuários (Create, Read, Update, Delete), vamos habilitar o cadastro de um novo uusário. Para isto, temos editar o template template administrativo “users.html” (dentro da pasta views/admin). Localize o link Cadastrar Usuário e altere como no exemplo a seguir:
<a href=”/ecommerce/admin/users/create” class=”btn btn-success”>Cadastrar Usuário</a>
Após editar este link o botão “Cadastrar Usuário” já estará disponível na página administrativa. Este já está pronto para entar com os dados de nome, login, telefone, e-mail, senha e se terá acesso a área administrativa ou não (inadmin = 1), Ao clicar nele será exibido o formulário “cadastar usuário”:
No entanto o botão “Cadastrar” não produzirá nenhum efeito prático. Temos de implementar as funções para que isto ocorra.

Criando Rota Formulário Cadastrar Usuário (Create)
Acesse com seu editor de texto o código admin-users.php e insira a “Rota Formulário Cadastar Usuário (create)” conforme o exemplo a seguir:
PHP: admin-users.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // Rota Salvar Cadastro Usuário - create_post - Botão Cadastrar Usuário $app ->post( '/admin/users/create_post' , function () { User::verifyLogin(); $user = new User(); $_POST [ "inadmin" ] = (isset( $_POST [ "inadmin" ]))?1:0; // Criptografar a senha if (isset( $_POST [ 'despassword' ])) { $_POST [ 'despassword' ] = password_hash( $_POST [ 'despassword' ], PASSWORD_DEFAULT); } $user ->setData( $_POST ); $user ->save(); header( "Location: /ecommerce/admin/users" ); exit ; }); |
Veja como a Rota Formulário Cadastrar Usuário funciona linha a linha:
- L2 – $app->post(‘/admin/users/create_post’, function() {
- $app->post: Define uma rota que responde a requisições HTTP POST.
- ‘/admin/users/create_post’: É a rota que aciona a função.
- function(): Aqui, estamos definindo uma função anônima. Essa função será executada quando a rota for acessada.
- L3 – User::verifyLogin(); Verifica se o usuário está logado antes de permitir a criação de um novo usuário.
- L4 – $user = new User(); Cria um novo objeto da classe User, que representa um usuário no sistema.
- L5 – $_POST[“inadmin”] = (isset($_POST[“inadmin”]))?1:0; Verifica se o campo inadmin foi enviado na requisição POST. Se sim, atribui o valor 1, caso contrário, atribui 0. Isso provavelmente é para garantir que o campo inadmin sempre tenha um valor válido.
- L8 a 11 – if (isset($_POST[‘despassword’])) { … } Verifica se a senha foi enviada na requisição. Se sim, criptografa a senha usando a função password_hash. Isso é essencial para segurança, pois evita que a senha seja armazenada em texto simples.
- L13 – $user->setData($_POST); Atribui os dados recebidos na requisição POST ao objeto $user. Isso preenche os campos do usuário com os valores fornecidos pelo usuário.
- L14 – $user->save(); Salva o usuário no banco de dados. Esse método faz a inserção ou atualização dos dados do usuário na tabela correspondente.
- L15 – header(“Location: /ecommerce/admin/users”); Redireciona o usuário para a página /ecommerce/admin/users (Lista de Usuários) após a criação do usuário.
- L16 – exit: A função exit é usada para interromper a execução do script após o redirecionamento.
Salvando dados no banco de dados (Método save())
A linha 14 $user->save(); chama o método save() que salva os dados carregados no objeto $user capturados no formulário $_POST. Vamos criar este método dentro do arquivo user.php. Insira o código conforme o exemplo a seguir:
PHP: user.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php // … ìnicio código PHP public function save() { $sql = new Sql(); $results = $sql ->select("CALL sp_users_save(:desperson, :deslogin, :despassword, :desemail, :nrphone, :inadmin)", array ( ":desperson" => $this ->getdesperson(), ":deslogin" => $this ->getdeslogin(), ":despassword" => $this ->getdespassword(), ":desemail" => $this ->getdesemail(), ":nrphone" => $this ->getnrphone(), ":inadmin" => $this ->getinadmin() )); $this ->setData( $results [0]); } // … resto código PHP ?> |
A função save() tem como objetivo persistir os dados de um usuário no banco de dados, utilizando o procedimento armazenado (stored procedure) chamado sp_users_save.
- L4 – Public function save() Declaração da Função: Define uma função pública chamada save() dentro da classe User. Essa função será responsável por salvar os dados do usuário.
- L6 – $sql = new Sql(); Instanciando a Classe Sql: Cria um novo objeto da classe Sql. Essa classe, que não foi apresentada no código, encapsula a interação com o banco de dados, oferecendo métodos para executar consultas SQL.
- L7 a 18 – $results = $sql->select(“CALL sp_users_save(:desperson, :deslogin, :despassword, :desemail, :nrphone, :inadmin)”, array( ……
Executando a Consulta SQL:
Chamada ao Procedimento: Executa uma consulta SQL utilizando o método select do objeto $sql. A consulta chama um procedimento armazenado no banco de dados sp_users_save.
- Parâmetros: Passa os valores dos atributos do objeto atual como parâmetros para o procedimento armazenado. Os parâmetros são passados como um array associativo, onde as chaves são os nomes dos parâmetros e os valores são obtidos através dos métodos getdesperson(), getdeslogin(), etc. Esses métodos retornam os valores dos respectivos atributos do objeto.
- L17 – $this->setData($results[0]); Atualizando o Objeto: A variável $results contém um array com os resultados retornados pelo procedimento armazenado. O primeiro elemento desse array ($results[0]) é passado para o método setData(). O método setData() atualiza os atributos do objeto com os dados retornados do banco de dados, como um ID gerado automaticamente.
Procedures sp_users_save
No contexto do código, o procedimento sp_users_save é responsável por: Inserir novos usuários: Quando um novo usuário é cadastrado, este procedimento é chamado para adicionar as informações do usuário na tabela do banco de dados (tb_users).
A seguir temos o código sql para criar procedure save() dentro do banco de dados db_ecommerce
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | DELIMITER $$ CREATE PROCEDURE `sp_users_save`() BEGIN DECLARE vidperson INT; INSERT INTO tb_persons (desperson, desemail, nrphone) VALUES(pdesperson, pdesemail, pnrphone); SET vidperson = LAST_INSERT_ID(); INSERT INTO tb_users (idperson, deslogin, despassword, inadmin) VALUES(vidperson, pdeslogin, pdespassword, pinadmin); SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) WHERE a.iduser = LAST_INSERT_ID(); END $$ DELIMITER ; |
Analisando o Código Linha a Linha:
- L3 – BEGIN Início do Procedimento: Indica o início da definição do procedimento armazenado. Tudo o que estiver dentro do BEGIN e END faz parte do procedimento.
- L5 – DECLARE vidperson INT; Declara a variável inteira chamada vidperson. Essa variável será utilizada para armazenar o ID da pessoa recém-inserida na tabela tb_persons.
- L7 – INSERT INTO tb_persons (desperson, desemail, nrphone) VALUES(pdesperson, pdesemail, pnrphone); Insere um novo registro na tabela tb_persons. Os valores para os campos desperson, desemail e nrphone são obtidos dos parâmetros de entrada do procedimento.
- L10 – SET vidperson = LAST_INSERT_ID(); Recuperando o ID Inserido: Atribui à variável vidperson o valor do último ID inserido na tabela. Essa função é útil para obter o ID da pessoa recém-inserida, que será usado para relacionar o usuário à pessoa.
- L12 – INSERT INTO tb_users (idperson, deslogin, despassword, inadmin) VALUES(vidperson, pdeslogin, pdespassword, pinadmin); Insere um novo registro na tabela tb_users. O campo idperson recebe o valor da variável vidperson, estabelecendo a relação entre a pessoa e o usuário. Os outros campos (deslogin, despassword, inadmin) recebem seus respectivos valores dos parâmetros de entrada.
- L15 – SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) WHERE a.iduser = LAST_INSERT_ID(); Realiza a união entre as tabelas tb_users e tb_persons utilizando o campo idperson como chave. Isso permite obter as informações das duas tabelas do usuário e da pessoa correspondente em uma única consulta. Filtro: Filtra os resultados para retornar apenas o registro que foi recém-inserido, utilizando a função LAST_INSERT_ID() para obter o ID do último usuário. Retorna todos os campos (*) das tabelas tb_users e tb_persons que correspondem ao usuário recém-inserido.
- L18 – END Indica o fim da definição do procedimento armazenado.
Executadas tods estas atualizações ao clicar no botão “Cadastrar Usuário” você será direcionado para a página “Novo Usuário”. Entre com os dados nos campos solicitados. Depois clique em “Cadastar” e o novo uusário aparececerá na página Lista de Usuários.

Para saber mais: