LAB-8

POO e CRUD

Criaremos uma classe chamada Veiculo que servirá para gerenciar informações de veículos, permitindo a criação, leitura, atualização e deleção de dados na base de dados.

A classe Veiculo será equipada com métodos para acessar o banco de dados de forma segura e eficiente. Estruturaremos nosso código para incluir getters e setters, garantindo o encapsulamento e a validação dos dados. Além de representar a lógica do veículo, a nossa classe também estabelecerá a conexão com o banco, facilitando operações CRUD (Create, Read, Update, Delete).

Criar o Banco de Dados

				
					CREATE DATABASE gerenciador_veiculos;
				
			

Selecione o Banco de Dados

				
					USE gerenciador_veiculos;
				
			

Criar Tabela: veiculo

				
					CREATE TABLE veiculos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    marca VARCHAR(50) NOT NULL,
    modelo VARCHAR(50) NOT NULL,
    ano INT NOT NULL
);
				
			

Estrutura (arquivos):
1.conexao.php
2.veiculo.php
3.index.php
4.editar.php
5.processar.php

Criar a conexão com o banco de dados:

1.conexao.php

				
					<?php
function getConnection() {
    $dsn = 'mysql:host=localhost;dbname=gerenciador_veiculos';
    $username = 'root';
    $password = '';

    try {
        $pdo = new PDO($dsn, $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (PDOException $e) {
        die("Erro de conexão: " . $e->getMessage());
    }
}
?>
				
			

Criar a Classe Veículo:

2. veiculo.php

				
					<?php

require 'conexao.php';

class Veiculo {
    private $id;
    private $marca;
    private $modelo;
    private $ano;
    private $pdo;

    public function __construct() {
        $this->pdo = getConnection();
    }

    // Getters e Setters com validação
    public function getId() { return $this->id; }
    public function getMarca() { return $this->marca; }
    public function getModelo() { return $this->modelo; }
    public function getAno() { return $this->ano; }

    public function setId($id) { $this->id = $id; }
    public function setMarca($marca) { $this->marca = $marca; }
    public function setModelo($modelo) { $this->modelo = $modelo; }
    public function setAno($ano) {
        if(is_numeric($ano) && $ano > 1885 && $ano <= date('Y')) {
            $this->ano = $ano;
        } else {
            throw new Exception("Ano inválido!");
        }
    }

    // Métodos CRUD
    public function create() {
        $sql = "INSERT INTO veiculos (marca, modelo, ano) VALUES (:marca, :modelo, :ano)";
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindParam(':marca', $this->marca);
        $stmt->bindParam(':modelo', $this->modelo);
        $stmt->bindParam(':ano', $this->ano);
        $stmt->execute();
        $this->id = $this->pdo->lastInsertId();
    }

    public function read($id) {
        $sql = "SELECT * FROM veiculos WHERE id = :id";
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindParam(':id', $id, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function update() {
        $sql = "UPDATE veiculos SET marca = :marca, modelo = :modelo, ano = :ano WHERE id = :id";
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindParam(':marca', $this->marca);
        $stmt->bindParam(':modelo', $this->modelo);
        $stmt->bindParam(':ano', $this->ano);
        $stmt->bindParam(':id', $this->id, PDO::PARAM_INT);
        $stmt->execute();
    }

    public function delete($id) {
        $sql = "DELETE FROM veiculos WHERE id = :id";
        $stmt = $this->pdo->prepare($sql);
        $stmt->bindParam(':id', $id, PDO::PARAM_INT);
        $stmt->execute();
    }

    public function listAll() {
        $sql = "SELECT * FROM veiculos";
        $stmt = $this->pdo->query($sql);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}
?>
				
			

Criar o Formulário:

3. index.php

				
					<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Gestão de Veículos</title>
</head>
<body>
    <h1>Gestão de Veículos</h1>
    <form action="processar.php" method="post">
        <label for="marca">Marca:</label>
        <input type="text" id="marca" name="marca" required><br>

        <label for="modelo">Modelo:</label>
        <input type="text" id="modelo" name="modelo" required><br>

        <label for="ano">Ano:</label>
        <input type="number" id="ano" name="ano" required><br>

        <input type="submit" name="acao" value="Criar">
    </form>

    <h2>Veículos Cadastrados</h2>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Marca</th>
            <th>Modelo</th>
            <th>Ano</th>
            <th>Ações</th>
        </tr>
        <?php
        require 'Veiculo.php';

        try {
            $veiculo = new Veiculo();
            $veiculos = $veiculo->listAll();
            foreach ($veiculos as $carro) {
                echo "<tr>
                        <td>{$carro['id']}</td>
                        <td>{$carro['marca']}</td>
                        <td>{$carro['modelo']}</td>
                        <td>{$carro['ano']}</td>
                        <td>
                            <form style='display:inline;' method='post' action='processar.php'>
                                <input type='hidden' name='id' value='{$carro['id']}'>
                                <input type='submit' name='acao' value='Excluir'>
                            </form>
                            <form style='display:inline;' method='get' action='editar.php'>
                                <input type='hidden' name='id' value='{$carro['id']}'>
                                <input type='submit' value='Editar'>
                            </form>
                        </td>
                      </tr>";
            }
        } catch (Exception $e) {
            echo "Erro: " . $e->getMessage();
        }
        ?>
    </table>
</body>
</html>
				
			

Atualização do Arquivo

4. editar.php

				
					<?php
require 'Veiculo.php';

if (isset($_GET['id'])) {
    try {
        $veiculo = new Veiculo();
        $dados = $veiculo->read($_GET['id']);
    } catch (Exception $e) {
        echo "Erro: " . $e->getMessage();
        exit;
    }
}

?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Editar Veículo</title>
</head>
<body>
    <h1>Editar Veículo</h1>
    <form action="processar.php" method="post">
        <input type="hidden" name="id" value="<?php echo $dados['id']; ?>">
        <label for="marca">Marca:</label>
        <input type="text" id="marca" name="marca" value="<?php echo $dados['marca']; ?>" required><br>

        <label for="modelo">Modelo:</label>
        <input type="text" id="modelo" name="modelo" value="<?php echo $dados['modelo']; ?>" required><br>

        <label for="ano">Ano:</label>
        <input type="number" id="ano" name="ano" value="<?php echo $dados['ano']; ?>" required><br>

        <input type="submit" name="acao" value="Atualizar">
    </form>
</body>
</html>
				
			

Arquivo de Processamento PHP

5. processar.php

				
					<?php

require 'Veiculo.php';

try {
    $veiculo = new Veiculo();

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        if ($_POST['acao'] === 'Criar') {
            $veiculo->setMarca($_POST['marca']);
            $veiculo->setModelo($_POST['modelo']);
            $veiculo->setAno($_POST['ano']);
            $veiculo->create();
            header('Location: index.php');
        } elseif ($_POST['acao'] === 'Atualizar' && isset($_POST['id'])) {
            $veiculo->setId($_POST['id']);
            $veiculo->setMarca($_POST['marca']);
            $veiculo->setModelo($_POST['modelo']);
            $veiculo->setAno($_POST['ano']);
            $veiculo->update();
            header('Location: index.php');
        } elseif ($_POST['acao'] === 'Excluir' && isset($_POST['id'])) {
            $veiculo->delete($_POST['id']);
            header('Location: index.php');
        }
    }
} catch (Exception $e) {
    echo "Erro: " . $e->getMessage();
}

?>