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

By | 3 Fevereiro, 2018

php mysql htmlNeste 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:

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