SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
Informe Técnico
Desarrollo de Aplicaciones Web para comercio electrónico. Tiendas Virtuales


               Tienda Virtual: H2M (Hogar 2ª Mano)
Introducción
Como trabajo del curso se ha realizado una pequeña tienda de comercio electrónico denominada H2M (Hogar 2ª Mano),
(en adelante H2M) cuyo objetivo es facilitar a cualquier familia una herramienta para la venta online de artículos del hogar
de segunda mano.

H2M se divide en dos bloques esenciales, por un lado una parte cliente dirigida a los potenciales compradores y por otro
una parte de administración reservada a usuarios propietarios de la tienda.

Parte Cliente de la Aplicación

Contiene la operativa básica para que un potencial comprador pueda realizar un pedido con los artículos que le interesen
de aquellos ofertados. Consta de las secciones:
               Catálogo: El catálogo agrupa los artículos en distintas categorías las cuales a su vez estarán desglosadas
               en subcategorías.
               Carrito: En esta sección el cliente podrá ver en todo momento aquellos artículos seleccionados del
               catálogo y que de forma provisional desea comprar. Al igual que una cesta de la compra tradicional se
               podrán agregar, eliminar, incrementar o decrementar los artículos almacenados en el carrito.
               Registro: Para que el cliente pueda tramitar un pedido necesita estar registrado como tal en la base de
               datos de clientes de la tienda. El registro se realiza una vez facilitando los datos de acceso y de
               facturación y tras el proceso el cliente obtiene una cuenta de usuario (email,contraseña).
               Pedido: En la tramitación de un pedido y una vez que el cliente se identifica con los datos de su cuenta
               obtenida en el proceso de registro, se genera automáticamente un pedido asociando el carrito con los
               artículos a los datos del cliente. Los datos de facturación (dirección de envío del pedido) serán en principio
               los que facilitó el cliente en el registro pero podrán ser modificados de forma independiente para cada
               pedido.

Queda pendiente para un futuro implementar otras secciones como una sección de ofertas, una sección de contacto
donde los clientes podrán comunicarse con los responsables de la tienda para sugerencias, quejas o solicitar información
sobre algún pedido, una sección donde se identifiquen los responsables de la tienda y otras muchas que por falta de
tiempo no se han realizado.


Parte de Administración de la Aplicación

Se trata de una zona restringida a la que únicamente podrán acceder, previa identificación, usuarios considerados
administradores de tienda y que deberán estar dados de alta como tales en la base de datos. En principio sólo está
operativa de forma incompleta la sección de pedidos en la que un administrador podrá ver y realizar búsquedas sobre los
pedidos realizados por los clientes. Lógicamente la administración de una tienda virtual conlleva varias tareas como
seguimiento de pedidos (en proceso, anulados, pagados,...), gestión de productos (alta, bajas y modificaciones tanto de
categorías como de artículos), gestión del correo de clientes (contacto), gestión de cuentas de administración y muchas
otras que por el momento no se han implementado dado el tamaño de la tarea.




                                                                                                                           1
Estructura del Programa


                                              http://localhost/TVProjectV00/cliente/index.php
      PARTE CLIENTE
                                                                                                 H2M




     HOME                      CATALOGO                                    CARRITO                                               REGISTRO
                                                                                            TRAMITAR PEDIDO                       CLIENTE
                                                                                             (Validar Cliente)
                                                                                                                          DATOS DE          REALIZAR
            LISTAR PRODUCTOS                              INCREMENTAR                                                      ACCESO            PEDIDO
                                           Añadir         DECREMENTAR
                                          Compra           PRODUCTOS                                                      DATOS DE
                                                                                                                           ENVÍO                       ACTUALIZAR
         BÚSQUEDA SENCILLA
                                                                                                                                                         PEDIDO
                                                        BORRAR PRODUCTO               Tramitar
                                                                                       Pedido
         BÚSQUEDA AVANZADA                                                                                                                             CANCELAR
                                                                                                                                                        PEDIDO
                                                          VACIAR CARRITO                                                                                 ENVÍO
        DETALLE DEL PRODUCTO                                                                                      N
                                                                                                                                                       CONFIRMAR
                                                                                                                                     S                   PEDIDO
                                                                                                                   ¿Cliente
                                                                                                                 Registrado?




                                                                                                                                                                    2
http://localhost/TVProjectV00/admon/admin.php
PARTE SERVIDOR                                                H2M



                                                      VALIDAR ADMINISTRADOR
                                                          (Login, Password)


                                                  N
                                                             ¿Existe
                                                            usuario?

                                                                          S




     GESTIÓN DE PEDIDOS   GESTIÓN DE CORREO        GESTIÓN DE ARTÍCULOS           GESTIÓN DE CLIENTES   GESTIÓN DE CUENTAS
                           (Sin implementar)         (Sin implementar)             (Sin implementar)     (Sin implementar)



                                                           Cerrar
                                                           Sesión




                                                                                                                             3
Arquitectura de la Aplicación sobre la base de una posible ruta de navegación

A continuación se muestra un ejemplo de funcionamiento de la aplicación tomando como base una posible compra
realizada por un cliente. La ruta descrita en el proceso de compra servirá para explicar los diagramas de estructura
vistos anteriormente y describir la operativa de la aplicación a través de sus interfaces (guía de usuario).

Proceso de Compra

En la parte cliente de la aplicación un usuario podrá seleccionar uno o varios artículos de su interés de un catálogo, llenar
su cesta de la compra (carrito) con dichos artículos y realizar un pedido con su compra. Es requisito para que el usuario
pueda tramitar un pedido estar registrado en la base de datos de clientes donde, una vez finalizado el proceso de registro
se le facilitará una cuenta de usuario (email,contraseña) que serán los datos de identificación que necesitará para
tramitar los pedidos.

Catálogo de Artículos

Al catálogo de artículos se accede pinchando en la opción correspondiente del menú horizontal principal.
Se compone de un menú vertical izquierdo que contiene un árbol de categorías de productos desglosadas a su vez en
subcategorías. Por el momento sólo se ha implementado la sección [OCIO Y CULTURA] con las subcategorías <libros> y
<música> puesto que el proceso de codificación de las restantes categorías sería similar.




Para cada tipo de artículo, se muestra, en principio, un listado completo ordenado por subcategoría. El resultado se
mostrará paginado, en este caso el tamaño de artículos por página es de 3. Cada ítem del listado contiene un pequeño
resumen informativo sobre el artículo que podrá ampliarse pinchando en el vínculo <Leer más>.




                                                                                                                           4
La página de detalle de un artículo ofrece una descripción más amplia del producto.




Para agilizar la localización de un artículo(s) determinado(s) dentro de un tipo de producto, se han implementado unas
herramientas de búsqueda que permiten filtrar los resultados por un cierto(s) criterio(s).




Cata tipo de producto contará con un buscador genérico que buscará una cadena de texto en varios de los campos que
describen al artículo y un buscador más específico que nos permitirá afinar más la búsqueda.

Buscador Genérico (ejemplo para la subcategoría <Libros>)

Buscará la cadena de texto (criterio) escrita en la caja de texto de búsqueda en varios de los campos descriptivos del
<Libro> como isbn, título del libro, autor, editorial, descripción resumida. De esta forma las búsquedas serán más toscas
(mayor cantidad de resultados) cuanta menos información tengamos del libro que queremos localizar puesto que la
cadena de búsqueda será más ambigua, y más precisas a medida que el criterio de búsqueda sea más específico. Por ej.
si como criterio de búsqueda ponemos el nombre de un autor, se mostrarán todos los libros disponibles de ese autor,
pero si ponemos el isbn de un libro localizará concretamente el libro que se corresponda con ese isbn puesto que es
único.

Buscador Específico (ejemplo para la subcategoría <Libros>)

En este caso podemos realizar búsquedas de libros por tema y subtema.




                                                                                                                       5
Las dos listas, tema y subtema, están en correspondencia de forma que si en el primer combo seleccionamos un tema
concreto (por ej. Informática), el segundo combo cargará los subtemas relacionados (Base de Datos, Programación), lo
cual nos permitirá filtrar un conjunto de libros que sea de nuestro interés.

Carrito (Cesta de la Compra)

El carrito de la compra permite al cliente ir almacenando aquellos artículos que son de su interés en el proceso de
compra (navegación y selección de productos en catálogo). Esta herramienta permite al cliente visualizar en todo
momento un listado agrupado de los productos que desea comprar y realizar ciertas operaciones sobre ese listado:
     a) Incrementar o decrementar las unidades de un producto.
     b) Eliminar un artículo concreto.
     c) Vaciar la Cesta cancelando la lista temporal.

Para cada actualización sobre el carrito se recalcularán las cantidades parciales y totales a pagar.




Tramitación del Pedido

Una vez que el cliente está satisfecho con los artículos que desea comprar puede comenzar a tramitar su pedido pulsando
en el botón de comando <Tramitar Pedido> del carrito.




En este punto pueden ocurrir dos cosas, o bien que el cliente ya esté registrado con lo cual para seguir adelante en el
proceso de tramitación del pedido bastaría con identificarse mediante su cuenta de acceso (email y contraseña), o bien
que se trate de un nuevo cliente que deberá registrarse antes de poder continuar con el proceso.


                                                                                                                     6
En el proceso de registro el usuario tendrá con cumplimentar un formulario que consta de dos bloques principales, sus
datos de acceso (email y contraseña) y los datos de facturación que incluye la identificación de la empresa o profesional
y su dirección. Esta dirección será tomada por defecto como dirección de envío para los pedidos pero podrá ser
modificada de forma independiente para cada pedido que realice este cliente.




Una vez que el cliente está registrado puede continuar con la tramitación del pedido identificándose con los datos de
acceso obtenidos.




Tras la identificación el usuario accede a la información de su pedido compuesto en principio por los datos de compra
junto con los datos de facturación.




                                                                                                                       7
Los datos de facturación facilitados en el proceso de registro podrán ser ahora modificados si así lo desea el cliente.
También se podrá seleccionar la forma de pago (contrareembolso o ingreso en cuenta) y el tipo de envío (correo o
mensajería). De esta elección, junto con el peso del artículo dependerá el cálculo de los gastos de envío que se sumarán al
coste del pedido.


El cliente puede realizar tres operaciones sobre un pedido:
      a) Cancelarlo, con lo cual se anulará el pedido y su cesta de la compra.
      b) Actualizar Pedido, pudiendo modificar los datos de envío, forma de pago y tipo de envío.
      c) Aceptar Pedido, con lo cual el pedido se procesará y será guardado en la base de datos para su posterior
            seguimiento.




Queda pendiente en este punto implementar el envío automático al email del cliente de un mensaje de correo con la
información de su pedido, previa comprobación de existencias.




                                                                                                                         8
Administración de la Tienda

A la parte de administración de la tienda se accede por una URL distinta a la de la parte cliente ya que se ha preferido, por
seguridad, no habilitar en la parte cliente ningún acceso a este área restringida, de forma que no haya conexión entre
ambas zonas.

Por tanto accedemos a la zona de gestión de la tienda mediante la URL: http://localhost/TVProjectV00/admon/admin.php




Lo que nos sitúa en la página de control de acceso de usuarios administradores. Para que un usuario sea validado tendrá
que estar dado de alta en la tabla <administradores> de la base de datos.

Tras la identificación accedemos al Panel de Control de Gestión de la tienda, desde donde se podrán administrar distintos
procesos como seguimiento de pedidos, correo de clientes, dar de alta-modificar-borrar productos, gestión de cuentas de
clientes y de administradores de tienda.




                                                                                                                           9
A cada área de gestión se accederá a través del botón de comando correspondiente situado en el menú vertical
izquierdo.

Tal como se comentó anteriormente, se ha implementado por el momento parte de la gestión de pedidos, el resto queda
pendiente de implementación ya que requiere una enorme cantidad de tiempo.


Implementación de la Base de Datos

La figura muestra el modelo relacional de base de datos que da soporte a la tienda. Como se observa, por el momento
está compuesta por seis tablas relacionadas (integridad referencial). La base de datos tendrá que ampliarse a medida que
se dote de más funcionalidades a la tienda, pero por el momento se corresponde con la parte implementada de la
aplicación.




Explicación del modelo: Por un lado están las tablas que sirven de almacén para los productos de la tienda, <categorias> y
<articulos>. Puesto que una categoría puede contener varios artículos su relación es de 1:n. El árbol de categorías y
subcategorías se almacena en la tabla <categorias> considerando para cada nueva categoría la categoría padre
(idCategoriaPadre) a la que pertenece. Respecto a la tabla de artículos se ha optado por el momento por una sola tabla
para almacenar los distintos tipos de artículos. Esta tabla contiene unos campos que son comunes a todo tipo de artículo
(nombre, descripción breve, descripción detallada, precio, imagen pequeña, imagen ampliada, peso, iva, existencias,
conjunto, subconjunto, etc) y otros campos genéricos (itemText01,itemText02,itemMemo01,itemNum01,etc) que contendrán
aquellos campos de cada tipo de artículo que sean distintos de los comunes.

Respecto a los pedidos un cliente podrá realizar varios pedidos 1:n y un pedido a su vez contiene varias lineas de pedido
(varios artículos).

Por último la tabla de <administradores> contiene las cuentas de usuario de los gestores de la tienda virtual.


                                                                                                                      10
Listado del programa (manual del desarrollador)

A continuación se comentan los aspectos más interesantes de los ficheros del programa. La estructura de ficheros de la
aplicación sigue un modelo similar al del libro de texto del curso. El conjunto de ficheros que dan funcionalidad a la parte
cliente y de administración, están agrupados en sus respectivas carpetas <cliente> y <admon>. Las otras dos carpetas
importantes <biblioteca> y <css> son de uso común a ambas zonas.




Parte Cliente -> Carpeta <cliente>

index.php

Este fichero implementa la página <Home> o de inicio de la aplicación.

Los aspectos más interesantes son por un lado la visualización de la fecha y hora que se actualiza automáticamente sin
necesidad de refrescar la página. El código javascript está implementado en el fichero <fecha-hora.js> (archivo
encontrado en internet) donde básicamente el refresco de hora se realiza mediante la función setTiemout
<setTimeout("horaActual()",1000)>.

Por otro lado se implementa el menú de navegación principal de la aplicación. Se trata de un menú horizontal
implementado con una lista html a la que se le ha aplicado estilos css para que la lista tome aspecto horizontal y cada
ítem del menú cambie de color al situar el ratón encima (ver estilos para menú de navegación horizontal del archivo
<estilos.css>).




                                                                                                                        11
index.php




catalogo.php

Este fichero implementa el catálogo de artículos con sus distintos tipos de productos. Como aspectos importantes está
por una parte el árbol de categorías y subcategorías de artículos cuya estructura se muestra a continuación:




                                                                                                                 12
La implementación de esta estructura se realiza mediante una función recursiva. Partiendo de la categoría raíz (0), la
función va recorriendo y entrando de forma recursiva en cada nivel y subnivel del árbol.




Por otro lado la distinción entre los distintos tipos de artículos se realiza mediante una estructura de tipo switch-case
switch($_REQUEST["idCategoria"]), de forma que dependiendo de la categoría que se haya pasado como parámetro
ejecutará el código correspondiente. Por el momento sólo se han implementado los casos para las subcategorías 45
(libros) y 46 (discos) de la categoría <OCIO Y CULTTURA>, siendo el proceso repetitivo para las demás categorías.

La operativa para cada tipo de artículo se implementa en su clase correspondiente con sus propiedades y métodos. Por
tanto la funcionalidad para la categoría libros estará basada en un objeto de la clase libro, los discos en un objeto de la
clase disco y así sucesivamente.

Si tomamos como ejemplo el tipo de artículos <libros> (los procesos son similares para cualquier otro tipo de producto),
tenemos que en el catálogo se dan ciertos tipos de operaciones comunes:

a) Si no existe ningún tipo de filtrado, se mostrará un listado completo ordenado primero por tema y luego por subtema. El
resultado aparecerá paginado con un tamaño de tres artículos por página (el tamaño de paginación es configurable). La
paginación se basa en la cláusula LIMIT utilizada para restringir el número de registros retornados por el comando
SELECT tal como se implementa en el método siguiente de <class libro>.




                                                                                                                       13
b) Existen dos tipos de filtros, un buscador genérico y un buscador avanzado que para el caso de <libros> se implementan
en el código siguiente:

Buscador genérico: Corresponde a un método de <class libro> y básicamente busca un patrón (cadena de texto) en varios
campos del artículo de la categoría correspondiente.




Buscador Avanzado: Para el caso de <libros> el buscador avanzado se basa en un par de combos correlacionados de
forma que el tema seleccionado en el primer combo carga las materias relacionadas en el segundo combo.
Los combos se cargan mediante los métodos de <class libro>, getTemas() y getMaterias($Tema). Una vez que
seleccionamos tema y subtema en los combos, el filtrado se realiza a través del método de <class libro> siguiente:




                                                                                                                    14
