PHP – Eliminar registos de uma tabela numa base de dados MySQL / MariaDB

By | 22 Janeiro, 2018

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:

  1. 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.
  2. 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:

  1. Verificar se foi enviado o pedido para eliminar e validar os dados provenientes do URL.
  2. Estabelece a ligação à base de dados e verificar e ocorreu algum erro.
  3. 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: