K. Carpeta « api »

Versión para imprimir.

A. api / amigo-agrega.php

1
<?php
2
3
require_once __DIR__ . "/../libservidorphp/manejaErrores.php";
4
require_once __DIR__ . "/../libservidorphp/recibeEntero.php";
5
require_once __DIR__ . "/../libservidorphp/recibeTextoObligatorio.php";
6
require_once __DIR__ . "/../libservidorphp/recibeEnteroOpcional.php";
7
require_once __DIR__ . "/../libservidorphp/devuelveCreated.php";
8
require_once __DIR__ . "/Bd.php";
9
require_once __DIR__ . "/pasatiempoOptions.php";
10
11
$nombre = recibeTextoObligatorio("nombre");
12
$pasId = recibeEnteroOpcional("pasId");
13
14
$pdo = Bd::conexion();
15
$stmt = $pdo->prepare(
16
 "INSERT INTO AMIGO (
17
   AMI_NOMBRE, AMI_PAS_ID
18
  ) values (
19
   TRIM(:AMI_NOMBRE), :AMI_PAS_ID
20
  )"
21
);
22
$stmt->execute([
23
 ":AMI_NOMBRE" => $nombre,
24
 ":AMI_PAS_ID" => $pasId
25
]);
26
$id = $pdo->lastInsertId();
27
28
$query = http_build_query(["id" => $id]);
29
devuelveCreated(
30
 "/api/amigo-vista-modifica.php?$query",
31
 [
32
  "id" => ["value" => $id],
33
  "nombre" => ["value" => $nombre],
34
  "pasId" => [
35
   "innerHTML" => pasatiempoOptons(),
36
   "value" => $pasId === null ? "" : $pasId
37
  ]
38
 ]
39
);
40

B. api / amigo-elimina.php

1
<?php
2
3
require_once __DIR__ . "/../libservidorphp/manejaErrores.php";
4
require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php";
5
require_once __DIR__ . "/../libservidorphp/devuelveNoContent.php";
6
require_once __DIR__ . "/Bd.php";
7
8
$id = recibeEnteroObligatorio("id");
9
10
$bd = Bd::conexion();
11
$stmt = $bd->prepare("DELETE FROM AMIGO WHERE AMI_ID = :AMI_ID");
12
$stmt->execute([":AMI_ID" => $id]);
13
14
devuelveNoContent();
15

C. api / amigo-modifica.php

1
<?php
2
3
require_once __DIR__ . "/../libservidorphp/manejaErrores.php";
4
require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php";
5
require_once __DIR__ . "/../libservidorphp/recibeTextoObligatorio.php";
6
require_once __DIR__ . "/../libservidorphp/recibeEnteroOpcional.php";
7
require_once __DIR__ . "/../libservidorphp/devuelveJson.php";
8
require_once __DIR__ . "/Bd.php";
9
require_once __DIR__ . "/pasatiempoOptions.php";
10
11
$id = recibeEnteroObligatorio("id");
12
$nombre = recibeTextoObligatorio("nombre");
13
$pasId = recibeEnteroOpcional("pasId");
14
15
$bd = Bd::conexion();
16
$stmt = $bd->prepare(
17
 "UPDATE AMIGO
18
   SET
19
    AMI_NOMBRE = TRIM(:AMI_NOMBRE),
20
    AMI_PAS_ID = :AMI_PAS_ID
21
   WHERE
22
    AMI_ID = :AMI_ID"
23
);
24
$stmt->execute([
25
 ":AMI_NOMBRE" => $nombre,
26
 ":AMI_PAS_ID" => $pasId,
27
 ":AMI_ID" => $id,
28
]);
29
30
devuelveJson([
31
 "id" => ["value" => $id],
32
 "nombre" => ["value" => $nombre],
33
 "pasId" => [
34
  "innerHTML" => pasatiempoOptons(),
35
  "value" => $pasId === null ? "" : $pasId
36
 ]
37
]);
38

D. api / amigo-vista-agrega.php

1
<?php
2
3
require_once __DIR__ . "/../libservidorphp/manejaErrores.php";
4
require_once __DIR__ . "/../libservidorphp/devuelveJson.php";
5
require_once __DIR__ . "/pasatiempoOptions.php";
6
7
devuelveJson(["pasId" => ["innerHTML" => pasatiempoOptons()]]);
8

E. api / amigo-vista-index.php