catalogo.php




               15
libro_descripcion.php – disco_descripcion.php – etc...
Los ficheros de descripción de un artículo determinado muestran un zoom o descripción más detallada de un artículo
concreto seleccionado de un listado. Los listados de productos muestran de forma resumida las características más
importantes de un artículo, sin embargo podremos ampliar esta información mediante los ficheros objeto_descripción.php
que ayudarán al cliente a decidir de forma más exacta si le interesa o no el producto antes de añadirlo a la cesta de la
compra.


                                                                                                                    16
libro_descripcion.php




Como se observa, básicamente y para el caso de <libro> (sería similar para cualquier otro tipo de objeto), se recupera
mediante el método leerLibroParam($idLibro) de <class libro> el libro del que queremos hacer un zoom y lo mostramos
mediante la función mostrarLibroZoom($arrayLibros).



                                                                                                                     17
carrito.php

El carrito o cesta de la compra basa su operativa en un objeto de la clase <class carrito>. En este caso se ha optado por
implementar el carrito de forma distinta a la expuesta en el libro de texto, ya que en lugar de utilizar una clase para cada
tipo de artículo he preferido utilizar una estructura de arrays tal como se muestra a continuación.



                                                 Cursor ($num_articulos)




     idArticulo (array)           0       1       2     ------------------------------     n




      nombre (array)                                     ------------------------------
                                   0      1        2                                       n




     precioUnidad(array)          0       1       2     ------------------------------     n




                                 ------------------------------------------------------------
                                 ------------------------------------------------------------
                                  0       1       2     ------------------------------     n




                    Articulo1                                              ArticuloN
                            Articulo2



De esta forma se crea un array para cada campo del artículo en el carrito. Cada vez que se inserta un nuevo artículo se
desplaza el cursor una posición en el conjunto de arrays.


La clase carrito contiene métodos que permiten:
     a) Añadir un nuevo artículo. Cada vez que se añade un artículo es necesario llamar a los métodos para recalcular
          los totales, tanto parciales (de línea) como finales.
     b) Eliminar un nuevo artículo: Hay que destacar que el borrado de un artículo es un borrado lógico (se marca con
          0 el objeto eliminado) y por tanto no se borra físicamente dicho producto.
     c) Como consecuencia de lo anterior se necesita un método que recuente la cantidad de artículos real,
          discriminando aquellos marcados con 0.



                                                                                                                        18
claseCarrito.php




                   19
Otro aspecto muy importante respecto al carrito, es que el objeto de la clase carrito que se crea se almacena en una
variable de sesión. Esto nos permite disponer del carrito desde cualquier parte de la aplicación, tanto para seguir
añadiendo artículos desde cualquier parte del catálogo, como posteriormente para añadir a los datos del cliente cuando
se realiza un pedido.




La variable de sesión carrito se destruirá cuando el usuario vacía su carrito o al aceptar un pedido ya que los datos se
vuelcan a la base de datos.




                                                                                                                    20
carrito.php




              21
registroCliente.php

Como se comentó en la descripción general del programa, para que un cliente pueda tramitar un pedido, es necesario que
esté dado de alta en la base de datos de clientes. En este proceso el usuario o empresa facilita unos datos de acceso y los
datos de facturación o dirección de envío. Finalizado el proceso de alta el cliente obtiene una cuenta de usuario (email,
password) que le permitirá por un lado identificarse y por otro que se carguen sus datos por defecto en la tramitación de
un pedido.

El fichero consta de un formulario dividido en dos secciones, datos de acceso y datos de facturación, que un cliente
particular o una empresa han de cumplimentar.

Otro aspecto a destacar es la validación de datos insertados en el formulario. Esta validación se realiza mediante
JavaScript, comprobando que se rellenan los campos obligatorios, que el email tiene una sintaxis mínimamente correcta,
que la clave y su confirmación son coincidentes, etc.

Si todo es correcto se envían los datos del formulario y a través del método addCliente($clienteValues) de <class cliente>,
se añade el nuevo cliente a la base de datos mediante una sentencia INSERT.




                                                                                                                       22
registroCliente.php




                      23
24
25
tramitarPedidoLogin.php

En este fichero es donde se identifica el cliente (1ª fase del proceso de tramitación) para poder tramitar su pedido. Si no
está registrado (cliente nuevo) se le facilita un enlace para acceder a la página de registro.

Se trata de un formulario de autenticación que valida los datos de entrada. Se comprueba que no se deje ningún campo
en blanco, que la sintaxis del email sea mínimamente correcta, que exista el usuario y que su clave coincida con la
almecenada en la base de datos.

Tras la validación del formulario se mostrará un listado con los errores en caso de existir o bien si todo es correcto se
pasará a la siguiente fase de la tramitación.

Un aspecto importante a tener en cuenta es que si el cliente se valida con éxito se crea una variable de sesión
$_SESSION["autenticado"]= "SI". Esta variable se usa para evitar que un usuario pueda acceder por URL a páginas que
requieren que previamente se haya identificado.


//COMPRUEBA QUE EL USUARIO ESTA AUTENTICADO=======================================
if ((!isset($_SESSION["autenticado"])) or ($_SESSION["autenticado"] != "SI"))
{
            header ("Location: index.php");
}




                                                                                                                       26
tramitarPedidoLogin.php




                          27
finalizarPedido.php – grabarPedido.php

En estos fichero es donde se crea el pedido anexando los datos de la cesta de la compra a los datos del cliente. Por
defecto se cargan los datos de facturación que el cliente facilitó cuando se registró. El cliente tiene la posibilidad de
actualizar los datos de envío para el pedido en curso, seleccionar el tipo de envío y la forma de pago. En función del tipo de
envío y peso del artículo se calcularán los gastos de envío mediante un algoritmo.

El pedido se crea basándose en un objeto de <class pedido> y puesto que existe integridad referencial en la base de datos
entre las tablas <pedidos> y <lineaPedido>, es necesario insertar primero los datos de pedido y luego los datos del carrito
que conforman las lineas de pedido.




                                                                                                                          28
finalizarPedido.php




                      29
30
31
grabarPedido.php




                   32
33
Parte de Administración -> Carpeta <admon>

admin.php

En este fichero se valida que el usuario administrador que pretende acceder a la zona de gestión de la tienda esté dado
de alta en la base de datos en la tabla de administradores (login,passwd).

Si la autenticación es correcta, se crea y activa la variable de sesión $_SESSION["auth_admin"]= 1.

Esta variable se utilizará posteriormente en todas las demás páginas de la zona de administración para evitar accesos
indebidos por URL a páginas que requieren de una previa identificación.


//COMPRUEBA QUE EL USUARIO ADMINISTRADOR ESTA AUTENTICADO
if ((!isset($_SESSION["auth_admin"])) or ($_SESSION["auth_admin"] != 1))
{
            header ("Location: admin.php");
}




                                                                                                                   34
admin.php




            35
36
admin_ControlPanel.php

Se ha implementado el esqueleto del Panel de Control desde donde se gestionarán todas las operaciones de
administración de la tienda (Correo Entrante, Clientes, Administradores, Seguimiento de Pedidos, Gestión de Artículos,...).

admin_ControlPanel.php




                                                                                                                       37
38
39
Se utiliza una estructura de tipo switch-case (switch($_SESSION['OPCION'])), para que se interprete el código de la
operación de gestión seleccionada en la botonera del menú izquierdo.

La sección de pedidos está implementada en parte, y por el momento se pueden filtrar pedidos por empresa o profesional,
restringiendo además por el estado del pedido (En Proceso, Anulado, Pagado, Cualquier Estado).




                                                                                                                   40
Ficheros de Biblioteca y configuración-> Carpeta <biblioteca>

Esta carpeta contiene el fichero <clases.php> que agrupa todas las clases utilizadas en la aplicación a excepción de la
clase carrito que se implementa en un fichero aparte. Las clases libro, disco, cliente, pedido, administrador, contienen
métodos muy intuitivos y prácticamente su funcionalidad se autoexplica por el nombre del método, por lo que no
considero necesario describir cada uno de ellos.

Una clase especial es <class conexion> que nos permite conectarnos a la base de datos de la tienda facilitando los
parámetros: servidor, base de datos, usuario y contraseña. Esta clase nos permite crear en cualquier momento y en
cualquier parte de la aplicación un objeto de la misma para interactuar con la base de datos.
La clase además implementa el método, public function consulta($consulta), que nos permite lanzar una consulta SQL a la
base de datos devolviendo el resultado de la misma.


