J. Carpeta « srv »

Versión para imprimir.

A. srv / Bd.php

1<?php
2
3class Bd
4{
5 private static ?PDO $pdo = null;
6
7 static function pdo(): PDO
8 {
9 if (self::$pdo === null) {
10
11 self::$pdo = new PDO(
12 // cadena de conexión
13 "sqlite:srvbd.db",
14 // usuario
15 null,
16 // contraseña
17 null,
18 // Opciones: pdos no persistentes y lanza excepciones.
19 [PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
20 );
21
22 self::$pdo->exec(
23 "CREATE TABLE IF NOT EXISTS PASATIEMPO (
24 PAS_ID INTEGER,
25 PAS_NOMBRE TEXT NOT NULL,
26 CONSTRAINT PAS_PK
27 PRIMARY KEY(PAS_ID),
28 CONSTRAINT PAS_NOM_UNQ
29 UNIQUE(PAS_NOMBRE),
30 CONSTRAINT PAS_NOM_NV
31 CHECK(LENGTH(PAS_NOMBRE) > 0)
32 )"
33 );
34 }
35
36 return self::$pdo;
37 }
38}
39

B. srv / pasatiempo-agrega.php

1<?php
2
3require_once __DIR__ . "/../lib/php/ejecutaServicio.php";
4require_once __DIR__ . "/../lib/php/recuperaTexto.php";
5require_once __DIR__ . "/../lib/php/validaNombre.php";
6require_once __DIR__ . "/../lib/php/insert.php";
7require_once __DIR__ . "/../lib/php/devuelveCreated.php";
8require_once __DIR__ . "/Bd.php";
9require_once __DIR__ . "/TABLA_PASATIEMPO.php";
10
11ejecutaServicio(function () {
12
13 $nombre = recuperaTexto("nombre");
14
15 $nombre = validaNombre($nombre);
16
17 $pdo = Bd::pdo();
18 insert(pdo: $pdo, into: PASATIEMPO, values: [PAS_NOMBRE => $nombre]);
19 $id = $pdo->lastInsertId();
20
21 $encodeId = urlencode($id);
22 devuelveCreated("/srv/pasatiempo.php?id=$encodeId", [
23 "id" => ["value" => $id],
24 "nombre" => ["value" => $nombre],
25 ]);
26});
27

C. srv / pasatiempo-elimina.php

1<?php
2
3require_once __DIR__ . "/../lib/php/ejecutaServicio.php";
4require_once __DIR__ . "/../lib/php/recuperaIdEntero.php";
5require_once __DIR__ . "/../lib/php/delete.php";
6require_once __DIR__ . "/../lib/php/devuelveNoContent.php";
7require_once __DIR__ . "/Bd.php";
8require_once __DIR__ . "/TABLA_PASATIEMPO.php";
9
10ejecutaServicio(function () {
11 $id = recuperaIdEntero("id");
12 delete(pdo: Bd::pdo(), from: PASATIEMPO, where: [PAS_ID => $id]);
13 devuelveNoContent();
14});
15

D. srv / pasatiempo-modifica.php

1<?php
2
3require_once __DIR__ . "/../lib/php/ejecutaServicio.php";
4require_once __DIR__ . "/../lib/php/recuperaIdEntero.php";
5require_once __DIR__ . "/../lib/php/recuperaTexto.php";
6require_once __DIR__ . "/../lib/php/validaNombre.php";
7require_once __DIR__ . "/../lib/php/update.php";
8require_once __DIR__ . "/../lib/php/devuelveJson.php";
9require_once __DIR__ . "/Bd.php";
10require_once __DIR__ . "/TABLA_PASATIEMPO.php";
11
12ejecutaServicio(function () {
13
14 $id = recuperaIdEntero("id");
15 $nombre = recuperaTexto("nombre");
16
17 $nombre = validaNombre($nombre);
18
19 update(
20 pdo: Bd::pdo(),
21 table: PASATIEMPO,
22 set: [PAS_NOMBRE => $nombre],
23 where: [PAS_ID => $id]
24 );
25
26 devuelveJson([
27 "id" => ["value" => $id],
28 "nombre" => ["value" => $nombre],
29 ]);
30});
31

E. srv / pasatiempo.php

1<?php
2
3require_once __DIR__ . "/../lib/php/NOT_FOUND.php";
4require_once __DIR__ . "/../lib/php/ejecutaServicio.php";
5require_once __DIR__ . "/../lib/php/recuperaIdEntero.php";
6require_once __DIR__ . "/../lib/php/selectFirst.php";
7require_once __DIR__ . "/../lib/php/ProblemDetails.php";
8require_once __DIR__ . "/../lib/php/devuelveJson.php";
9require_once __DIR__ . "/Bd.php";
10require_once __DIR__ . "/TABLA_PASATIEMPO.php";
11
12ejecutaServicio(function () {
13
14 $id = recuperaIdEntero("id");
15
16 $modelo =
17 selectFirst(pdo: Bd::pdo(), from: PASATIEMPO, where: [PAS_ID => $id]);
18
19 if ($modelo === false) {
20 $idHtml = htmlentities($id);
21 throw new ProblemDetails(
22 status: NOT_FOUND,
23 title: "Pasatiempo no encontrado.",
24 type: "/error/pasatiemponoencontrado.html",
25 detail: "No se encontró ningún pasatiempo con el id $idHtml.",
26 );
27 }
28
29 devuelveJson([
30 "id" => ["value" => $id],
31 "nombre" => ["value" => $modelo[PAS_NOMBRE]],
32 ]);
33});
34

F. srv / pasatiempos.php

1<?php
2
3require_once __DIR__ . "/../lib/php/ejecutaServicio.php";
4require_once __DIR__ . "/../lib/php/select.php";
5require_once __DIR__ . "/../lib/php/devuelveJson.php";
6require_once __DIR__ . "/Bd.php";
7require_once __DIR__ . "/TABLA_PASATIEMPO.php";
8
9ejecutaServicio(function () {
10
11 $lista = select(pdo: Bd::pdo(), from: PASATIEMPO, orderBy: PAS_NOMBRE);
12
13 $render = "";
14 foreach ($lista as $modelo) {
15 $encodeId = urlencode($modelo[PAS_ID]);
16 $id = htmlentities($encodeId);
17 $nombre = htmlentities($modelo[PAS_NOMBRE]);
18 $render .=
19 "<li>
20 <p>
21 <a href='modifica.html?id=$id'>$nombre</a>
22 </p>
23 </li>";
24 }
25
26 devuelveJson(["lista" => ["innerHTML" => $render]]);
27});
28

G. srv / TABLA_PASATIEMPO.php

1<?php
2
3const PASATIEMPO = "PASATIEMPO";
4const PAS_ID = "PAS_ID";
5const PAS_NOMBRE = "PAS_NOMBRE";
6