1
<?php
2
3
require_once __DIR__ . "/../libservidorphp/manejaErrores.php";
4
require_once __DIR__ . "/../libservidorphp/devuelveJson.php";
5
require_once __DIR__ . "/Bd.php";
6
7
$bd = Bd::conexion();
8
$stmt = $bd->query(
9
 "SELECT
10
    A.AMI_ID,
11
    A.AMI_NOMBRE,
12
    P.PAS_NOMBRE
13
   FROM AMIGO A
14
    LEFT JOIN PASATIEMPO P
15
    ON A.AMI_PAS_ID = P.PAS_ID
16
   ORDER BY
17
    A.AMI_NOMBRE"
18
);
19
$lista = $stmt->fetchAll(PDO::FETCH_ASSOC);
20
21
$render = "";
22
foreach ($lista as $modelo) {
23
 $amiId = $modelo["AMI_ID"];
24
 $query = htmlentities(http_build_query(["id" => $amiId]));
25
 $urlModifica = "modifica.html?$query";
26
 $amiNombre = htmlentities($modelo["AMI_NOMBRE"]);
27
 $pasNombre = $modelo["PAS_NOMBRE"] === null
28
  ? "<em>-- Sin pasatiempo --</em>"
29
  : htmlentities($modelo["PAS_NOMBRE"]);
30
 $render .=
31
  "<dt><a href='$urlModifica'>$amiNombre</a></dt>
32
    <dd><a href='$urlModifica'>$pasNombre</a></dd>";
33
}
34
35
devuelveJson(["lista" => ["innerHTML" => $render]]);
36

F. api / amigo-vista-modifica.php

1
<?php
2
3
require_once __DIR__ . "/../libservidorphp/manejaErrores.php";
4
require_once __DIR__ . "/../libservidorphp/recibeEnteroObligatorio.php";
5
require_once __DIR__ . "/../libservidorphp/validaEntidadObligatoria.php";
6
require_once __DIR__ . "/../libservidorphp/devuelveJson.php";
7
require_once __DIR__ . "/Bd.php";
8
require_once __DIR__ . "/pasatiempoOptions.php";
9
10
$amiId = recibeEnteroObligatorio("id");
11
12
$bd = Bd::conexion();
13
$stmt = $bd->prepare("SELECT * FROM AMIGO WHERE AMI_ID = :AMI_ID");
14
$stmt->execute([":AMI_ID" => $amiId]);
15
$modelo = $stmt->fetch(PDO::FETCH_ASSOC);
16
17
$modelo = validaEntidadObligatoria("Amigo",  $modelo);
18
$pasId = $modelo["AMI_PAS_ID"];
19
20
devuelveJson([
21
 "id" => ["value" => $amiId],
22
 "nombre" => ["value" => $modelo["AMI_NOMBRE"]],
23
 "pasId" => [
24
  "innerHTML" => pasatiempoOptons(),
25
  "value" => $pasId === null ? "" : $pasId
26
 ]
27
]);
28

G. api / Bd.php

1
<?php
2
3
class Bd
4
{
5
 private static ?PDO $pdo = null;
6
7
 static function conexion(): PDO
8
 {
9
  if (self::$pdo === null) {
10
11
   self::$pdo = new PDO(
12
    // cadena de conexión
13
    "sqlite:" . __DIR__ . "/srvauno.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 PK_PAS PRIMARY KEY(PAS_ID),
27
      CONSTRAINT UQ_PAS_NOM UNIQUE(PAS_NOMBRE),
28
      CONSTRAINT CHK_PAS_NOM CHECK(LENGTH(PAS_NOMBRE) > 0)
29
     )"
30
   );
31
   self::$pdo->exec(
32
    'CREATE TABLE IF NOT EXISTS AMIGO (
33
      AMI_ID INTEGER,
34
      AMI_NOMBRE TEXT NOT NULL,
35
      AMI_PAS_ID INTEGER,
36
      CONSTRAINT PK_AMI PRIMARY KEY(AMI_ID),
37
      CONSTRAINT UQ_AMI_NOM UNIQUE(AMI_NOMBRE),
38
      CONSTRAINT CHK_AMI_NOM CHECK(LENGTH(AMI_NOMBRE) > 0),
39
      CONSTRAINT FK_AMI_PAS
40
       FOREIGN KEY (AMI_PAS_ID) REFERENCES PASATIEMPO(PAS_ID)
41
     )'
42
   );
43
44
   $cantidadDePasatiempos =
45
    self::$pdo->query("SELECT COUNT(PAS_ID) FROM PASATIEMPO")->fetchColumn(0);
46
47
   if ($cantidadDePasatiempos === 0) {
48
    self::$pdo->exec(
49
     "INSERT INTO PASATIEMPO (PAS_NOMBRE) VALUES ('Futbol'), ('Videojuegos')"
50
    );
51
   }
52
  }
53
54
  return self::$pdo;
55
 }
56
}
57

H. api / pasatiempoOptions.php

1
<?php
2
3
require_once __DIR__ . "/Bd.php";
4
5
function pasatiempoOptons()
6
{
7
 $bd = Bd::conexion();
8
 $stmt = $bd->query("SELECT * FROM PASATIEMPO ORDER BY PAS_NOMBRE");
9
 $lista = $stmt->fetchAll(PDO::FETCH_ASSOC);
10
11
 $render = "<option value=''>-- Sin pasatiempo --</option>";
12
 foreach ($lista as $modelo) {
13
  $id = htmlentities($modelo["PAS_ID"]);
14
  $nombre = htmlentities($modelo["PAS_NOMBRE"]);
15
  $render .= "<option value='$id'>{$nombre}</option>";
16
 }
17
18
 return $render;
19
}
20