El fichero de funciones <funciones.php> agrupa una serie de funciones donde la mayor parte de ellas son funciones de
interfaz que sirven para mostrar resultados (mostrar libros, mostrar discos, mostrar el detalle de un libro o de un disco,
visualizar el carrito, etc).

También contiene algunas funciones de validación y las funciones para crear el árbol de categorías y para calcular los
gastos de envío de un pedido en función del peso del artículo y el tipo de envío seleccionado.

El fichero <configurador.php> contiene la definición de los parámetros de configuración de la aplicación de forma
centralizada. Por el momento están definidas las rutas a las carpetas de imágenes y el tamaño de página utilizado por el
paginador de artículos.

<?php
//Ruta a la imágines de la tienda virtual
DEFINE("PATHIMGTV","/TVProjectV00/imagenes/imgTV/");
DEFINE("PATHIMGAPP","/TVProjectV00/imagenes/imgAPP/");

//Bloque de páginas por página (Paginador)
DEFINE("TAMANO_PAGINA",3);
?>




                                                                                                                      41
clases.php




             42
43
44
45
46
funciones.php




                47
48
49
50
51
52
estilos.css




              53
54
55
56
57
Herramientas utilizadas para el desarrollo del programa


              Entorno Completo de Desarrollo: XAMPP para Windows Version 1.6.8

              Editor HTML: Macromedia DREAMWEAVER 8

              PHP Version 5.2.6

              Gestor Web de Bases de Datos: phpMyAdmin - 2.11.9.2

              Servidor Web: Apache/2.2.9 (Win32)

              Servidor de Base de Datos (MYSQL): Versión 5.0.67-community-nt

              Aplicación para diseño de Bases de Datos: DB Designer 4



Conclusiones, Limitaciones del Programa y Reflexiones finales

Las limitaciones del programa se deben sobre todo a la falta de tiempo para el desarrollo completo del mismo. A
continuación se enumeran algunos aspectos a completar en un futuro:

    1)    Control automático de existencias de artículos.
    2)    Crear una sección de productos en oferta.
    3)    Permitir comunicación entre clientes y responsables de la tienda a través de mensajes de correo.
    4)    Mejora de la gestión de excepciones y errores.
    5)    Envío automático de email al cliente con información del pedido que ha realizado.
    6)    Mejorar los aspectos de seguridad creando usuarios mysql con privilegios limitados.
    7)    Implementar la forma de pago mediante PayPal.
    8)    Completar la parte de Administración de la tienda.
    9)    Implementar SSL.
    10)   Y otros muchos aspectos,...


Respecto al curso el material del mismo es muy interesante, y en la parte negativa resaltar la poca actividad que ha
tenido el foro (falta de dinamización).




                                                                                                                58

Weitere ähnliche Inhalte

Was ist angesagt?

2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de usoSaul Mamani
 
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTASAPLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTASSaul Mamani
 
Documento de requerimiento
Documento de requerimientoDocumento de requerimiento
Documento de requerimientoJosesito Flores
 
EJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIAEJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIAJhons Borja B
 
Sistemas de Informacion - Tema 3 diagrama de actividades
Sistemas de Informacion - Tema 3   diagrama de actividadesSistemas de Informacion - Tema 3   diagrama de actividades
Sistemas de Informacion - Tema 3 diagrama de actividadesrulazisc
 
Alta disponibilidad con MySQL
Alta disponibilidad con MySQLAlta disponibilidad con MySQL
Alta disponibilidad con MySQLDennis Cohn
 
Unidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De UsoUnidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De UsoSergio Sanchez
 
Implementacion de un servidor zentyal
Implementacion de un servidor zentyalImplementacion de un servidor zentyal
Implementacion de un servidor zentyalDouglas Elias
 
Mecanismos de protección de archivos
Mecanismos de protección de archivosMecanismos de protección de archivos
Mecanismos de protección de archivosOscar LS
 
Desarrollo de aplicaciones web distribuidas.
Desarrollo de aplicaciones web distribuidas.Desarrollo de aplicaciones web distribuidas.
Desarrollo de aplicaciones web distribuidas.Jomicast
 
Qué es un documento de requerimientos
Qué es un documento de requerimientosQué es un documento de requerimientos
Qué es un documento de requerimientosCarlos Alonso
 
Datapower: Aceleración y Seguridad XML
Datapower: Aceleración y Seguridad XML Datapower: Aceleración y Seguridad XML
Datapower: Aceleración y Seguridad XML Sura Gonzalez
 
Diagrama de actividades v2
Diagrama de actividades v2Diagrama de actividades v2
Diagrama de actividades v2rossanadaysi
 

Was ist angesagt? (20)

2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso2. Casos de uso y diagramas de casos de uso
2. Casos de uso y diagramas de casos de uso
 
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTASAPLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
APLICACIÓN DE SCRUM Y UML PARA EL DESARROLLO DE UN SISTEMA DE VENTAS
 
24373266
2437326624373266
24373266
 
Documento de requerimiento
Documento de requerimientoDocumento de requerimiento
Documento de requerimiento
 
ITIL / ITSM - De la teoría a la práctica
ITIL / ITSM - De la teoría a la prácticaITIL / ITSM - De la teoría a la práctica
ITIL / ITSM - De la teoría a la práctica
 
EJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIAEJERCICIOS DE ADMINISTRACION DE MEMORIA
EJERCICIOS DE ADMINISTRACION DE MEMORIA
 
Sistemas de Informacion - Tema 3 diagrama de actividades
Sistemas de Informacion - Tema 3   diagrama de actividadesSistemas de Informacion - Tema 3   diagrama de actividades
Sistemas de Informacion - Tema 3 diagrama de actividades
 
Casos de estudio para diagramas de clases
Casos de estudio para diagramas de clasesCasos de estudio para diagramas de clases
Casos de estudio para diagramas de clases
 
Alta disponibilidad con MySQL
Alta disponibilidad con MySQLAlta disponibilidad con MySQL
Alta disponibilidad con MySQL
 
Unidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De UsoUnidad 4 Mad Modelado Analisis Casos De Uso
Unidad 4 Mad Modelado Analisis Casos De Uso
 
Implementacion de un servidor zentyal
Implementacion de un servidor zentyalImplementacion de un servidor zentyal
Implementacion de un servidor zentyal
 
Diagramas de Casos de Uso del Negocio y del Sistema
 Diagramas de Casos de Uso del Negocio y del Sistema Diagramas de Casos de Uso del Negocio y del Sistema
Diagramas de Casos de Uso del Negocio y del Sistema
 
CISCO PACKET TRACER
CISCO PACKET TRACERCISCO PACKET TRACER
CISCO PACKET TRACER
 
Mecanismos de protección de archivos
Mecanismos de protección de archivosMecanismos de protección de archivos
Mecanismos de protección de archivos
 
Desarrollo de aplicaciones web distribuidas.
Desarrollo de aplicaciones web distribuidas.Desarrollo de aplicaciones web distribuidas.
Desarrollo de aplicaciones web distribuidas.
 
Qué es un documento de requerimientos
Qué es un documento de requerimientosQué es un documento de requerimientos
Qué es un documento de requerimientos
 
Modelo OSI de ISO
Modelo OSI de ISOModelo OSI de ISO
Modelo OSI de ISO
 
Datapower: Aceleración y Seguridad XML
Datapower: Aceleración y Seguridad XML Datapower: Aceleración y Seguridad XML
Datapower: Aceleración y Seguridad XML
 
Diagrama de actividades v2
Diagrama de actividades v2Diagrama de actividades v2
Diagrama de actividades v2
 
Ieee 830 srs
Ieee 830 srsIeee 830 srs
Ieee 830 srs
 

Andere mochten auch

herramientas de software para comercio electronico
herramientas de software para comercio electronicoherramientas de software para comercio electronico
herramientas de software para comercio electronicofelipeflorez00
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptjubacalo
 
Proyecto tienda virtual
Proyecto tienda virtualProyecto tienda virtual
Proyecto tienda virtualEdson Ibañez
 
Acciones JSP
Acciones JSPAcciones JSP
Acciones JSPjubacalo
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DBjubacalo
 
Jsp directiva page
Jsp directiva pageJsp directiva page
Jsp directiva pagejubacalo
 
Explicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundoExplicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundojubacalo
 
