Neste artigo vamos demonstrar uma forma de eliminar 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á eliminar 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');
No processo que vamos aqui demonstrar, para eliminar registos de uma tabela da base de dados, vamos utilizar a seguinte estratégia:
- Criar o ficheiro listadepartamentos.php que será responsável por apresentar a lista de todos os registos existentes na tabela departamento. A lista vai conter um link para eliminar cada registo.
- Criar o ficheiro eliminardepartamento.php que será responsável por eliminar o registo selecionado através da lista de departamentos apresentada pelo ficheiro listadepartamentos.php.
Criar a lista para visualizar os registos com um link para eliminar
Para apresentar a lista de registos de uma 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 o código criar um link para a página que vai eliminar o registo. O URL utilizado no link vai identificar a operação e o registo a eliminar.
<?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 */ exit(); } if($ligacao->affected_rows == 0){ echo " Não existem registos na tabela departamento "; } 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="eliminardepartamento.php?id='.$row['id'] . '&operacao=eliminar"> - Eliminar</a><br>'; } } $resultado->free(); /* libertar o resultado */ $ligacao->close(); /* fechar a ligação */
No ficheiro eliminardepartamento.php vamos criar o código para executar os seguintes passos:
- Verificar se foi enviado o pedido para eliminar e validar os dados provenientes do URL.
- Estabelece a ligação à base de dados e verificar e ocorreu algum erro.
- Criar o texto sql da consulta, executar e verificar o resultado.
<?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!="eliminar"){ 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(); } /* texto sql da consulta*/ $consulta = "DELETE FROM departamento WHERE id = '$id' "; /* 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 */ echo ' <br> <a href="listardepartamentos.php"> Voltar à lista de departamentos </a>' ; exit(); } /* verificar o resultado da consulta */ if($ligacao->affected_rows > 0){ echo " O registo com o id = $id foi eliminado com sucesso" ; $ligacao->close(); /* fechar a ligação */ echo '<br> <a href="listardepartamentos.php"> Voltar à lista de departamentos </a>' ; } else{ header("Location: listardepartamentos.php"); echo " O registo com o id = $id não encontrado!" ; $ligacao->close(); /* fechar a ligação */ echo '<br> <a href="listardepartamentos.php"> Voltar à lista de departamentos </a>' ; }
Artigos relacionados:
- PHP – Ligação a uma base de dados MySQL utilizando a extensão mysqli no modo orientado a objetos
- PHP – Visualizar registos de uma tabela numa base de dados MySQL