Neste artigo vamos demonstrar uma forma de editar registos, de uma tabela numa base de dados MySQL/MariaDB a partir de uma página web e recorrendo ao 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á editar os registos da 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');
Neste exemplo, para editar os registos da tabela departamento da nossa base de dados vamos criar os seguintes ficheiros:
- listadepartamentos.php – responsável por apresentar a lista de todos os registos existentes na tabela departamento. A lista vai conter um link para editar cada registo.
- formeditardepartamento.php – responsável por apresentar o formulário para edição do registo. O formulário irá mostrar os campos editáveis preenchidos com os dados atuais.
- editardepartamento.php que será responsável por atualizar o registo na tabela departamento com os dados provenientes do formulário.
Lista para visualizar os registos com um link para editar
Para apresentar a lista de registos de tabela vamos utilizar o mesmo processo demonstrado no artigo “PHP – Visualizar registos de uma tabela numa base de dados MySQL“. A diferença é que vamos incluir no código um link para a página que vai editar o registo. O URL utilizado no link vai identificar a operação e o registo a editar. Ficheiro criado para este efeito é listadepartamentos.php e vai conter o seguinte código:
<?php /* 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(); } /* definir o charset utilizado na ligação */ $ligacao->set_charset("utf8"); /* texto sql da consulta*/ $consulta = 'SELECT * FROM departamento'; /* executar a consulta e testar se ocorreu erro */ if (!$resultado = $ligacao->query($consulta)) { echo ' Falha na consulta: '. $ligacao->error; $ligacao->close(); /* fechar a ligação */ } else{ /* percorrer os registos (linhas) da tabela e mostrar na página */ while ($row = $resultado->fetch_assoc()){ echo 'id: ' . $row['id'] . ' Nome: ' . $row['nome'] . '<a href="formeditardepartamento.php?id='.$row['id'] . '&operacao=editar"> - Editar </a><br>'; } $resultado->free(); /* libertar o resultado */ $ligacao->close(); /* fechar a ligação */ }
Formulário para edição do registo
A edição do registo é feita através de um formulário HTML. Este formulário irá conter os campos já preenchidos com os dados do registo. Neste exemplo vamos realizar uma consulta à base de dados (SELECT), utilizando o ID (neste caso, a chave primária da tabela) do registo a atualizar, para assim aceder aos dados completos do registo e poder colocar os valores no formulário. Ao submeter o formulário será realizado o pedido ao ficheiro editardepartamento.php responsável pela execução da consulta (UPDATE) para que os dados do registo sejam atualizados, tendo em conta o ID pelo qual está identificado. O ficheiro formeditardepartamento.php contém o código seguinte:
<html> <head> <title>Editar Departamento</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <?php /* Verificar se foi enviado o pedido para eliminar */ if ($_SERVER["REQUEST_METHOD"] == "GET") { $id = filter_input(INPUT_GET, 'id'); $operacao = filter_input(INPUT_GET, 'operacao'); /* validar os dados recebidos através do pedido */ if (empty($id) || $operacao!="editar"){ echo " Erro, pedido inválido "; exit(); } } else{ echo " Erro, pedido inválido "; 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(); } /* definir o charset utilizado na ligação */ $ligacao->set_charset("utf8"); /* texto sql da consulta*/ $consulta = "SELECT * FROM departamento WHERE id = '$id' "; /* executar a consulta e testar se ocorreu erro */ if (!$resultado = $ligacao->query($consulta)) { echo ' Falha na consulta: '. $ligacao->error; $ligacao->close(); /* fechar a ligação */ } else{ /* obter os dados do registo */ $row = $resultado->fetch_assoc(); ?> <form method="POST" action="editardepartamento.php"> Id: <br> <input type="text" name="T_id" value="<?=$row['id']?>" readonly> <br> Novo id: <br> <input type="text" name="T_novoid" value="<?=$row['id']?>"><br> Nome:<br> <input type="text" name="T_nome" value="<?=$row['nome']?>"><br> <input type="submit" value="Editar" > </form> <?php $resultado->free(); /* libertar o resultado */ $ligacao->close(); /* fechar a ligação */ } ?> </body> </html>
Atualizar registo na base de dados
A atualização do registo na base de dados é feita com a execução do ficheiro editardepartamento.php. Neste ficheiro é criado o código para receber os dados do formulário e executar a consulta de UPDATE à base de dados. No código é realizada a verificação do pedido e dos valores enviados através do formulário, é estabelecida a ligação à base de dados e executada a consulta de UPDATE.
<?php /* Verificar se o formulário foi submetido */ if ($_SERVER["REQUEST_METHOD"] == "POST") { $id = filter_input(INPUT_POST, 'T_id'); $novoid = filter_input(INPUT_POST, 'T_novoid'); $nome = filter_input(INPUT_POST, 'T_nome'); /* validar os dados recebidos do formulario */ if (empty($id) || empty($nome) || empty($novoid)){ echo "Todos os campos do formulário devem conter valores "; exit(); } } else{ echo " ERRO - Não foi possível executar a operação editar. "; 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 = "UPDATE departamento SET id='$novoid', nome='$nome' WHERE id='$id' "; /* executar a consulta e testar se ocorreu erro */ if (!$ligacao->query($consulta)) { echo " ERRO - 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 " SUCESSO - O registo foi editado com sucesso" ; } $ligacao->close(); /* fechar a ligação */
Artigos relacionados:
- PHP – Eliminar registos de uma tabela numa base de dados MySQL / MariaDB
- PHP – Inserir registos numa tabela através de um formulário HTML
- PHP – Visualizar registos de uma tabela numa base de dados MySQL
- PHP – Ligação a uma base de dados MySQL utilizando a extensão mysqli no modo orientado a objetos