Proyecto JSP
Proyecto JSPProyecto JSP
Proyecto JSPjubacalo
 
Elementos de script en JSP
Elementos de script en JSPElementos de script en JSP
Elementos de script en JSPjubacalo
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLjubacalo
 
Java AWT Calculadora
Java AWT CalculadoraJava AWT Calculadora
Java AWT Calculadorajubacalo
 
Acceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletAcceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletjubacalo
 
Servlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y TomcatServlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y Tomcatjubacalo
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometrojubacalo
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Rayajubacalo
 
Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threadsjubacalo
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 

Andere mochten auch (20)

herramientas de software para comercio electronico
herramientas de software para comercio electronicoherramientas de software para comercio electronico
herramientas de software para comercio electronico
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScript
 
Proyecto tienda virtual
Proyecto tienda virtualProyecto tienda virtual
Proyecto tienda virtual
 
Acciones JSP
Acciones JSPAcciones JSP
Acciones JSP
 
Find File Servlet DB
Find File Servlet DBFind File Servlet DB
Find File Servlet DB
 
Jsp directiva page
Jsp directiva pageJsp directiva page
Jsp directiva page
 
Explicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundoExplicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundo
 
Proyecto JSP
Proyecto JSPProyecto JSP
Proyecto JSP
 
Elementos de script en JSP
Elementos de script en JSPElementos de script en JSP
Elementos de script en JSP
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTML
 
Java AWT Calculadora
Java AWT CalculadoraJava AWT Calculadora
Java AWT Calculadora
 
Acceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletAcceso a BBDD mediante un servlet
Acceso a BBDD mediante un servlet
 
Servlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y TomcatServlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y Tomcat
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
 
Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threads
 
Tienda virtual
Tienda virtualTienda virtual
Tienda virtual
 
Tienda virtual
Tienda virtual Tienda virtual
Tienda virtual
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
TIENDA VIRTUAL
TIENDA VIRTUAL TIENDA VIRTUAL
TIENDA VIRTUAL
 

Ähnlich wie Tienda virtual php_mysql

Cadena de suministros area compras y suministros
Cadena de suministros   area compras y suministrosCadena de suministros   area compras y suministros
Cadena de suministros area compras y suministrosWERS2012
 
Analisis y Diseño
Analisis y DiseñoAnalisis y Diseño
Analisis y DiseñoDiegoBravo
 
Imagestion Cloud v4.0
Imagestion Cloud v4.0Imagestion Cloud v4.0
Imagestion Cloud v4.0imaginexti
 
Anteproyecto renovado
Anteproyecto renovadoAnteproyecto renovado
Anteproyecto renovadoarkangel8801
 
Anteproyecto (actualizado)
Anteproyecto (actualizado)Anteproyecto (actualizado)
Anteproyecto (actualizado)capver digital
 
Gestión de calidad con six sigma alconsa v2
Gestión de calidad con six sigma   alconsa v2Gestión de calidad con six sigma   alconsa v2
Gestión de calidad con six sigma alconsa v2marilia33
 
Uml videotienda (1)
Uml videotienda (1)Uml videotienda (1)
Uml videotienda (1)cgviviana
 

Ähnlich wie Tienda virtual php_mysql (15)

Cadena de suministros area compras y suministros
Cadena de suministros   area compras y suministrosCadena de suministros   area compras y suministros
Cadena de suministros area compras y suministros
 
Analisis
AnalisisAnalisis
Analisis
 
Analisis y Diseño
Analisis y DiseñoAnalisis y Diseño
Analisis y Diseño
 
Proy Empr Anal
Proy Empr AnalProy Empr Anal
Proy Empr Anal
 
Proy Empr
Proy EmprProy Empr
Proy Empr
 
Proy Empr
Proy EmprProy Empr
Proy Empr
 
analisis
analisisanalisis
analisis
 
Deber De Analisis
Deber De AnalisisDeber De Analisis
Deber De Analisis
 
Imagestion Cloud v4.0
Imagestion Cloud v4.0Imagestion Cloud v4.0
Imagestion Cloud v4.0
 
proyecto
proyectoproyecto
proyecto
 
Anteproyecto renovado
Anteproyecto renovadoAnteproyecto renovado
Anteproyecto renovado
 
Anteproyecto (actualizado)
Anteproyecto (actualizado)Anteproyecto (actualizado)
Anteproyecto (actualizado)
 
Gestión de calidad con six sigma alconsa v2
Gestión de calidad con six sigma   alconsa v2Gestión de calidad con six sigma   alconsa v2
Gestión de calidad con six sigma alconsa v2
 
Manual tecnico
Manual tecnicoManual tecnico
Manual tecnico
 
Uml videotienda (1)
Uml videotienda (1)Uml videotienda (1)
Uml videotienda (1)
 

Mehr von jubacalo

jQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojubacalo
 
jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.jubacalo
 
MIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en ImagenMIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en Imagenjubacalo
 
Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2jubacalo
 
App Android MiniBanco
App Android MiniBancoApp Android MiniBanco
App Android MiniBancojubacalo
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Androidjubacalo
 
Crear Base de Datos en Oracle
Crear Base de Datos en OracleCrear Base de Datos en Oracle
Crear Base de Datos en Oraclejubacalo
 
Web de noticias en Ajax
Web de noticias en AjaxWeb de noticias en Ajax
Web de noticias en Ajaxjubacalo
 
Escenarios
EscenariosEscenarios
Escenariosjubacalo
 
Matrices02
Matrices02Matrices02
Matrices02jubacalo
 
Tabla Dinámica
Tabla DinámicaTabla Dinámica
Tabla Dinámicajubacalo
 
Tabla de Datos
Tabla de DatosTabla de Datos
Tabla de Datosjubacalo
 
Textura de agua
Textura de aguaTextura de agua
Textura de aguajubacalo
 
Funciones lógicas y condicionales
Funciones lógicas y condicionalesFunciones lógicas y condicionales
Funciones lógicas y condicionalesjubacalo
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometrojubacalo
 

Mehr von jubacalo (18)

jQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogo
 
jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.
 
MIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en ImagenMIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en Imagen
 
Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2
 
App Android MiniBanco
App Android MiniBancoApp Android MiniBanco
App Android MiniBanco
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Android
 
Crear Base de Datos en Oracle
Crear Base de Datos en OracleCrear Base de Datos en Oracle
Crear Base de Datos en Oracle
 
Web de noticias en Ajax
Web de noticias en AjaxWeb de noticias en Ajax
Web de noticias en Ajax
 
Escenarios
EscenariosEscenarios
Escenarios
 
Matrices02
Matrices02Matrices02
Matrices02
 
Gráficos
GráficosGráficos
Gráficos
 
Tabla Dinámica
Tabla DinámicaTabla Dinámica
Tabla Dinámica
 
Tabla de Datos
Tabla de DatosTabla de Datos
Tabla de Datos
 
Textura de agua
Textura de aguaTextura de agua
Textura de agua
 
Funciones lógicas y condicionales
Funciones lógicas y condicionalesFunciones lógicas y condicionales
Funciones lógicas y condicionales
 
Solver
SolverSolver
Solver
 
Word VBA
Word VBAWord VBA
Word VBA
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 

