Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
GUIA DE LABORATORIO N° 9 B
(000Webhost Php- Para desarrollar en casa)
Objetivo: Crear servicios web utilizando la arquitectura REST, para obtener información desde un
servidor web gratuito que se conecta a una base de datos.
Requerimientos previos:
Hacer una cuenta en el hosting gratuito(000Webhost), de preferencia siguiendo los
pasos que se indican en la guía proporcionada por la cátedra.
Tener la cuenta activa.
Conocer comandos DDL y DML en MySql.
Hacer la guía para suprimir código analitics del WebHosting gratuito.
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Entrar a la cuenta en 000webhost
Dado por hecho que se tiene la cuenta creada en 000Webhost, procedemos a crear dos servicios
web sobre esta plataforma, con el lenguaje de programación PHP(soportado por el hosting).
1) Verificación de Cuenta Activa Al entrar veremos cambios dentro de la opción de dominios:
2) Ingreso al Panel
Presionar clic en Go to panel para iniciar la administración de nuestro
host gratuito.
Aquí veremos una ventana al lado derecho que contendrá la información más relevante de
nuestro sitio y cuenta.
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
3) Creación de bases de datos.
Creación de la base de datos en Hosting Gratuito
Previamente antes de operar en la base de datos, es necesario haber creado un usuario y una base
de datos para poder accesar a ella. Para esto vamos a ir a seleccionar MySQL
Especificamos los datos que son requeridos, como el nombre de la base de datos, el nombre de
usuario y la contraseña.
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Luego de crear la base de datos, aparecerá una ventana de confirmación como la siguiente:
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Presione clic en “Back to Control Panel”
Y seleccionamos PhpMyAdmin
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Podemos realizar dos cosas:
Entrar a crear tablas o cambiar password
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Creación de tablas.(puede hacer el ejercicio con el archivo modelo_guia08.cdm y generar su propio script
de base de datos)
Luego hacemos click en “Enter phpMyadmin”
Vamos a agregar todas las tablas, de este modelo:
Ejecutando el script en la opción(Siguiente pagina)
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 31/05/2013 18:04:40 */
/*==============================================================*/
drop table if exists ALUMNO;
drop table if exists MATERIA;
drop table if exists NOTA;
/*==============================================================*/
/* Table: ALUMNO */
/*==============================================================*/
create table ALUMNO
(
CARNET char(7) not null,
NOMBRE varchar(30) not null,
APELLIDO varchar(30) not null,
SEXO char(1) not null,
MATGANADAS int,
primary key (CARNET)
);
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
/*==============================================================*/
/* Table: MATERIA */
/*==============================================================*/
create table MATERIA
(
CODMATERIA char(6) not null,
NOMMATERIA varchar(30) not null,
UNIDADESVAL char(1) not null,
primary key (CODMATERIA)
);
/*==============================================================*/
/* Table: NOTA */
/*==============================================================*/
create table NOTA
(
CODMATERIA char(6) not null,
CARNET char(7) not null,
CICLO char(6) not null,
NOTAFINAL float,
primary key (CODMATERIA, CARNET, CICLO)
);
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
alter table NOTA add constraint FK_POSEE foreign key (CODMATERIA)
references MATERIA (CODMATERIA) on delete restrict on update restrict;
alter table NOTA add constraint FK_TIENE foreign key (CARNET)
references ALUMNO (CARNET) on delete restrict on update restrict;
Ejecute el script(go)
Con lo que vera la siguiente información…
Agregando registros.
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Alumno
INSERT INTO ALUMNO VALUES ('NN00001','Nuevo','Nuevo','M',0);
Probamos PK
INSERT INTO ALUMNO VALUES ('NN00001','Nuevo','Nuevo','M',0);
Materia
INSERT INTO MATERIA VALUES('MAT115','MATEMATICAS I',4);
Probamos PK
INSERT INTO MATERIA VALUES('MAT115','MATEMATICAS I',4);
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Nota
INSERT INTO NOTA VALUES('MAT115', 'NN00001','1',2);
Probamos PK
INSERT INTO NOTA VALUES('MAT115', 'NN00001','1',2);
Probamos Integridad Referencial(FK_POSEE)
INSERT INTO NOTA VALUES('NN00001','MAT215','1',2);
No debería insertarse este registro por lo que asumimos que no valida la integridad al igual que el
SQLite.
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Entonces eliminamos el registro incorrecto(sin referencia)
Esta parte de la guía es opcional(les puede servir si su cuenta tiene privilegios de creación de
trigger en este u otro hosting gratuito)
Intentamos implementar la integridad referencial por medio de una tabla adicional y triggers.
1) Creamos la tabla que almacena mensajes de error por falta de integridad referencial
Ejecutamos en la opción SQL de la base de datos carnet
CREATE TABLE error_messages(
error_message VARCHAR(65),
PRIMARY KEY(error_message)
);
Le insertamos un registro por cada Foreign Key que querramos controlar
INSERT INTO error_messages VALUES (“INSERT: no existe carnet en Alumno”);
INSERT INTO error_messages VALUES (“INSERT: no existe codmateria en
Materia”);
2) Verificamos en Browse que los dos registros están insertados, si no puede con comandos,
hágalo con el asistente en la opción “Insertar”
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
3) Creacion de Triggers para mantener Integridad Referencial
Al igual que lo anterior trate de ejecutar los siguientes scripts
DELIMITER |
CREATE TRIGGER fk_posee
BEFORE INSERT
ON NOTA FOR EACH ROW BEGIN
IF (select count(*) from ALUMNO where CARNET = new.CARNET) = 0
THEN
insert into error_messages values ("INSERT: no existe carnet en
Alumno");
END IF;
END;|
DELIMITER ;
DELIMITER |
CREATE TRIGGER fk_tiene
BEFORE INSERT
ON NOTA
FOR EACH ROW BEGIN
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
IF (select count(*) from MATERIA where CODMAT = new.CODMATERIA) =
0 THEN
insert error_messages values ('INSERT: no existe codmateria en
Materia’);
END IF;
END;|
DELIMITER ;
Al ejecutarlo veremos que nuestro usuario no tiene privilegios de hacer triggers, por lo que
dejaremos esta tarea fuera de nuestra base y la validación se hará en el programa(aplicación en
dispositivo movil).
Si su usuario tiene dichos privilegios, deje la tabla error_messages, sino elimínela de forma visual o con el comando drop table en la ventana SQL.
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
4) Creación de servicio web con interacción con bases de datos.
Creación del servicio web en Hosting Gratuito.
Vamos a crear un servicio web el cual nos permita obtener la nota promedio de un carnet
específico.
1) Primeramente vamos a la opción MySQL
2) Tomamos nota de los parámetros: MySQL_Database, MySQL_User y MySQL_Host
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
3) Entramos al File manager y dentro de la carpeta public_html(como en guía 8b).
Servicio web de Inserción de Alumno. Haga un archivo llamado ws_alumno_insert.php que contenga:
<?php
$carnet=$_REQUEST['carnet'];
$nombre=$_REQUEST['nombre'];
$apellido=$_REQUEST['apellido'];
$sexo=$_REQUEST['sexo'];
$matganadas=$_REQUEST['matganadas'];
$servidor="mysql3.000webhost.com";
$usuario="a7428544_pdm115";
$password="pdm115";
$respuesta=array('resultado'=>2);
json_encode($respuesta);
$conexion=mysql_connect($servidor,$usuario,$password) or
die ("Problemas en la conexion");
$baseDatos="a7428544_carnet";
mysql_select_db($baseDatos,$conexion)
or die("Problemas en la seleccion de la base de datos");
$resultado=mysql_query("Insert into ALUMNO
(carnet,nombre,apellido,sexo,matganadas)
values('$carnet','$nombre','$apellido','$sexo',$matganadas)",$cone
xion) or
die( json_encode($respuesta));
//Si la respuesta es correcta enviamos 1 y sino enviamos 0
if($resultado)
$respuesta=array('resultado'=>1);
echo json_encode($respuesta);
mysql_close($conexion);
?>
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Insertar Alumnos(CON GET O POST)
http://carnetpdm115.site40.net/ws_alumno_insert.php?carnet=NN00
008&nombre=Juan&apellido=Perez&sexo=M&matganadas=1
Los parámetros $servidor, $usuario y $baseDatos son tomados del paso anterior y el
password del que se le definio a la base de datos cuando se creó.
Si ha olvidado su password de la base puede cambiarlo en PhpMyAdmin.
EXPLICACION DEL CODIGO.
$carnet=$_REQUEST['carnet'];
$nombre=$_REQUEST['nombre'];
$apellido=$_REQUEST['apellido'];
$sexo=$_REQUEST['sexo'];
$matganadas=$_REQUEST['matganadas'];
$servidor="mysql3.000webhost.com";
$usuario="a7428544_pdm115";
$password="pdm115";
$respuesta=array('resultado'=>0);
$conexion=mysql_connect($servidor,$usuario,$password) or
die ("Problemas en la conexion");
Con $carnet=$_REQUEST['carnet'],$nombre=$_REQUEST['nombre']indicamos que se
pasaran como parámetros una variable carnet y nombre. Lo mismo aplica para los demás
párametros apellido,sexo y matganadas. Para conectarnos a la base de datos primero vamos a
establecer una conexión con el servidor de la base de datos, con la función mysql_connect que
recibe como parámetros la dirección del servidor, el usuario y el password. El usuario y el
password ya fueron creados anteriormente,
$baseDatos="a7428544_carnet";
mysql_select_db($baseDatos,$conexion) or die("Problemas en la
seleccion de la base de datos");
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Con la conexión ya establecida, ahora vamos a conectarnos a la base de datos con la función
mysql_select_db que recibe como parámetros el nombre de la base de datos y la conexión que
creamos anteriormente.
$resultado=mysql_query("Insert into ALUMNO
(carnet,nombre,apellido,sexo,matganadas)
values('$carnet','$nombre','$apellido','$sexo',$matganadas)",$cone
xion) or
die( json_encode($respuesta));
Ya definidas la conexion con el servidor y la base de datos ahora podemos hacer consultas sobre la
base utilizando mysql_query que recibe como parámetros la consulta y la conexión. Si hay algún
fallo en el select enviaremos como respuesta 1 (se ejecuta lo que está dentro del die). Recuerde
que respuesta ha sido inicializada con ese valor.
if($resultado)
$respuesta=array('resultado'=>1);
echo json_encode($respuesta);
mysql_close($conexion);
Con if($resultado),verificamos que se realizó la consulta correctamente y con
$respuesta=array(‘resultado=>1’) indicamos que la inserción se realizó con éxito.
Finalmente utilizamos la función json_encode para devolver nuestro resultado en JSON.
Verificación en jsonlint
Entramos a jsonlint.com en el navegador
Para verificar el servicio web, para este caso vamos a digitar la siguiente URL en el espacio en
blanco:
http://carnetpdm115.site40.net/ws_alumno_insert.php?carnet=NN00008&nombre=Juan&apellid
o=Perez&sexo=M&matganadas=1
Para su caso debería de ser:
http://<dominio_registrado>/ws_alumno_insert.php?carnet=NN00001&nombre=Juan&apellido=P
erez&sexo=M&matganadas=1
Hacemos click en Validate, se mostrara la siguiente pantalla:
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Si aparece como se muestra (valid JSON), puede probarlo en el browser
http://carnetpdm115.site40.net/ws_alumno_insert.php?carnet=NN00008&nombre=Juan&apellid
o=Perez&sexo=M&matganadas=1
Cuando finalice la práctica solo envié los link hacia el texto en línea respectivo de practica 9b
Servicio web de Consulta de Alumno. Haga un archivo llamado ws_alumno_select.php que contenga:
<?php
$carnet=$_REQUEST['carnet'];
$servidor="mysql3.000webhost.com";
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
$usuario="a7428544_pdm115";
$password="pdm115";
$respuesta=array('resultado'=>2);
json_encode($respuesta);
$conexion=mysql_connect($servidor,$usuario,$password) or
die ("Problemas en la conexion");
$baseDatos="a7428544_carnet";
mysql_select_db($baseDatos,$conexion)
or die("Problemas en la seleccion de la base de datos");
$registros=mysql_query("SELECT * FROM ALUMNO WHERE
carnet='$carnet'",$conexion) or
die( json_encode($respuesta));
$filas=array();
while ($reg=mysql_fetch_assoc($registros))
{
$filas[]=$reg;
}
echo json_encode($filas);
mysql_close($conexion);
?>
Consultar Alumno(CON GET O POST)
http://carnetpdm115.site40.net/ws_alumno_select.php?carnet=NN00
008
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
Servicio web de Eliminacion de Alumno. Haga un archivo llamado ws_alumno_select.php que contenga:
<?php
$carnet=$_REQUEST['carnet'];
$servidor="mysql3.000webhost.com";
$usuario="a7428544_pdm115";
$password="pdm115";
$respuesta=array('resultado'=>2);
json_encode($respuesta);
$conexion=mysql_connect($servidor,$usuario,$password) or
die ("Problemas en la conexion");
$baseDatos="a7428544_carnet";
mysql_select_db($baseDatos,$conexion)
or die("Problemas en la seleccion de la base de datos");
$resultado=mysql_query("DELETE FROM ALUMNO WHERE
carnet='$carnet'",$conexion) or
die( json_encode($respuesta));
//Si la respuesta es correcta enviamos 1 y sino enviamos 0
$resultado=mysql_affected_rows();
if($resultado>0)
$respuesta=array('resultado'=>1);
else
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
$respuesta=array('resultado'=>0);
echo json_encode($respuesta);
mysql_close($conexion);
?>
Eliminar Alumno(CON GET O POST)
http://carnetpdm115.site40.net/ws_alumno_delete.php?carnet=NN00
009
Servicio web de Actualizar de Alumno. Haga un archivo llamado ws_alumno_select.php que contenga:
<?php
$carnet=$_REQUEST['carnet'];
$nombre=$_REQUEST['nombre'];
$apellido=$_REQUEST['apellido'];
$sexo=$_REQUEST['sexo'];
$matganadas=$_REQUEST['matganadas'];
$servidor="mysql3.000webhost.com";
$usuario="a7428544_pdm115";
$password="pdm115";
$respuesta=array('resultado'=>2);
json_encode($respuesta);
$conexion=mysql_connect($servidor,$usuario,$password) or
die ("Problemas en la conexion");
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA
ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES
PDM115 Ciclo I-2014
$baseDatos="a7428544_carnet";
mysql_select_db($baseDatos,$conexion)
or die("Problemas en la seleccion de la base de datos");
$resultado=mysql_query("UPDATE ALUMNO SET
nombre='$nombre',apellido='$apellido',sexo='$sexo',matganadas=$mat
ganadas WHERE carnet='$carnet'",$conexion) or
die( json_encode($respuesta));
//Si la respuesta es correcta enviamos 1 y sino enviamos 0
$resultado=mysql_affected_rows();
if($resultado>0)
$respuesta=array('resultado'=>1);
else
$respuesta=array('resultado'=>0);
echo json_encode($respuesta);
mysql_close($conexion);
?>
Actualizar Alumno (CON GET O POST)
http://carnetpdm115.site40.net/ws_alumno_update.php?carnet=NN0
0008&nombre=Juan&apellido=Perez&sexo=M&matganadas=1
Cuando finalice la práctica solo envié los link hacia el texto en línea respectivo de practica 9b