Neste artigo vamos demonstrar uma forma de realizar a inserção de registos, a partir de um formulário simples em HTML, numa tabela existente num servidor MySQL e recorrendo à linguagem de script PHP. O servidor utilizado no exemplo é o localhost, acessível com o utilizador root e password 1234. A base de dados chama-se empresa e contém a tabela departamento. O objectivo será inserir novos registos na tabela departamento.
Criação da base de dados
Começamos por criar a base de dados com o seguinte script:
CREATE DATABASE empresa DEFAULT CHARACTER SET utf8; USE empresa; CREATE TABLE departamento ( id VARCHAR(10) NOT NULL, nome VARCHAR(50) NOT NULL, PRIMARY KEY (id)); INSERT INTO departamento (id, nome) VALUES ('DI', 'Departamento de Informática'); INSERT INTO departamento (id, nome) VALUES ('DL', 'Departamento de Limpeza'); INSERT INTO departamento (id, nome) VALUES ('DC', 'Departamento de Contabilidade'); INSERT INTO departamento (id, nome) VALUES ('DRH', 'Departamento de Recursos Humanos'); INSERT INTO departamento (id, nome) VALUES ('DS', 'Departamento de Segurança');
Como podemos observar no código sql, a inserção de registos é realizada através do comando INSERT INTO. No nosso exemplo vai ser criado um script php, que através da função query() da extensão mysqli, executará o comando de inserção de um registo na tabela departamento.
Para este exemplo vamos utilizar dois ficheiros php:
- formdepartamento.php – vai conter o código html do formulário para que o utilizador possa introduzir os dados do departamento, o id e o nome. Note-se que apesar de só conter código html podemos manter a extensão php.
- inseredepartamento.php – vai conter o código php responsável por receber os dados do formulário, validar os dados , estabelecer a ligação com o servidor MySQL e executar a consulta de inserção de dados na tabela.
Formulário para introdução de dados.
No ficheiro formdepartamento.php criamos o seguinte código, que é responsável por fornecer um formulário para que o utilizador possa introduzir os dados relativos a um departamento.
<html> <head> <title>Inserir Departamento</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <form method="POST" action="inseredepartamento.php"> Id: <br> <input type="text" name="T_id"><br> Nome:<br> <input type="text" name="T_nome"><br> <input type="submit" value="Inserir"> </form> </body> </html>
Principais elementos html utilizados no código:
- <form method=”POST” action=”inseredepartamento.php”> – define um formulário para recolha de dados. O atributo method especifica o modo como os dados do formulário são passados para a página especificada pelo atributo action, que irá receber e processar os dados do formulário. Com method=”POST” os dados enviados não são visíveis no URL, são anexados ao corpo do pedido HTTP.
- <input type=”text” name=”T_id”> – elemento de uma linha para introdução de texto, neste caso para o id. O atributo name serve para referenciar os dados após a submissão do formulário. Se o atributo name não existir os dados não são enviados quando o formulário é submetido. Ao atributo name pode ser dado qualquer valor, no entanto convém ser coerente e seguir uma lógica que facilite a identificação do elemento. No exemplo, para o atributo name demos o valor T_id, uma vez que estamos perante um elemento do tipo texto (T) e referente ao campo id (_id).
- <input type=”submit” value=”Inserir”> – elemento que define um botão para submeter o formulário. O parâmetro value corresponde ao texto que vai aparecer no botão.
Receber dados do formulário e inserir na tabela
Sempre que o formulário é submetido é executado o código do ficheiro definido pelo atributo action do formulário, no nosso caso, o ficheiro inseredepartamento.php. É neste ficheiro que será escrito o código necessário para enviar os dados do nosso formulário, para a tabela da base de dados. Vamos criar as instruções para:
- Verificar se o formulário foi submetido e validar os dados recebidos.
- Estabelecer a ligação com a base de dados.
- Criar e executar a consulta de inserção na tabela.
Verificar se o formulário foi submetido e validar os dados recebidos
O PHP fornece várias variáveis predefinas, denominadas de “superglobals” e que podem ser acedidas a qualquer altura ou em qualquer local no nosso código. Para verificar informações relativas à execução do servidor utilizamos a variável $_SERVER. Através desta variável podemos verificar se foi utilizado o método POST no envio de um formulário, acedendo a $_SERVER[‘REQUEST_METHOD’]. No nosso código vamos fazer esse teste, evitando assim erros caso se tente executar o ficheiro diretamente através do seu URL. Recorrendo à variável $_POST podemos aceder aos valores de variáveis enviadas através do método POST. No nosso caso, as variáveis a aceder correspondem aos elementos do formulário para o id e para o nome do departamento, variáveis essas que têm como nome T_id e T_nome. Por questões de segurança, filtragem e validação não devemos aceder diretamente à variável $_POST, assim utilizamos a função filter_input().
/* Verificar se o formulário foi submetido */ if ($_SERVER["REQUEST_METHOD"] == "POST") { $id = filter_input(INPUT_POST, 'T_id'); $nome = filter_input(INPUT_POST, 'T_nome'); /* validar os dados recebidos do formulario */ if (empty($id) || empty($nome)){ echo "Todos os campos do formulário devem conter valores "; exit(); } } else{ echo " Erro, formulário não submetido "; exit(); }
Como podemos observar, no código utilizado foram ainda criadas as variáveis $id e $nome para guardar os valores que serão enviados para a tabela departamento da nossa base de dados.
Estabelecer a ligação com a base de dados.
Para criar a ligação à nossa base de dados vamos recorrer à extensão mysqli no modo orientado objetos, na qual indicamos os dados de acesso: servidor, utilizador, password e base de dados. Mais detalhes em (PHP – Ligação a uma base de dados MySQL utilizando a extensão mysqli no modo orientado a objetos).
/* estabelece a ligação à base de dados */ $ligacao = new mysqli("localhost", "root", "1234", "empresa"); /* verifica se ocorreu algum erro na ligação */ if ($ligacao->connect_errno) { echo "Falha na ligação: " . $ligacao->connect_error; exit(); }
Criar e executar a consulta de inserção na tabela.
A inserção do registo na base de dados é realizada através da execução de uma consulta SQL. Para isso criamos uma variável $consulta que contém o texto da consulta já com as variáveis $id e $nome que trazem os respetivos valores a enviar para a tabela.
(Mais detalhes sobre consultas em PHP – Visualizar registos de uma tabela numa base de dados MySQL).
/* texto sql da consulta*/ $consulta = "INSERT INTO departamento (id, nome) VALUES ('$id', '$nome' )"; /* executar a consulta e testar se ocorreu erro */ if (!$ligacao->query($consulta)) { echo " Falha ao executar a consulta: \"$consulta\" <br>" . $ligacao->error; $ligacao->close(); /* fechar a ligação */ } else{ /* percorrer os registos (linhas) da tabela e mostrar na página */ echo " Novo registo inserido com sucesso" ; } $ligacao->close(); /* fechar a ligação */
Código completo do ficheiro inseredepartamento.php
<?php /* Verificar se o formulário foi submetido */ if ($_SERVER["REQUEST_METHOD"] == "POST") { $id = filter_input(INPUT_POST, 'T_id'); $nome = filter_input(INPUT_POST, 'T_nome'); /* validar os dados recebidos do formulario */ if (empty($id) || empty($nome)){ echo "Todos os campos do formulário devem conter valores "; exit(); } } else{ echo " Erro, formulário não submetido "; exit(); } /* estabelece a ligação à base de dados */ $ligacao = new mysqli("localhost", "root", "1234", "empresa"); /* verifica se ocorreu algum erro na ligação */ if ($ligacao->connect_errno) { echo "Falha na ligação: " . $ligacao->connect_error; exit(); } /* texto sql da consulta*/ $consulta = "INSERT INTO departamento (id, nome) VALUES ('$id', '$nome' )"; /* executar a consulta e testar se ocorreu erro */ if (!$ligacao->query($consulta)) { echo " Falha ao executar a consulta: \"$consulta\" <br>" . $ligacao->error; $ligacao->close(); /* fechar a ligação */ } else{ /* percorrer os registos (linhas) da tabela e mostrar na página */ echo " Novo registo inserido com sucesso" ; } $ligacao->close(); /* fechar a ligação */
Referências
- https://www.w3schools.com/html/html_forms.asp, acedido em dezembro de 2017.
- https://www.w3schools.com/tags/att_input_name.asp , acedido em dezembro de 2017.
- https://www.w3schools.com/tags/att_form_method.asp, acedido em dezembro de 2017.
- https://www.w3schools.com/tags/att_form_action.asp, acedido em dezembro de 2017.
- http://php.net/manual/en/reserved.variables.server.php, acedido em dezembro de 2017.
- http://php.net/manual/en/function.filter-input.php, acedido em dezembro de 2017.
- https://550nmr.com/2017/12/php-ligacao-a-uma-base-de-dados-mysql-utilizando-a-extensao-mysqli-no-modo-orientado-a-objetos, acedido em dezembro de 2017.
- https://550nmr.com/2017/12/php-visualizar-registos-de-uma-tabela-numa-base-de-dados-mysql, acedido em dezembro de 2017.