Tienda virtual php_mysql

  • 1. Informe Técnico Desarrollo de Aplicaciones Web para comercio electrónico. Tiendas Virtuales Tienda Virtual: H2M (Hogar 2ª Mano)
  • 2. Introducción Como trabajo del curso se ha realizado una pequeña tienda de comercio electrónico denominada H2M (Hogar 2ª Mano), (en adelante H2M) cuyo objetivo es facilitar a cualquier familia una herramienta para la venta online de artículos del hogar de segunda mano. H2M se divide en dos bloques esenciales, por un lado una parte cliente dirigida a los potenciales compradores y por otro una parte de administración reservada a usuarios propietarios de la tienda. Parte Cliente de la Aplicación Contiene la operativa básica para que un potencial comprador pueda realizar un pedido con los artículos que le interesen de aquellos ofertados. Consta de las secciones: Catálogo: El catálogo agrupa los artículos en distintas categorías las cuales a su vez estarán desglosadas en subcategorías. Carrito: En esta sección el cliente podrá ver en todo momento aquellos artículos seleccionados del catálogo y que de forma provisional desea comprar. Al igual que una cesta de la compra tradicional se podrán agregar, eliminar, incrementar o decrementar los artículos almacenados en el carrito. Registro: Para que el cliente pueda tramitar un pedido necesita estar registrado como tal en la base de datos de clientes de la tienda. El registro se realiza una vez facilitando los datos de acceso y de facturación y tras el proceso el cliente obtiene una cuenta de usuario (email,contraseña). Pedido: En la tramitación de un pedido y una vez que el cliente se identifica con los datos de su cuenta obtenida en el proceso de registro, se genera automáticamente un pedido asociando el carrito con los artículos a los datos del cliente. Los datos de facturación (dirección de envío del pedido) serán en principio los que facilitó el cliente en el registro pero podrán ser modificados de forma independiente para cada pedido. Queda pendiente para un futuro implementar otras secciones como una sección de ofertas, una sección de contacto donde los clientes podrán comunicarse con los responsables de la tienda para sugerencias, quejas o solicitar información sobre algún pedido, una sección donde se identifiquen los responsables de la tienda y otras muchas que por falta de tiempo no se han realizado. Parte de Administración de la Aplicación Se trata de una zona restringida a la que únicamente podrán acceder, previa identificación, usuarios considerados administradores de tienda y que deberán estar dados de alta como tales en la base de datos. En principio sólo está operativa de forma incompleta la sección de pedidos en la que un administrador podrá ver y realizar búsquedas sobre los pedidos realizados por los clientes. Lógicamente la administración de una tienda virtual conlleva varias tareas como seguimiento de pedidos (en proceso, anulados, pagados,...), gestión de productos (alta, bajas y modificaciones tanto de categorías como de artículos), gestión del correo de clientes (contacto), gestión de cuentas de administración y muchas otras que por el momento no se han implementado dado el tamaño de la tarea. 1
  • 3. Estructura del Programa http://localhost/TVProjectV00/cliente/index.php PARTE CLIENTE H2M HOME CATALOGO CARRITO REGISTRO TRAMITAR PEDIDO CLIENTE (Validar Cliente) DATOS DE REALIZAR LISTAR PRODUCTOS INCREMENTAR ACCESO PEDIDO Añadir DECREMENTAR Compra PRODUCTOS DATOS DE ENVÍO ACTUALIZAR BÚSQUEDA SENCILLA PEDIDO BORRAR PRODUCTO Tramitar Pedido BÚSQUEDA AVANZADA CANCELAR PEDIDO VACIAR CARRITO ENVÍO DETALLE DEL PRODUCTO N CONFIRMAR S PEDIDO ¿Cliente Registrado? 2
  • 4. http://localhost/TVProjectV00/admon/admin.php PARTE SERVIDOR H2M VALIDAR ADMINISTRADOR (Login, Password) N ¿Existe usuario? S GESTIÓN DE PEDIDOS GESTIÓN DE CORREO GESTIÓN DE ARTÍCULOS GESTIÓN DE CLIENTES GESTIÓN DE CUENTAS (Sin implementar) (Sin implementar) (Sin implementar) (Sin implementar) Cerrar Sesión 3
  • 5. Arquitectura de la Aplicación sobre la base de una posible ruta de navegación A continuación se muestra un ejemplo de funcionamiento de la aplicación tomando como base una posible compra realizada por un cliente. La ruta descrita en el proceso de compra servirá para explicar los diagramas de estructura vistos anteriormente y describir la operativa de la aplicación a través de sus interfaces (guía de usuario). Proceso de Compra En la parte cliente de la aplicación un usuario podrá seleccionar uno o varios artículos de su interés de un catálogo, llenar su cesta de la compra (carrito) con dichos artículos y realizar un pedido con su compra. Es requisito para que el usuario pueda tramitar un pedido estar registrado en la base de datos de clientes donde, una vez finalizado el proceso de registro se le facilitará una cuenta de usuario (email,contraseña) que serán los datos de identificación que necesitará para tramitar los pedidos. Catálogo de Artículos Al catálogo de artículos se accede pinchando en la opción correspondiente del menú horizontal principal. Se compone de un menú vertical izquierdo que contiene un árbol de categorías de productos desglosadas a su vez en subcategorías. Por el momento sólo se ha implementado la sección [OCIO Y CULTURA] con las subcategorías <libros> y <música> puesto que el proceso de codificación de las restantes categorías sería similar. Para cada tipo de artículo, se muestra, en principio, un listado completo ordenado por subcategoría. El resultado se mostrará paginado, en este caso el tamaño de artículos por página es de 3. Cada ítem del listado contiene un pequeño resumen informativo sobre el artículo que podrá ampliarse pinchando en el vínculo <Leer más>. 4
  • 6. La página de detalle de un artículo ofrece una descripción más amplia del producto. Para agilizar la localización de un artículo(s) determinado(s) dentro de un tipo de producto, se han implementado unas herramientas de búsqueda que permiten filtrar los resultados por un cierto(s) criterio(s). Cata tipo de producto contará con un buscador genérico que buscará una cadena de texto en varios de los campos que describen al artículo y un buscador más específico que nos permitirá afinar más la búsqueda. Buscador Genérico (ejemplo para la subcategoría <Libros>) Buscará la cadena de texto (criterio) escrita en la caja de texto de búsqueda en varios de los campos descriptivos del <Libro> como isbn, título del libro, autor, editorial, descripción resumida. De esta forma las búsquedas serán más toscas (mayor cantidad de resultados) cuanta menos información tengamos del libro que queremos localizar puesto que la cadena de búsqueda será más ambigua, y más precisas a medida que el criterio de búsqueda sea más específico. Por ej. si como criterio de búsqueda ponemos el nombre de un autor, se mostrarán todos los libros disponibles de ese autor, pero si ponemos el isbn de un libro localizará concretamente el libro que se corresponda con ese isbn puesto que es único. Buscador Específico (ejemplo para la subcategoría <Libros>) En este caso podemos realizar búsquedas de libros por tema y subtema. 5
  • 7. Las dos listas, tema y subtema, están en correspondencia de forma que si en el primer combo seleccionamos un tema concreto (por ej. Informática), el segundo combo cargará los subtemas relacionados (Base de Datos, Programación), lo cual nos permitirá filtrar un conjunto de libros que sea de nuestro interés. Carrito (Cesta de la Compra) El carrito de la compra permite al cliente ir almacenando aquellos artículos que son de su interés en el proceso de compra (navegación y selección de productos en catálogo). Esta herramienta permite al cliente visualizar en todo momento un listado agrupado de los productos que desea comprar y realizar ciertas operaciones sobre ese listado: a) Incrementar o decrementar las unidades de un producto. b) Eliminar un artículo concreto. c) Vaciar la Cesta cancelando la lista temporal. Para cada actualización sobre el carrito se recalcularán las cantidades parciales y totales a pagar. Tramitación del Pedido Una vez que el cliente está satisfecho con los artículos que desea comprar puede comenzar a tramitar su pedido pulsando en el botón de comando <Tramitar Pedido> del carrito. En este punto pueden ocurrir dos cosas, o bien que el cliente ya esté registrado con lo cual para seguir adelante en el proceso de tramitación del pedido bastaría con identificarse mediante su cuenta de acceso (email y contraseña), o bien que se trate de un nuevo cliente que deberá registrarse antes de poder continuar con el proceso. 6
  • 8. En el proceso de registro el usuario tendrá con cumplimentar un formulario que consta de dos bloques principales, sus datos de acceso (email y contraseña) y los datos de facturación que incluye la identificación de la empresa o profesional y su dirección. Esta dirección será tomada por defecto como dirección de envío para los pedidos pero podrá ser modificada de forma independiente para cada pedido que realice este cliente. Una vez que el cliente está registrado puede continuar con la tramitación del pedido identificándose con los datos de acceso obtenidos. Tras la identificación el usuario accede a la información de su pedido compuesto en principio por los datos de compra junto con los datos de facturación. 7
  • 9. Los datos de facturación facilitados en el proceso de registro podrán ser ahora modificados si así lo desea el cliente. También se podrá seleccionar la forma de pago (contrareembolso o ingreso en cuenta) y el tipo de envío (correo o mensajería). De esta elección, junto con el peso del artículo dependerá el cálculo de los gastos de envío que se sumarán al coste del pedido. El cliente puede realizar tres operaciones sobre un pedido: a) Cancelarlo, con lo cual se anulará el pedido y su cesta de la compra. b) Actualizar Pedido, pudiendo modificar los datos de envío, forma de pago y tipo de envío. c) Aceptar Pedido, con lo cual el pedido se procesará y será guardado en la base de datos para su posterior seguimiento. Queda pendiente en este punto implementar el envío automático al email del cliente de un mensaje de correo con la información de su pedido, previa comprobación de existencias. 8
  • 10. Administración de la Tienda A la parte de administración de la tienda se accede por una URL distinta a la de la parte cliente ya que se ha preferido, por seguridad, no habilitar en la parte cliente ningún acceso a este área restringida, de forma que no haya conexión entre ambas zonas. Por tanto accedemos a la zona de gestión de la tienda mediante la URL: http://localhost/TVProjectV00/admon/admin.php Lo que nos sitúa en la página de control de acceso de usuarios administradores. Para que un usuario sea validado tendrá que estar dado de alta en la tabla <administradores> de la base de datos. Tras la identificación accedemos al Panel de Control de Gestión de la tienda, desde donde se podrán administrar distintos procesos como seguimiento de pedidos, correo de clientes, dar de alta-modificar-borrar productos, gestión de cuentas de clientes y de administradores de tienda. 9
  • 11. A cada área de gestión se accederá a través del botón de comando correspondiente situado en el menú vertical izquierdo. Tal como se comentó anteriormente, se ha implementado por el momento parte de la gestión de pedidos, el resto queda pendiente de implementación ya que requiere una enorme cantidad de tiempo. Implementación de la Base de Datos La figura muestra el modelo relacional de base de datos que da soporte a la tienda. Como se observa, por el momento está compuesta por seis tablas relacionadas (integridad referencial). La base de datos tendrá que ampliarse a medida que se dote de más funcionalidades a la tienda, pero por el momento se corresponde con la parte implementada de la aplicación. Explicación del modelo: Por un lado están las tablas que sirven de almacén para los productos de la tienda, <categorias> y <articulos>. Puesto que una categoría puede contener varios artículos su relación es de 1:n. El árbol de categorías y subcategorías se almacena en la tabla <categorias> considerando para cada nueva categoría la categoría padre (idCategoriaPadre) a la que pertenece. Respecto a la tabla de artículos se ha optado por el momento por una sola tabla para almacenar los distintos tipos de artículos. Esta tabla contiene unos campos que son comunes a todo tipo de artículo (nombre, descripción breve, descripción detallada, precio, imagen pequeña, imagen ampliada, peso, iva, existencias, conjunto, subconjunto, etc) y otros campos genéricos (itemText01,itemText02,itemMemo01,itemNum01,etc) que contendrán aquellos campos de cada tipo de artículo que sean distintos de los comunes. Respecto a los pedidos un cliente podrá realizar varios pedidos 1:n y un pedido a su vez contiene varias lineas de pedido (varios artículos). Por último la tabla de <administradores> contiene las cuentas de usuario de los gestores de la tienda virtual. 10
  • 12. Listado del programa (manual del desarrollador) A continuación se comentan los aspectos más interesantes de los ficheros del programa. La estructura de ficheros de la aplicación sigue un modelo similar al del libro de texto del curso. El conjunto de ficheros que dan funcionalidad a la parte cliente y de administración, están agrupados en sus respectivas carpetas <cliente> y <admon>. Las otras dos carpetas importantes <biblioteca> y <css> son de uso común a ambas zonas. Parte Cliente -> Carpeta <cliente> index.php Este fichero implementa la página <Home> o de inicio de la aplicación. Los aspectos más interesantes son por un lado la visualización de la fecha y hora que se actualiza automáticamente sin necesidad de refrescar la página. El código javascript está implementado en el fichero <fecha-hora.js> (archivo encontrado en internet) donde básicamente el refresco de hora se realiza mediante la función setTiemout <setTimeout("horaActual()",1000)>. Por otro lado se implementa el menú de navegación principal de la aplicación. Se trata de un menú horizontal implementado con una lista html a la que se le ha aplicado estilos css para que la lista tome aspecto horizontal y cada ítem del menú cambie de color al situar el ratón encima (ver estilos para menú de navegación horizontal del archivo <estilos.css>). 11
  • 13. index.php catalogo.php Este fichero implementa el catálogo de artículos con sus distintos tipos de productos. Como aspectos importantes está por una parte el árbol de categorías y subcategorías de artículos cuya estructura se muestra a continuación: 12
  • 14. La implementación de esta estructura se realiza mediante una función recursiva. Partiendo de la categoría raíz (0), la función va recorriendo y entrando de forma recursiva en cada nivel y subnivel del árbol. Por otro lado la distinción entre los distintos tipos de artículos se realiza mediante una estructura de tipo switch-case switch($_REQUEST["idCategoria"]), de forma que dependiendo de la categoría que se haya pasado como parámetro ejecutará el código correspondiente. Por el momento sólo se han implementado los casos para las subcategorías 45 (libros) y 46 (discos) de la categoría <OCIO Y CULTTURA>, siendo el proceso repetitivo para las demás categorías. La operativa para cada tipo de artículo se implementa en su clase correspondiente con sus propiedades y métodos. Por tanto la funcionalidad para la categoría libros estará basada en un objeto de la clase libro, los discos en un objeto de la clase disco y así sucesivamente. Si tomamos como ejemplo el tipo de artículos <libros> (los procesos son similares para cualquier otro tipo de producto), tenemos que en el catálogo se dan ciertos tipos de operaciones comunes: a) Si no existe ningún tipo de filtrado, se mostrará un listado completo ordenado primero por tema y luego por subtema. El resultado aparecerá paginado con un tamaño de tres artículos por página (el tamaño de paginación es configurable). La paginación se basa en la cláusula LIMIT utilizada para restringir el número de registros retornados por el comando SELECT tal como se implementa en el método siguiente de <class libro>. 13
  • 15. b) Existen dos tipos de filtros, un buscador genérico y un buscador avanzado que para el caso de <libros> se implementan en el código siguiente: Buscador genérico: Corresponde a un método de <class libro> y básicamente busca un patrón (cadena de texto) en varios campos del artículo de la categoría correspondiente. Buscador Avanzado: Para el caso de <libros> el buscador avanzado se basa en un par de combos correlacionados de forma que el tema seleccionado en el primer combo carga las materias relacionadas en el segundo combo. Los combos se cargan mediante los métodos de <class libro>, getTemas() y getMaterias($Tema). Una vez que seleccionamos tema y subtema en los combos, el filtrado se realiza a través del método de <class libro> siguiente: 14
  • 17. libro_descripcion.php – disco_descripcion.php – etc... Los ficheros de descripción de un artículo determinado muestran un zoom o descripción más detallada de un artículo concreto seleccionado de un listado. Los listados de productos muestran de forma resumida las características más importantes de un artículo, sin embargo podremos ampliar esta información mediante los ficheros objeto_descripción.php que ayudarán al cliente a decidir de forma más exacta si le interesa o no el producto antes de añadirlo a la cesta de la compra. 16
  • 18. libro_descripcion.php Como se observa, básicamente y para el caso de <libro> (sería similar para cualquier otro tipo de objeto), se recupera mediante el método leerLibroParam($idLibro) de <class libro> el libro del que queremos hacer un zoom y lo mostramos mediante la función mostrarLibroZoom($arrayLibros). 17
  • 19. carrito.php El carrito o cesta de la compra basa su operativa en un objeto de la clase <class carrito>. En este caso se ha optado por implementar el carrito de forma distinta a la expuesta en el libro de texto, ya que en lugar de utilizar una clase para cada tipo de artículo he preferido utilizar una estructura de arrays tal como se muestra a continuación. Cursor ($num_articulos) idArticulo (array) 0 1 2 ------------------------------ n nombre (array) ------------------------------ 0 1 2 n precioUnidad(array) 0 1 2 ------------------------------ n ------------------------------------------------------------ ------------------------------------------------------------ 0 1 2 ------------------------------ n Articulo1 ArticuloN Articulo2 De esta forma se crea un array para cada campo del artículo en el carrito. Cada vez que se inserta un nuevo artículo se desplaza el cursor una posición en el conjunto de arrays. La clase carrito contiene métodos que permiten: a) Añadir un nuevo artículo. Cada vez que se añade un artículo es necesario llamar a los métodos para recalcular los totales, tanto parciales (de línea) como finales. b) Eliminar un nuevo artículo: Hay que destacar que el borrado de un artículo es un borrado lógico (se marca con 0 el objeto eliminado) y por tanto no se borra físicamente dicho producto. c) Como consecuencia de lo anterior se necesita un método que recuente la cantidad de artículos real, discriminando aquellos marcados con 0. 18
  • 21. Otro aspecto muy importante respecto al carrito, es que el objeto de la clase carrito que se crea se almacena en una variable de sesión. Esto nos permite disponer del carrito desde cualquier parte de la aplicación, tanto para seguir añadiendo artículos desde cualquier parte del catálogo, como posteriormente para añadir a los datos del cliente cuando se realiza un pedido. La variable de sesión carrito se destruirá cuando el usuario vacía su carrito o al aceptar un pedido ya que los datos se vuelcan a la base de datos. 20
  • 23. registroCliente.php Como se comentó en la descripción general del programa, para que un cliente pueda tramitar un pedido, es necesario que esté dado de alta en la base de datos de clientes. En este proceso el usuario o empresa facilita unos datos de acceso y los datos de facturación o dirección de envío. Finalizado el proceso de alta el cliente obtiene una cuenta de usuario (email, password) que le permitirá por un lado identificarse y por otro que se carguen sus datos por defecto en la tramitación de un pedido. El fichero consta de un formulario dividido en dos secciones, datos de acceso y datos de facturación, que un cliente particular o una empresa han de cumplimentar. Otro aspecto a destacar es la validación de datos insertados en el formulario. Esta validación se realiza mediante JavaScript, comprobando que se rellenan los campos obligatorios, que el email tiene una sintaxis mínimamente correcta, que la clave y su confirmación son coincidentes, etc. Si todo es correcto se envían los datos del formulario y a través del método addCliente($clienteValues) de <class cliente>, se añade el nuevo cliente a la base de datos mediante una sentencia INSERT. 22
  • 25. 24
  • 26. 25
  • 27. tramitarPedidoLogin.php En este fichero es donde se identifica el cliente (1ª fase del proceso de tramitación) para poder tramitar su pedido. Si no está registrado (cliente nuevo) se le facilita un enlace para acceder a la página de registro. Se trata de un formulario de autenticación que valida los datos de entrada. Se comprueba que no se deje ningún campo en blanco, que la sintaxis del email sea mínimamente correcta, que exista el usuario y que su clave coincida con la almecenada en la base de datos. Tras la validación del formulario se mostrará un listado con los errores en caso de existir o bien si todo es correcto se pasará a la siguiente fase de la tramitación. Un aspecto importante a tener en cuenta es que si el cliente se valida con éxito se crea una variable de sesión $_SESSION["autenticado"]= "SI". Esta variable se usa para evitar que un usuario pueda acceder por URL a páginas que requieren que previamente se haya identificado. //COMPRUEBA QUE EL USUARIO ESTA AUTENTICADO======================================= if ((!isset($_SESSION["autenticado"])) or ($_SESSION["autenticado"] != "SI")) { header ("Location: index.php"); } 26
  • 29. finalizarPedido.php – grabarPedido.php En estos fichero es donde se crea el pedido anexando los datos de la cesta de la compra a los datos del cliente. Por defecto se cargan los datos de facturación que el cliente facilitó cuando se registró. El cliente tiene la posibilidad de actualizar los datos de envío para el pedido en curso, seleccionar el tipo de envío y la forma de pago. En función del tipo de envío y peso del artículo se calcularán los gastos de envío mediante un algoritmo. El pedido se crea basándose en un objeto de <class pedido> y puesto que existe integridad referencial en la base de datos entre las tablas <pedidos> y <lineaPedido>, es necesario insertar primero los datos de pedido y luego los datos del carrito que conforman las lineas de pedido. 28
  • 31. 30
  • 32. 31
  • 34. 33
  • 35. Parte de Administración -> Carpeta <admon> admin.php En este fichero se valida que el usuario administrador que pretende acceder a la zona de gestión de la tienda esté dado de alta en la base de datos en la tabla de administradores (login,passwd). Si la autenticación es correcta, se crea y activa la variable de sesión $_SESSION["auth_admin"]= 1. Esta variable se utilizará posteriormente en todas las demás páginas de la zona de administración para evitar accesos indebidos por URL a páginas que requieren de una previa identificación. //COMPRUEBA QUE EL USUARIO ADMINISTRADOR ESTA AUTENTICADO if ((!isset($_SESSION["auth_admin"])) or ($_SESSION["auth_admin"] != 1)) { header ("Location: admin.php"); } 34
  • 36. admin.php 35
  • 37. 36
  • 38. admin_ControlPanel.php Se ha implementado el esqueleto del Panel de Control desde donde se gestionarán todas las operaciones de administración de la tienda (Correo Entrante, Clientes, Administradores, Seguimiento de Pedidos, Gestión de Artículos,...). admin_ControlPanel.php 37
  • 39. 38
  • 40. 39
  • 41. Se utiliza una estructura de tipo switch-case (switch($_SESSION['OPCION'])), para que se interprete el código de la operación de gestión seleccionada en la botonera del menú izquierdo. La sección de pedidos está implementada en parte, y por el momento se pueden filtrar pedidos por empresa o profesional, restringiendo además por el estado del pedido (En Proceso, Anulado, Pagado, Cualquier Estado). 40
  • 42. Ficheros de Biblioteca y configuración-> Carpeta <biblioteca> Esta carpeta contiene el fichero <clases.php> que agrupa todas las clases utilizadas en la aplicación a excepción de la clase carrito que se implementa en un fichero aparte. Las clases libro, disco, cliente, pedido, administrador, contienen métodos muy intuitivos y prácticamente su funcionalidad se autoexplica por el nombre del método, por lo que no considero necesario describir cada uno de ellos. Una clase especial es <class conexion> que nos permite conectarnos a la base de datos de la tienda facilitando los parámetros: servidor, base de datos, usuario y contraseña. Esta clase nos permite crear en cualquier momento y en cualquier parte de la aplicación un objeto de la misma para interactuar con la base de datos. La clase además implementa el método, public function consulta($consulta), que nos permite lanzar una consulta SQL a la base de datos devolviendo el resultado de la misma. El fichero de funciones <funciones.php> agrupa una serie de funciones donde la mayor parte de ellas son funciones de interfaz que sirven para mostrar resultados (mostrar libros, mostrar discos, mostrar el detalle de un libro o de un disco, visualizar el carrito, etc). También contiene algunas funciones de validación y las funciones para crear el árbol de categorías y para calcular los gastos de envío de un pedido en función del peso del artículo y el tipo de envío seleccionado. El fichero <configurador.php> contiene la definición de los parámetros de configuración de la aplicación de forma centralizada. Por el momento están definidas las rutas a las carpetas de imágenes y el tamaño de página utilizado por el paginador de artículos. <?php //Ruta a la imágines de la tienda virtual DEFINE("PATHIMGTV","/TVProjectV00/imagenes/imgTV/"); DEFINE("PATHIMGAPP","/TVProjectV00/imagenes/imgAPP/"); //Bloque de páginas por página (Paginador) DEFINE("TAMANO_PAGINA",3); ?> 41
  • 44. 43
  • 45. 44
  • 46. 45
  • 47. 46
  • 49. 48
  • 50. 49
  • 51. 50
  • 52. 51
  • 53. 52
  • 55. 54
  • 56. 55
  • 57. 56
  • 58. 57
  • 59. Herramientas utilizadas para el desarrollo del programa Entorno Completo de Desarrollo: XAMPP para Windows Version 1.6.8 Editor HTML: Macromedia DREAMWEAVER 8 PHP Version 5.2.6 Gestor Web de Bases de Datos: phpMyAdmin - 2.11.9.2 Servidor Web: Apache/2.2.9 (Win32) Servidor de Base de Datos (MYSQL): Versión 5.0.67-community-nt Aplicación para diseño de Bases de Datos: DB Designer 4 Conclusiones, Limitaciones del Programa y Reflexiones finales Las limitaciones del programa se deben sobre todo a la falta de tiempo para el desarrollo completo del mismo. A continuación se enumeran algunos aspectos a completar en un futuro: 1) Control automático de existencias de artículos. 2) Crear una sección de productos en oferta. 3) Permitir comunicación entre clientes y responsables de la tienda a través de mensajes de correo. 4) Mejora de la gestión de excepciones y errores. 5) Envío automático de email al cliente con información del pedido que ha realizado. 6) Mejorar los aspectos de seguridad creando usuarios mysql con privilegios limitados. 7) Implementar la forma de pago mediante PayPal. 8) Completar la parte de Administración de la tienda. 9) Implementar SSL. 10) Y otros muchos aspectos,... Respecto al curso el material del mismo es muy interesante, y en la parte negativa resaltar la poca actividad que ha tenido el foro (falta de dinamización). 58