Mantenimiento categorías

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>Mantenimiento categorías</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>

        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

    </head>
    <body>
        <?php
        require_once 'libreria.php';
        $nombre = filter_input(INPUT_GET, 'nombre', FILTER_SANITIZE_STRING);
        $id = filter_input(INPUT_GET, 'idcategoria', FILTER_VALIDATE_INT);
        if (!empty($nombre)) {
            insertarCategoria($nombre);
        }
        if (!empty($id)) {
            borrarCategoria($id);
        }

        $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
        $nombre = filter_input(INPUT_GET, 'categoria', FILTER_SANITIZE_STRING);
        if (!empty($id) && !empty($nombre)) {
            editarCategoria($id, $nombre);
        }
        ?>
        <h1>Mantenimiento categorías</h1>
        <form>Nombre: <input type="text" name="nombre"><input type="submit" class="btn btn-success"></form>
        <hr/>
        <?php
        listadoCategorias();
        ?>
    </body>
</html>
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
       <title>Editar categoría</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>

        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>

    </head>
    <body>
        <?php
        require_once 'libreria.php';
        $id = filter_input(INPUT_GET, 'idcategoria', FILTER_VALIDATE_INT);
        if(!empty($id)){
            $categoria=getCategoria($id);
            
        }
        ?>
        <form action="categorias.php">
            <input type="hidden" name="id" value="<?=$categoria['idcategorias']?>">
            Nombre: <input type="text" name="categoria" value="<?=$categoria['nombre']?>">
            <input type="submit" class="btn btn-success">
        </form>
        <a href="categorias.php">Volver a categorías</a>
    </body>
</html>
<?php

function conectar() {
    $server = "localhost";
    $user = "root";
    $password = "";
    $db = "tienda";
    try {
        $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $conn;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function insertarCategoria($name) {
    try {
        $conn = conectar();
        $st = $conn->prepare("insert into categorias (nombre) values (:name)");
        $st->execute(['name' => $name]);
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function borrarCategoria($id) {
    try {
        $conn = conectar();
        $st = $conn->prepare("delete from categorias where idcategorias=:id");
        $st->execute(['id' => $id]);
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function editarCategoria($id,$nombre){
    try{
        $conn=conectar();
        $st=$conn->prepare("update categorias set nombre=:nombre where idcategorias=:id");
        $st->execute(['nombre'=>$nombre,'id'=>$id]);
    } catch (Exception $ex) {

    }
}
function getCategorias() {
    try {
        $conn = conectar();
        $st = $conn->prepare("select * from categorias");
        $st->execute();
        $categorias = $st->fetchAll();
        return $categorias;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function getCategoria($id) {
    try {
        $conn = conectar();
        $st = $conn->prepare("select * from categorias where idcategorias=:id");
        $st->execute(['id' => $id]);
        $categoria = $st->fetch();
        return $categoria;
    } catch (Exception $ex) {
        echo $ex->getMessage();
    }
}

function listadoCategorias() {
    $categorias = getCategorias();
    ?>
    <table class="table">
        <tr><td>Id</td><td>Nombre</td><td>Acciones</td></tr>
        <?php
        foreach ($categorias as $categoria) {
            ?>
            <tr><td><?= $categoria['idcategorias'] ?></td>
                <td><?= $categoria['nombre'] ?></td>
                <td>
                    <a href="?idcategoria=<?= $categoria['idcategorias'] ?>">Borrar</a>
                    <a href="editar_categoria.php?idcategoria=<?= $categoria['idcategorias'] ?>">Editar</a>
                </td>
            </tr>
            <?php
        }
        ?>
    </table>
    <?php
}