1. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
1. Conceptos básicos: BD, Tablas, Registros, Sistema Gestor de BD, SQL
Unidad X y XI
Herramientas de Base de Datos e Integración de Herramientas de Seguridad
Objetivo de la Unidad:
Estudiar los elemento que componen la Arquitectura Web aunado a las herramientas libre de bases de datos (Postgres) para
desarrollar la gestión de la información que genere el eje de trabajo de productivo en las comunidades automatizando los
procesos de cada módulo/componente a implantar
Laboratorio
Para continuar con el diseño de cuenta bancaria de la guía práctica de herencia donde se muestra un
diagrama de clase el siguiente paso es la creación del modelo relacional el cual es el siguiente;
Introducción
El objetivo de la presente guía, es la creación de bases de datos, en un sistema gestor de bases de datos
(sgbd) como lo es postgres; para que a través de Crear, Leer, Actualizar y Borrar (crud)
Objetivo.
Crear bases de datos para la construcción de un crud con aplicaciones Web orientado a objeto a través de la
interfaz PDO utilizando el patrón mvc (modelo-vista-controlador).
Requerimientos.
Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre ( Canaima/Ubuntu), Apache,
Postgresql, PHP, Editor de Texto.
Componentes.
2. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Analizando e interpretando el Modelo relacional, no vamos al sistema gestor de base de datos
postgres para la creación del modelo físico de la base de datos banco “bdctabanco”
CREATE DATABASE bdctabanco
Procedamos a crear las tablas de la base de datos bdctabanco
CREATE TABLE titular (
cod_titular Serial,
cedula character varying(12) ,
nombre character varying(30) ,
sexo "char",
direccion character varying(100) ,
CONSTRAINT pk_codtitular PRIMARY KEY (cod_titular),
CONSTRAINT ci_unica UNIQUE (cedula)
)
CREATE TABLE ctabco (
Idcta Serial,
nrocta character varying(20) ,
tipocta character varying(30) ,
fecha_apertura date,
saldo_disponible double precision,
cod_titular integer,
CONSTRAINT ctabco_pkey PRIMARY KEY (idcta),
CONSTRAINT uniconrocta UNIQUE (nrocta),
CONSTRAINT fkey_titular FOREIGN KEY (cod_titular)
REFERENCES public.titular (cod_titular) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE )
3. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
En el servidor se crea la carpeta GestionBD, MVC
En la carpeta Modelo se crea el archivo conexión.php que contiene la implementación de la clase
BD que hereda de PDO
<?php
class BD extends PDO {
private $host='localhost';
private $bd= 'bdctabanco';
private $password='lissette';
private $user='postgres';
private $port=5432;
private $conexion ; // Se guarda la conexion
public function __construct(){
try {
$conexion= parent::__construct("pgsql:host=$this->host ; port=$this->port; dbname=$this-
>bd; user=$this->user; password=$this->password");//ejecutamos la conexión
echo "conexion exitosa";
} catch (PDOException $e) {
echo "error en:".$e;
}// fin del catch }// fin del constructor
}// fin del constructor
}// fin de la clase
4. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
?>
En la carpeta controlador se crea el archivo conectarse el cual crea un objeto de conexión
<?php
require_once '../Modelo/claseconexion.php';
$conexion = new BD();
?>
Ahora ejecutamos el script conectarse.php
Ahora modificamos los valores de los atributos de la clase
<?php
class BD extends PDO {
public $host='localhost';
public $bd= 'bdctabancoooo';
public $password='lissette';
public $user='postgres';
public $port=5432;
private $conexion;
public function __construct(){
try {
$this->conexion= parent::__construct("pgsql:host=$this->host; port=$this->port; dbname=$this-
>bd; user=$this->user; password=$this->password");//ejecutamos la conexion
echo "conexion exitosa";
5. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
} catch (PDOException $e) {
echo "error en:".$e;
}// fin del catch }
}// fin de la clase
?>
Después de probar la conexión con la bd, Ahora debemos optimizar el código y adaptarlo al mapa de
navegación así como a los casos de usos.
6. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
//Codigo fuente del Menu de Opciones
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta nombre="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Sitio Web BancOro</title>
<link rel="stylesheet" href="./recursos/css/miestilos.css">
</head>
<body>
<header>
<img src="./recursos/img/ahorro.jpg" alt="Logo" width="30%">
</header>
<nav id="menu">
11. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
class BD extends PDO {
public $host='localhost';
public $bd= 'bdctabanco';
public $password='lissette';
public $user='postgres';
public $port=5432;
public $repconexion ;
public $errorconexion ;
public $conex ;
public function __construct(){
try {
$this-> conex= parent::__construct("pgsql:host=$this->host; port=$this->port;
dbname=$this->bd; user=$this->user; password=$this->password");//ejecutamos la conexion
$this->repconexion = true;
$this->errorconexion="";
} catch (PDOException $e) {
$this->errorconexion = "error en:".$e;
}// fin del catch
}// fin del método constructor
public function getrRepConexion(){
return $this->repconexion; }
public function getErrorConexion() { //metodo que nos devuelve el mensaje de error si no llega a
darse la conexion
return $this->errorconexion;
}
}// fin de la clase
?>
12. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Clase titular
<?php
require_once '../Modelo/claseconexion.php';
class Titular extends BD {
private $cedula;
private $nombre;
private $sexo;
private $direccion;
private $conex;
public function __construct(){
$this->conex = parent::__construct();
}// fin del constructor
// CRUD
public function Registrar(){
$strSql = 'INSERT INTO titular (cedula,nombre,sexo,direccion) VALUES
(:cedula, :nombre,:sexo,:direccion)';
$respuestaArreglo = '';
try {
$strExec = BD::prepare($strSql);
$strExec->bindValue(':cedula', $this->cedula);
$strExec->bindValue(':nombre', $this->nombre);
$strExec->bindValue(':sexo', $this->sexo);
$strExec->bindValue(':direccion', $this->direccion);
$strExec->execute();
$respuestaArreglo = $strExec->fetchAll(); //retornamos todos los datos de la ejecucion
13. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
$respuestaArreglo += ['estatus' => true];
return $respuestaArreglo;
} catch (PDOException $e) { //si hay un error en la instruccion sql entramos en el catch
$errorReturn = ['estatus' => false];
$errorReturn += ['info' => "error sql:{$e}"];
return $errorReturn; //retornamos el contenido de esa variable
}
}// fin del metodo Registrar
public function consultar(){
$strSql = 'SELECT *FROM titular';
$respuestaArreglo = '';
try {
$strExec = BD::prepare($strSql);
$strExec->execute();
$strExec ->setFetchMode(PDO::FETCH_ASSOC);
$respuestaArreglo = $strExec->fetchAll(PDO::FETCH_ASSOC); //retornamos todos los datos de
la ejecucion
$respuestaArreglo += ['estatus' => true];
return $respuestaArreglo;
} catch (PDOException $e) { //si hay un error en la instruccion sql entramos en el catch
$errorReturn = ['estatus' => false];
$errorReturn += ['info' => "error sql:{$e}"];
return $errorReturn; //retornamos el contenido de esa variable
}// fin del catch
}// fin del metodo consultar
public function Buscar($ci){
$strSql = "SELECT *FROM titular WHERE cedula ='$ci'";
14. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
$respuestaArreglo = '';
try {
$strExec = BD::prepare($strSql);
$strExec->execute();
$strExec ->setFetchMode(PDO::FETCH_ASSOC);
$respuestaArreglo = $strExec->fetchAll(PDO::FETCH_ASSOC); //retornamos todos los datos de
la ejecucion
$respuestaArreglo += ['estatus' => "true"];
return $respuestaArreglo;
} catch (PDOException $e) { //si hay un error en la instruccion sql entramos en el catch
$errorReturn = ['estatus' => "false"];
$errorReturn += ['info' => "error sql:{$e}"];
return $errorReturn; ; //retornamos el contenido de esa variable
}// fin del catch
}// fin del metodo consultar
// METODOS SETTER
public function setCedula($ci){
$this->cedula=$ci; }
public function setNombre($nomb){
$this->nombre=$nomb; }
public function setSexo($sexo){
$this->sexo=$sexo;
}
public function setDireccion($direc){
$this->direccion=$direc;
}
15. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
// METODOS GETTER
public function getCedula(){
return $this->cedula;
}
public function getNombre(){
return $this->nombre;
}
public function getSexo(){
return $this->sexo;
}
public function getDireccion(){
return $this->direccion;
}
public function __toString(){
return $this->nombre . ' ' .$this->cedula;
}
}// fin de la clase
?>
ControllerTitular.php
<?php
require_once '../Modelo/clasetitular.php';
$objTitular = new Titular();
$ci= $_POST['txtci'];
$consulta = $objTitular->Buscar($ci);
if ($consulta['estatus'] && count($consulta)==2) {
require_once("../Vista/Vista_Actualizar.php"); // si encuentra la cedula la envía a la vista de
actualizar
16. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
}// fin del if
else{ // sin no lo encuentra lo envía al formulario de registrar
require_once("../Vista/Vista_registrarTitular.php");
}
?>
Vista_registrarTitular.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta nombre="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Sitio Web BancOro</title>
<link rel="stylesheet" href="../Vista/recursos/css/miestilos.css">
</head>
<body>
<header>
<img src="../Vista/recursos/img/ahorro.jpg" alt="Logo" width="30%">
</header>
<nav id="menu">
<ul>
<li><a href="">Principal </a> </li>
<li><a href="">Titular</a></li>
<li><a href="">Cuentas</a></li>
<li><a href="">Operaciones </a></li>
19. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
$objTitular->setDireccion($dire);
$resulRegistrar=$objTitular->Registrar();
if ($resulRegistrar['estatus']== true) { ////verificamos si se ejecutó correctamente el método
del modelo
$mensaje = 'Registro Exitoso del Titular';
}else {//si hay un error al registrar
$mensaje = 'Error al registrar el Titular, contacte con el soporte';}
require_once '../Vista/VistaMsj.php';
?>
Vista_Actualizar.php // recibe el registro de la tabla y permite la modificación o eliminación al llamar
al controlleractualizar
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta nombre="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Sitio Web BancOro</title>
<link rel="stylesheet" href="../Vista/recursos/css/miestilos.css">
</head>
<body>
<header>
<img src="../Vista/recursos/img/ahorro.jpg" alt="Logo" width="30%">
</header>
<nav id="menu">
20. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
<ul>
<li><a href="">Principal </a> </li>
<li><a href="">Titular</a></li>
<li><a href="">Cuentas</a></li>
<li><a href="">Operaciones </a></li>
<li><a href="">Reportes </a></li>
<li><a href="">Ayuda</a> </li>
<li>Salir </li>
</ul>
</nav>
<section id="principal">
<div id="contenido">
<?php
if (isset($consulta)) {
if (!empty($consulta)) {
$impr = '';
foreach ($consulta as $valor) {
if (isset($valor['cedula'])) {
$impr = '
<form action="../Controlador/ControllerActualizatitular.php" method="post" class="formulario">
<div class="form-group">
<label>Cedula</label><br>
<input type="text" name="txtci" value="'.$valor['cedula'].'" />
</div>
<div class="form-group">
21. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
<label>Nombre</label><br>
<input type="text" name="txtNombre" id="nombre" value="'.$valor['nombre'].'"
placeholder="Introduzca su Nombre" required/>
</div>
<div class="form-group">
<label>Sexo</label><br>
<input type="text" class="form-control" name="txtsexo" id="txtsexo" maxlength="100"
value="'.$valor['sexo'].'" required><br>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Direccion </label>
<input type="text" class="form-control" name="txtdireccion" id="direccion" maxlength="100"
value="'.$valor['direccion'].'" required>
</div>
<div class="form-group">
<button type="submit" name = "btn" class="btn btn-primary" value = "Modificar">
Modificar </button>
<button type="submit" name = "btn" class="btn btn-primary" value = "Eliminar">
Eliminar </button>
</div>
</div>
</form>';
}
}
printf($impr);
}
}
?>
<button type="button" name = "btn" class="btn btn-primary" value = "Cancelar"
23. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
}else {//si hay un error al registrar
$mensaje = 'Error al Actualizar el Titular, contacte con el
soporte';
}
require_once '../Vista/VistaMsj.php';
} else{ // se ejecuta el eliminar
// código por terminar
}
?>
Referencias Bibliográficas
Un sitio clave para quienes programamos en PHP orientado a objetos es PHPClasses:
http://www.phpclasses.org
Creación de Base de Datos en Postgres
https://www.youtube.com/watch?v=_VO_HCK6v1M
https://www.youtube.com/watch?v=Ia8U_im9-N4