Вы находитесь на странице: 1из 97

PHP, MySQL y E-COMMERCE

UNIVERSIDAD TECNOLÓGICA NACIONAL


Facultad Regional Córdoba

Secretaria de Extensión Universitaria

Área Tecnológica de Educación Virtual

Coordinador General de Educación Virtual: Magíster Leandro D. Torres

Curso:
PHP, MySQL y E-Commerce
Módulo:
“Administración de la tienda virtual por internet”
Tutor: Ing. Oscar R. Espeche

Autor: Ing. Oscar R. Espeche 1


PHP, MySQL y E-COMMERCE
Administración de la tienda virtual por Internet
7-1 Base de datos y tablas
7-2 El privilegio de administración
7-3 Administración de las Categorías
7-4 Administración de los productos
7-5 Administración de los clientes
7-6 Administración de órdenes
7-7 Administración de proveedores
7-8 Administración de transporte
7-9 Administración de impuestos

Introducción
En esta unidad veremos como podemos administrar a través del protocolo http, las tablas de los objetos de la
tienda virtual.

En primer lugar debemos planear nuestra estructura de almacenamiento de datos de los productos, acorde a
como los productos deben ser mostrados en un catálogo, de tal manera que los clientes de nuestro sitio
puedan navegar por dicha estructura fácilmente para descubrir los productos que finalmente irán a parar en
la cesta de compras.

También necesitamos tablas para almacenar los datos de los usuarios, proveedores, tipos de transporte, etc.

El principal desafío que deberemos resolver es lograr un esquema de datos conformado por tablas
relacionadas entre si que permitan el mantenimiento en una forma totalmente escalable. En otras palabras,
debe ser práctico para cualquier cantidad de productos, departamentos, usuarios et, que necesitemos
administrar.

Autor: Ing. Oscar R. Espeche 2


PHP, MySQL y E-COMMERCE
7-1 Base de datos y tablas
En la aplicación necesitamos trabajar con varias tablas en nuestra base de datos e-shop. A continuación
vemos dichas tablas que fueron usadas en el transcurso de la explicación del sitio de comercio electrónico.

Categorías

Productos

Autor: Ing. Oscar R. Espeche 3


PHP, MySQL y E-COMMERCE
Usuarios

Ordenes

Autor: Ing. Oscar R. Espeche 4


PHP, MySQL y E-COMMERCE
Proveedores

Transporte

Autor: Ing. Oscar R. Espeche 5


PHP, MySQL y E-COMMERCE
Impuestos

7.2 El privilegio de administración


Para que un usuario pueda administrar en forma remota el contenido del sitio a través de protocolo http,
necesita tener privilegio de administrador.

Este privilegio se registra en la tabla de usuarios en el campo “priv”. Cuando el usuario accede a la sesión
de login, el código de dicha página se fija si dicho usuario tiene registrado el privilegio de administrador. Si
es así le permite el acceso a la página de administración mediante un link que aparece en el encabezamiento
de la página a la izquierda de la pantalla.

El código que habilita el acceso a la página de administración se encuentra en el archivo


templates/header.php.

Autor: Ing. Oscar R. Espeche 6


PHP, MySQL y E-COMMERCE si es un Admin administrar el sitio **********************-->
<!--***********************
<? if (tiene_priv("admin")) { ?>
</td>
</tr>

<tr><td bgcolor="#C70D11" colspan=1><hr size=1></td></tr>

<tr><td nowrap bgcolor="#C70D11" class=normal>


<li> <a href="<?=$CFG->wwwroot?>/admin/">Administrar el Sitio</a>
<? } ?>
<!--**********************************************************************-->
<? } else { ?>
<li> <a href="<?=$CFG->wwwroot?>/login.php">Login</a>
<li> <a href="<?=$CFG->wwwroot?>/usuarios/registrar.php">Crear cuenta</a>
<? } ?>

</td>
</tr>

Desde aquí va hacia la página admin/index.php que le permitirá acceder a las tablas del sitio, para su
administración.

function tiene_priv($priv) {

/* retorna true si el usuario tiene privilegios $priv */

global $SESSION;
return $SESSION["usuario"]["priv"] == $priv;
}

Autor: Ing. Oscar R. Espeche 7


PHP, MySQL y E-COMMERCE
admin./index.php

<?
/********** HOME PAGE de la Administracion de E-SHOP******************************/

include("../aplicacion.php");/********** incluye aplicacion.php************/


requiere_login();/*******verifica que el usuario este logueado*****************/
requiere_priv("admin");/*********verifica que el usuario tenga privilegio de "admin"**/

$titulo = "Administraccion de ADMINNET/E-SHOP";


include("templates/header.php");/************* incluye HEADER.PHP de Administracion*****/
?>
<p class=normal>
Bienvenido al Administrador de ADMINNET/E-SHOP!!

<?
include("templates/pie.php");/************* incluye PIE.PHP de Administracion*****/
?>

Vemos la función requiere_priv:

function requiere_priv($priv) {

/* chequea para ver si el usuario tiene privilegios $priv. si no los tiene


envia un mesaje y se detiene*/

global $CFG, $SESSION;


if (! $SESSION["usuario"]["priv"] == $priv) {
include("$CFG->templatedir/insuficientes_privilegios.php");
die;
}
}

La página que le indica al visitante que no tiene privilegios de administrador, cuando trata de entrar sin tener
los privilegios correspondientes es la siguiente.

Autor: Ing. Oscar R. Espeche 8


PHP, MySQL y E-COMMERCE

<html>
<head>
<title>Privilegios Insuficientes</title>
</head>

<style>
h1 { font-family: Arial, sans-serif; font-size: 14pt; font-weight: bold; color:
#ff0000; }
</style>

<body bgcolor=#ffffff link=#0000ff vlink=#000099 alink=#ff0000>


<h1 align=center>Privilegios Insuficientes</h1>
</body>
</html>

Finalmente, si tiene privilegios de administrador incluye el archivo template/header.php de la carpeta de


administración y al final incluye la página templates/pie.php de la carpeta de administración.

A continuación vemos la página templates/header.php donde se incluyen los links a las páginas de
administración de las bases de datos de los objetos administrables de la tienda virtual.

Autor: Ing. Oscar R. Espeche 9


PHP, MySQL y E-COMMERCE
templates/header.php

<html>
<head>
<title><? pv($titulo) ?></title>
</head>

<style>
h1 { font-family: Arial, sans-serif; font-size: 14pt; font-weight: bold; color: #006699; }
h2 { font-family: Arial, sans-serif; font-size: 12pt; font-weight: bold; }
th { font-family: Arial, sans-serif; font-size: 10pt; font-weight: bold; text-align: center; }
.h1 { font-family: Arial, sans-serif; font-size: 14pt; font-weight: bold; }
.h2 { font-family: Arial, sans-serif; font-size: 12pt; font-weight: bold; }
.label { font-family: Arial, sans-serif; font-size: 10pt; font-weight: bold; }
.normal { font-family: Arial, sans-serif; font-size: 10pt; }
</style>

<body bgcolor="yellow" link=#0000ff vlink=#000099 alink=#ff0000>

<!--*******franja superior con el titulo***************-->


<table width=100%>
<tr>
<td class=h1><? pv($DOC_TITLE) ?></td>
<td align=right class=normal>
<? p($SESSION["usuario"]["nombre"] . " " . $SESSION["usuario"]["apellido"]) ?>
| <a class=normal href="<?=$CFG->wwwroot?>/logout.php">Logout</a></td>
</tr>
</table>

<!--******franja roja******-->
<table width=100% cellspacing=0><tr><td bgcolor="#C70D11">&nbsp;</td></tr></table>

<!--***************tabla que incluye el cuerpo de la pagina y se cierra con el pie**-->


<table cellspacing=0 cellpadding=3 border = 0>
<tr valign=top>
<td class=normal bgcolor="#C70D11" nowrap>

<!--**********tabla del menu de la parte superior izquierda *******-->


<table cellspacing=0 cellpadding=3 border = 0>
<tr valign=top>
<td class=normal bgcolor="#C70D11" nowrap>
<li> <a href="index.php">ADMINNET/E-SHOP/Admin</a>
<li> <a href="<?=$CFG->wwwroot?>">ADMINNET/E-SHOP</a></td>
</tr>

Autor: Ing. Oscar R. Espeche 10


PHP, MySQL y E-COMMERCE

<tr>
<td><hr size=1></td>
</tr>
</table>

<!--*******tabla de la columna izquierda ****Links a las páginas de administración****>


<table>
<tr>
<td class=normal bgcolor="#C70D11" nowrap>
<h3><li> <a href="categorias.php">Categorías</a><p>
<li> <a href="productos.php">Productos</a><p>
<li> <a href="usuarios.php">Clientes</a><p>
<li> <a href="ordenes.php">Ordenes</a><p>
<li> <a href="proveedores.php">Proveedores</a><p>
<li> <a href="transportes.php">Transporte</a><p>
<li> <a href="impuestos.php">Impuestos</a><p>
<li> <a href="vidriera.php">Imágenes</a>
</h3></td>
</tr>
</table>

<td width=15 nowrap></td>


<td><!--**campo que contiene al cuerpo de la pagina principal de Administracion *-->

La imagen que presenta dicha página es la siguiente.

Autor: Ing. Oscar R. Espeche 11


PHP, MySQL y E-COMMERCE

A continuación veremos las páginas de los ítems que se listan en la imagen de la página principal de
administración.

Autor: Ing. Oscar R. Espeche 12


PHP, MySQL y E-COMMERCE
7-3 Administración de las Categorías
La página principal categorías.php permite la administración de las categorías o departamentos de la tienda
virtual. Estos departamentos están organizados en una forma jerárquica mediante una estructura de árbol
invertido. La imagen que permite visualizar la página principal de categorías es la siguiente

Esta página permite al administrador realizar las tareas básicas de:

• Listado
• Inserción
• Modificación
• Eliminación

de los registros de la tabla categorías de la base e-shop.

A continuación vemos el contenido de la página categorias.php.

Autor: Ing. Oscar R. Espeche 13


PHP, MySQL y E-COMMERCE
categorias.php

<?
/***administra las categorías*************************************************/

include("../aplicacion.php");/********** incluye aplicación ******/


requiere_login();
requiere_priv("admin");/*********verifica privilegios de Admin ***************/

$titulo = "Administración de Categorías";


include("templates/header.php");/* incluye template/HEADER.PHP de Admin ******/

switch (nvl($modo)) {
case "agregar" :/********* formulario para agregar una categoría*********/
nueva_cat_form($id);
break;

case "editar" :/*******formulario para modificar una categoría ********/


editar_cat_form($id);
break;

case "eliminar" :/*********eliminar una categoría ************************/


eliminar_cat($id);
listar_categorias();
break;

case "insertar" :/*******agregar una categoría ***********************/


insertar_categorias($id, $HTTP_POST_VARS);
listar_categorias();
break;

case "actualizar" :/***********modificar una categoría ******************/


actualizar_categorias($id, $HTTP_POST_VARS);
listar_categorias();
break;

Autor: Ing. Oscar R. Espeche 14


PHP, MySQL y E-COMMERCE

default :/************listar las categorias actuales *****************/


listar_categorias();
break;
}

include("templates/pie.php");/********* incluye templates/PIE.PHP de Admin ***/

/****************************************************************************
* FUNCIONES
***************************************************************************/

function nueva_cat_form($id) {

/* muestra un formulario en blanco para agregar una categoria ***************/

global $CFG, $ME;

/* establece valores **********************************************/


$frm["padre"] = array($id);
$frm["modo"] = "insertar";
$frm["nombre"] = "";
$frm["descripcion"] = "";
$frm["rotulo"] = "Agregar Sub-categoria";

/* Construye el arbol de categorias***********************************/


arbol_categorias($arbol, $frm["padre"]);

/***incluye CATEGORIA_FORM.PHP****************************************/
include("templates/categoria_form.php");
}

Autor: Ing. Oscar R. Espeche 15


PHP, MySQL y E-COMMERCE

function editar_cat_form($id) {

/* muestra el formulario con los valores por defecto para actualizarlos*******/

global $CFG, $ME;

/* obtiene los valores por defecto */

$qid = db_query("
SELECT nombre, descripcion, padre_id
FROM categorias
WHERE id = $id
");
$frm = db_fetch_array($qid);

/* establece los valores iniciales para cargar el formulario*/

$frm["padre"] = array($frm["padre_id"]);
$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar los cambios";

/* construye el arbol de categorias */

arbol_categorias($arbol, $frm["padre"]);

include("templates/categoria_form.php");/**incluye CATEGORIA_FORM.PHP******/
}

function eliminar_cat($id) {

/* elimina la categoria especificada por $id y coloca a los productos y categorias


huerfanas en la categoria superior. Esto deberia hacerse con transacciones */

global $CFG, $ME;

/* hace un join de CATEGORIAS con ella misma para obtener informacion


***de la categoria y de la cat. padre************************************/

$qid = db_query("
SELECT cat.nombre , cat.padre_id , padre.nombre AS padre
FROM categorias cat, categorias padre
WHERE padre.id = cat.padre_id
AND cat.id = $id
");
$cat = db_fetch_object($qid);

Autor: Ing. Oscar R. Espeche 16


PHP, MySQL y E-COMMERCE

/* elimina esta categoria***********************************************/

$qid = db_query("
DELETE FROM categorias
WHERE id = $id
");

/* re-asigna los productos de esta categoria a la categoria padre*******/

$qid = db_query("
UPDATE productos_categorias
SET categoria_id = $cat->padre_id
WHERE categoria_id = $id
");

/* re-asigna las sub-categorias a la categoria padre *******************/

$qid = db_query("
UPDATE categorias
SET padre_id = $cat->padre_id
WHERE padre_id = $id
");

include("templates/categoria_eliminada.php");/*incluye CATEGORIA_ELIMUNADA.PHP**/
}

function insertar_categorias($id, $frm) {

/* agrega una nueva categoria a las categorias padres definidas en el formulario


anterior .Los valores estan en $frm*******/

global $CFG, $ME;

$qid = db_query("
INSERT INTO categorias (padre_id, nombre, descripcion)
VALUES ('$frm[padre]', '$frm[nombre]', '$frm[descripcion]')
");
}

Autor: Ing. Oscar R. Espeche 17


PHP, MySQL y E-COMMERCE

function actualizar_categorias($id, $frm) {

/* actualiza una categoria con los valores en $frm */

global $CFG, $ME;

$qid = db_query("
UPDATE categorias SET
padre_id = '$frm[padre]'
,nombre = '$frm[nombre]'
,descripcion = '$frm[descripcion]'
WHERE id = $id
");
}

function listar_categorias() {

/* lista todas las categorías. Hace un join de la tabla CATEGORIAS con ella misma en
base a cat.padre_id y padre.id ****************************************/

global $CFG, $ME;

$qid = db_query("/** consulta por las categorías en la tabla CATEGORIAS**/


SELECT cat.id, cat.nombre, cat.descripcion, padre.nombre AS padre
FROM categorias cat, categorias padre
WHERE padre.id = cat.padre_id/*join de categorias con ella misma*/
AND cat.id > 0
");

include("templates/listar_categorias.php");/*incluye LISTAR_CATEGORIAS.PHP*/
}
?>

Listar las categorías


La función listar_categorias() obtiene los datos de las categorías de la tabla del mismo nombre y luego
incluye el archivo templates/listar_categorias.php que permite visualizar la lista de las categorías como se
muestra en el siguiente código.

Autor: Ing. Oscar R. Espeche 18


PHP, MySQL y E-COMMERCE
templates/listar_categorias

<!--*****************lista las categorías de E-SHOP ***********************-->


<!--*********links para agregar, editar y eliminar categorías de E-SHOP ***-->

<!--*********agrega una categoría en la raíz por defecto*******************-->


<p class=normal>
<a href="<?=$ME?>?modo=agregar&id=0"> Agregar categoría</a>
</p>

<!--*****************tabla del listado*************************************-->


<table border=0 cellpagregaring=3>
<tr>
<th>Acción</th>
<th>Categoría</th>
<th>Contenedor</th>
<th>Descripción</th>
</tr>

<!--*****************iteración sobre la tabla de CATEGORIAS **************-->


<? while ($r = db_fetch_object($qid)) { ?>
<tr>
<td class=normal><!--*************ACCION: C-P-X ******************-->
<a title="Agregar una sub-categoria bajo <? pv($r->nombre) ?>"
href="<?=$ME?>?modo=agregar&id=<? pv($r->id) ?>">C</a>
&nbsp;
<a title="Agregar un producto bajo <? pv($r->nombre) ?>"
href="productos.php?modo=agregar
&categoria_id=<? pv($r->id) ?>">P</a>
&nbsp;
<a title="Eliminar <? pv($r->nombre) ?>"
href="<?=$ME?>?modo=eliminar
&id=<? pv($r->id) ?>">X</a>
</td>

<td class=normal><!--***************editar************************-->
<a title="editar esta categoria"
href="<?=$ME?>?modo=editar
&id=<? pv($r->id) ?>">
<? pv($r->nombre) ?></a>
</td>
<td class=normal><!--***********CAT. PADRE************************-->
<? pv($r->padre) ?>
</td>

Autor: Ing. Oscar R. Espeche 19


PHP, MySQL y E-COMMERCE

<td class=normal><!--***********DESCRIPCION***********************-->
<? pv($r->descripcion) ?>
</td>
</tr>
<? } ?>

</table>

Agregar categorías
La función nueva_cat_form($id) de la página categorías.php permite agregar una categoría. La variable $id
se define con el valor 0 para indicar que la categoría se incluye por defecto en la raíz del árbol de categorías.
Sin embargo cuando se edita el formulario con los atributos de la categoría, se puede cambiar el nombre del
contenedor donde se incluirá definitivamente.

function
nueva_cat_form($id) {

/* muestra un formulario
en blanco para agregar
una categoría
***************/

global $CFG,
$ME;

La función árbol (categorias)

Esta función permite crear la estructura jerárquica de las categorías haciendo uso de la posibilidad de
recursión del lenguaje php.

Vemos a continuación el contenido de la tabla categorías para entender bien la relación entre cada categoría
y su categoría contenedora.

Autor: Ing. Oscar R. Espeche 20


PHP, MySQL y E-COMMERCE

Vemos que cada categoría tiene definido su contenedor padre menos la categoría raíz que se identifica con
id=0 y padre_id =0.

A continuación mostramos la función árbol_categorias() que permite generar una cadena de caracteres en la
variable $arbol, que se usa para contener las opciones de la marca SELECT del formulario HTML.

function arbol_categorias(&$arbol, &$select, $padre=0, $indent="") {

/* En forma recursiva se explora la tabla CATEGORIAS buscando las categorías hijas


**para generar las opciones de select en forma de árbol ****************************/

$qid = db_query("SELECT id, nombre FROM categorias WHERE padre_id = $padre");

while ($cat = db_fetch_object($qid)) {


$sel = in_array($cat->id, $select) ? "selected" : "";
$arbol .= "<option value=\"" . ov($cat->id) . "\" $sel> $indent" . ov($cat->nombre);
if ($cat->id != $padre) {/** si no es la raíz **/
arbol_categorias($arbol, $select, $cat->id, $indent ."&nbsp;&nbsp;&nbsp;");
}
}

Finalmente, la página templates/categoria_form.php muestra el formulario para editar la nueva categoría,


haciendo uso de las variables predefinidas, donde $arbol da forma al árbol de categoría que se muestra en
las opciones de SELECT.

Autor: Ing. Oscar R. Espeche 21


PHP, MySQL y E-COMMERCE

templates/categoria_form.php

La ejecución de este código genera la siguiente pantalla para editar el formulario de la nueva categoría.

<form method="post"
action="<?=$ME?>">
<input type="hidden"
name="modo"
value="<?=$frm["modo"]
?>">
<input type="hidden"
name="id"
value="<?=pv($id)?>">
<table>

Autor: Ing. Oscar R. Espeche 22


PHP, MySQL y E-COMMERCE

Una vez llenado el formulario, sus datos son enviados a categorias.php con la variable modo=”insertar”.

En la página categorias.php se ejecuta la siguiente opción de la función switch():

case "insertar" ://*******agregar una categoria ***********************


insertar_categorias($id, $HTTP_POST_VARS);
listar_categorias();
break;

La función insertar_categorias() permite grabar la nueva categoría y la función listar_categorias muestra en


la pantalla la lista de todas las categorías como ya vimos.

Autor: Ing. Oscar R. Espeche 23


PHP, MySQL y E-COMMERCE

function insertar_categorias($id, $frm) {

/* agrega una nueva categoría a las categorías padres definidas en el formulario anterior. Los valores
están en $frm*******/

global $CFG, $ME;

$qid = db_query("
INSERT INTO categorias (padre_id, nombre, descripcion)
VALUES ('$frm[padre]', '$frm[nombre]', '$frm[descripcion]')
");
}

Autor: Ing. Oscar R. Espeche 24


PHP, MySQL y E-COMMERCE
Editar categorías
Haciendo clic en el nombre de la categoría, enviamos a la página categorias.php la variable modo=editar y
la variable id=$id del registro que se desea editar.

En la página categorias.php se ejecuta la siguiente opción de la función swith():

case "editar" :/*******formulario para modificar una categoria ********/


editar_cat_form($id);
break;

La función editar_cat_form($id) se encarga de definir las variables que serán utilizadas en el formulario que
se mostrará en pantalla para editar la categoría.

function editar_cat_form($id) {

/* muestra el formulario con los valores por defecto para actualizarlos*******/

global $CFG, $ME;

/* obtiene los valores por defecto */

$qid = db_query("
SELECT nombre, descripcion, padre_id
FROM categorias
WHERE id = $id
");
$frm = db_fetch_array($qid);

/* establece los valores iniciales para cargar el formulario*/

$frm["padre"] = array($frm["padre_id"]);
$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar los cambios";

/* construye el arbol de categorias */

arbol_categorias($arbol, $frm["padre"]);

include("templates/categoria_form.php");/**incluye CATEGORIA_FORM.PHP******/
}

Autor: Ing. Oscar R. Espeche 25


PHP, MySQL y E-COMMERCE
Vemos que consiste fundamentalmente en obtener datos de la tabla para la categoría que se quiere editar y
usar estos datos como valores iniciales del formulario templates/categoria_form.php que se usa para
introducir los cambios.

El formulario es el mismo que usamos para agregar una categoría, salvo que se define la variable
$frm["modo"] = "actualizar" para diferenciarlo.

Esta variable lo lleva a la opción “actualizar” de la función switch() como vemos.

case "actualizar" ://***********modificar una categoria ******************


actualizar_categorias($id, $HTTP_POST_VARS);
listar_categorias();
break;

function actualizar_categorias($id, $frm) {

/* actualiza una categoria con los valores en $frm */

global $CFG, $ME;

$qid = db_query("
UPDATE categorias SET
padre_id = '$frm[padre]'
,nombre = '$frm[nombre]'
,descripcion = '$frm[descripcion]'
WHERE id = $id
");
}

Autor: Ing. Oscar R. Espeche 26


PHP, MySQL y E-COMMERCE
Eliminar categorías
Al hacer un clic en la letra X que se indica como acción en el registro de la categoría seleccionada, se envía
a la página categorias.php la variable modo=eliminar y la variable id=$id de la categoría que se quiere
eliminar.

En la página categorias.php se ejecuta la siguiente opción de la función swith():

case "eliminar" :/*********eliminar una categoria ************************/


eliminar_cat($id);
listar_categorias();
break;

La función eliminar_cat() se encarga de borrar la categoría de la tabla categorias.

Autor: Ing. Oscar R. Espeche 27


PHP, MySQL y E-COMMERCE

function eliminar_cat($id) {

/* Elimina la categoría especificada por $id y coloca a los productos y categorías huérfanas en la
categoría superior. Esto debería hacerse con transacciones */

global $CFG, $ME;

/* hace un join de CATEGORIAS con ella misma para obtener información


***de la categoría y de la cat. padre************************************/

$qid = db_query("
SELECT cat.nombre , cat.padre_id , padre.nombre AS padre
FROM categorias cat, categorias padre
WHERE padre.id = cat.padre_id
AND cat.id = $id
");
$cat = db_fetch_object($qid);

/* elimina esta categoria***********************************************/

$qid = db_query("
DELETE FROM categorias
WHERE id = $id
");

/* re-asigna los productos de esta categoría a la categoría padre*******/

$qid = db_query("
UPDATE productos_categorias
SET categoria_id = $cat->padre_id
WHERE categoria_id = $id
");

/* re-asigna las sub-categorías a la categoría padre *******************/

$qid = db_query("
UPDATE categorias
SET padre_id = $cat->padre_id
WHERE padre_id = $id
");

include("templates/categoria_eliminada.php");/*incluye CATEGORIA_ELIMUNADA.PHP**/
}

Autor: Ing. Oscar R. Espeche 28


PHP, MySQL y E-COMMERCE
La página templates/categoría_eliminada.php muestra un mensaje en donde se indica que los productos y las
sub-categorías de la categoría eliminada se incluyen dentro de la categoría padre. De esta forma no se pierde
el contenido de la categoría.

El mensaje dirá algo parecido a lo siguiente.

El código que permite visualizar el mensaje se encuentra en la página secundaria


templates/categoria_eliminada.php.

<p class=normal>
La categoria <b><? pv($cat->nombre) ?></b> a sido eliminada. Todos los productos y
sub-categorias pertenecientes a <b><? pv($cat->nombre) ?></b> han sido re-asignadas a
la categoria <b><? pv($cat->padre) ?></b>.

Autor: Ing. Oscar R. Espeche 29


PHP, MySQL y E-COMMERCE
7-4 Administración de los productos
La página principal productos.php permite la administración de los productos de la tienda virtual. La imagen
que permite visualizar la página principal de los productos es la siguiente.

Vemos que se dispone de los links para:

Agregar
Modificar
Eliminar

A continuación vemos el contenido de la página productos.php.

productos.php

<?
/********************
Administra
Productos*************
*********************
*****/

include("../aplicacion.php"
);/******** incluye
aplicación.php*********

Autor: Ing. Oscar R. Espeche 30


PHP, MySQL y E-COMMERCE

$titulo = "Administración de Productos";


include("templates/header.php");

switch (nvl($modo)) {
case "agregar" :
agregar_producto_form(nvl($categoria_id, 0));
break;

case "editar" :
editar_producto_form($id);
break;

case "eliminar" :
eliminar_producto($id);
listar_producto();
break;

case "insertar" :
inserta_producto($id, $HTTP_POST_VARS);
listar_producto();
break;

case "actualizar" :
actualiza_producto($id, $HTTP_POST_VARS);
listar_producto();
break;

default :
listar_producto();
break;
}

include("templates/pie.php");

Autor: Ing. Oscar R. Espeche 31


PHP, MySQL y E-COMMERCE

/********************
*********************
*********************
****************
* FUNCIONES

*********************
*********************
*********************
**************/

Autor: Ing. Oscar R. Espeche 32


PHP, MySQL y E-COMMERCE

/* carga las categorias donde se encuentra el producto */

$qid = db_query("
SELECT categoria_id
FROM productos_categorias
WHERE producto_id = $id
");

$frm["categorias"] = array();
while ($cat = db_fetch_object($qid)) {
$frm["categorias"][] = $cat->categoria_id;
}

/* establece otros valores iniciales para el formulario */

$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar cambios";

/*construye el arbol de categorias para usar como OPTIONS del SELECT*/

arbol_categorias($arbol, $frm["categorias"]);

include("templates/producto_form.php");/*incluye PRODUCTO_FORM.PHP***/
}

function eliminar_producto($id) {

/* elimina el producto indicado por $id, tambien se elimina de la tabla


productos_categorías . Esto deberia hacerse con transacciones */

global $CFG, $ME;

/* carga la informacin del producto */

$qid = db_query("
SELECT nombre
FROM productos
WHERE id = $id
");
$prod = db_fetch_object($qid);

Autor: Ing. Oscar R. Espeche 33


PHP, MySQL y E-COMMERCE

/* elimina el producto */

$qid = db_query("
DELETE FROM productos
WHERE id = $id
");

/* elimina el producto de la tabla productos_categorias */

$qid = db_query("
DELETE FROM productos_categorias
WHERE producto_id = $id
");

include("templates/producto_eliminado.php");/*incluye
PRODUCTO_ELIMINADO.PHP***/
}

function inserta_producto($id, $frm) {

/*agrega un producto en una categoria. Los valores estan en el array $frm */

global $CFG, $ME;

$oferta_especial = checked($frm["oferta_especial"]);
$oferta = checked($frm["oferta"]);

/* agrega el producto en la tabla productos */

$qid = db_query("
INSERT INTO productos (
nombre, descripcion, precio, oferta_especial
, oferta, imagen, prov_id, imp_id
)
VALUES (
'$frm[nombre]', '$frm[descripcion]', '$frm[precio]'
, '$frm[oferta_especial]','$frm[oferta]', '$frm[imagen]'
, '$frm[prov_id]', '$frm[imp_id]'
)
");

/* toma el ID del producto creado */

$producto_id = db_insert_id();

Autor: Ing. Oscar R. Espeche 34


PHP, MySQL y E-COMMERCE
/* agrega al producto en las categorias */

for ($i = 0; $i < count($frm["categorias"]); $i++) {


$qid = db_query("
INSERT INTO productos_categorias (categoria_id, producto_id)
VALUES ('{$frm["categorias"][$i]}', '$producto_id')
");
}
}

function actualiza_producto($id, $frm) {

/* actualiza el producto. Los valores estan en el array $frm */

global $CFG, $ME;

checked($frm["oferta_especial"]);
checked($frm["oferta"]);

/* graba los nuevos valores en la tabla */

$qid = db_query("
UPDATE productos SET
nombre = '$frm[nombre]'
,descripcion = '$frm[descripcion]'
,precio = '$frm[precio]'
,oferta_especial = '$frm[oferta_especial]'
,oferta = '$frm[oferta]'
,imagen = '$frm[imagen]'
,prov_id = '$frm[prov_id]'
,imp_id = '$frm[imp_id]'

WHERE id = $id
");

/* elimina al producto de las categorias donde se encontraba */

$qid = db_query("
DELETE FROM productos_categorias
WHERE producto_id = $id
");

Autor: Ing. Oscar R. Espeche 35


PHP, MySQL y E-COMMERCE

/* agrega al producto a las nuevas categorias.


Si no se especifica categoria se lo pone en la cat. superior*/

if (count($frm["categorias"]) == 0) {
$frm["categorias"][] = 0;
}

for ($i = 0; $i < count($frm["categorias"]); $i++) {


$qid = db_query("
INSERT INTO productos_categorias (categoria_id, producto_id)
VALUES ('{$frm["categorias"][$i]}', '$id')
");
}
}

function listar_producto() {

/* listado de productos******************************************************/

global $CFG, $ME;

$qid = db_query("
SELECT p.id, p.nombre, p.descripcion, p.precio, c.nombre AS categoria
FROM productos p, productos_categorias pc, categorias c
WHERE p.id = pc.producto_id /*join de PRODUCTOS y PRODUCTOS_CATEGORIAS*/
AND c.id = pc.categoria_id /*join de CATEGORIAS y PRODUCTOS_CATEGORIAS*/
");

include("templates/productos_lista.php");/* incluye PRODUCTOS_LISTA.PHP*/


}

?>

Listar los productos


La función listar_producto() obtiene los datos de los productos de la tabla del mismo nombre y luego
incluye el archivo templates/productos_lista.php que permite visualizar la lista de los productos como se
muestra en el siguiente código.

Autor: Ing. Oscar R. Espeche 36


PHP, MySQL y E-COMMERCE
templates/productos_lista.php

<p class=normal>
<a
href="<?=$ME?>?modo=
agregar">Agregar un
Producto</a>
</p>

<table border=0
cellpagregaring=3>
<tr>

Agregar productos
La función agregar_producto_form(nvl($categoria_id, 0)) permite agregar un producto como se muestra
a continuación.

function agregar_producto_form($id = 0) {

/* muestra un formulario para agregar un producto */

global $CFG, $ME;

Autor: Ing. Oscar R. Espeche 37


PHP, MySQL y E-COMMERCE

/* Define valores por defecto*/

$frm["categorias"] = array($id);/** fuerza a que sea un array**/


$frm["modo"] = "insertar";
$frm["nombre"] = "";
$frm["descripcion"] = "";
$frm["precio"] = "";
$frm["prov_id"] = "";
$frm["imp_id"] = "";
$frm["oferta_especial"] = "";
$frm["rotulo"] = "Agregar Producto";
$frm["imagen"] = "images/productos/";

/* construye el árbol de categorías que se usarán como OPTIONS en el SELECT */

arbol_categorias($arbol, $frm["categorias"]);

include("templates/producto_form.php");/**incluye PRODUCTO_FORM.PHP**/
}

Finalmente, la página templates/producto_form.php muestra el formulario para editar el nuevo producto,


haciendo uso de las variables predefinidas, donde $arbol da forma al árbol de categoría que se muestra en
las opciones de SELECT.

templates/producto_form.php

<form method="post" action="<?=$ME?>">


<input type="hidden" name="modo" value="<?=$frm["modo"]?>">
<input type="hidden" name="id" value="<?=pv($id)?>">
<table>
<tr valign=top>
<td><div class=label>Categorias:</div>
<select name="categorias[]" multiple size=10>
<?=$arbol?>
</select>
</td>

<td width=10 nowrap></td>

<td><table border=0>
<tr valign=top>
<td class=label>Oferta Global:</td>
<td><input type="checkbox" name="oferta_especial"
<?=frmchecked($frm["oferta_especial"])?>></td>
</tr>

Autor: Ing. Oscar R. Espeche 38


PHP, MySQL y E-COMMERCE

<tr valign=top>
<td class=label>Oferta de Seccion:</td>
<td><input type="checkbox" name="oferta"
<?=frmchecked($frm["oferta"])?>></td>
</tr>
<tr>
<td class=label>Nombre:</td>
<td><input type="text" name="nombre" size=25
value="<? pv($frm["nombre"]) ?>"></td>
</tr>
<tr valign=top>
<td class=label>Precio:</td>
<td><input type="text" name="precio" size=10
value="<? pv($frm["precio"]) ?>"></td>
</tr>

<tr>
<td class=label>Proveedor:</td>
<td><select name="prov_id">
<?php
$qid=db_query("select * from proveedores");
while ($row=db_fetch_array($qid)) { ?>
<option value = <? echo $row["pid"]; if ($row["pid"]==$frm["prov_id"])
{?> selected<?}?>><?=$row["pnombre"]?>
<?}?>
</select>
</td>
</tr>
<tr>
<td class=label>Impuesto:</td>
<td><select name="imp_id">
<?php
$qid=db_query("select * from impuestos");
while ($row=db_fetch_array($qid)) { ?>
<option value = <? echo $row["iid"];
if ($row["iid"]==$frm["imp_id"])
{?> selected<?}?>><?=$row["icodigo"]?>
<?}?>
</select>
</td>
</tr>
<tr valign=top>
<td class=label>Descripcion:</td>
<td><textarea name="descripcion" cols=50 rows=5>
<? pv($frm["descripcion"]) ?></textarea></td>
</tr>

Autor: Ing. Oscar R. Espeche 39


PHP, MySQL y E-COMMERCE

<tr>
<td class=label>Imagen:</td>
<td><input type="text" name="imagen" size=40
value="<? pv($frm["imagen"]) ?>"></td>
</tr>
<tr>
<td></td>
<td><input type="submit"
value="<?=$frm["rotulo"] ?>"></td>
</table>
</td>
</tr>
</table>
</form>

La ejecución de este código genera la siguiente pantalla para editar el formulario del nuevo producto.

Una vez llenado el formulario, sus datos son enviados a productos.php con la variable modo=”insertar”.

En la página productos.php se ejecuta la siguiente opción de la función switch():

case "insertar" : //*******agregar un producto ***********************


inserta_producto($id, $HTTP_POST_VARS);
listar_producto();
break;

La función inserta_producto() permite grabar el nuevo producto y la función listar_producto() muestra en la


pantalla la lista de todos los productos como ya vimos.

Autor: Ing. Oscar R. Espeche 40


PHP, MySQL y E-COMMERCE

function inserta_producto($id, $frm) {

/*agrega un producto en una categoria. Los valores estan en el array $frm */

global $CFG, $ME;

/* agrega el producto en la tabla productos */

$qid = db_query("
INSERT INTO productos (
nombre, descripcion, precio, oferta_especial
, oferta, imagen, prov_id, imp_id
)
VALUES (
'$frm[nombre]', '$frm[descripcion]', '$frm[precio]'
, '$frm[oferta_especial]','$frm[oferta]', '$frm[imagen]'
, '$frm[prov_id]', '$frm[imp_id]'
)
");

/* toma el ID del producto creado */

$producto_id = db_insert_id();

/* agrega al producto en las categorías */

for ($i = 0; $i < count($frm["categorias"]); $i++) {


$qid = db_query("
INSERT INTO productos_categorias (categoria_id, producto_id)
VALUES ('{$frm["categorias"][$i]}', '$producto_id')
");
}
}

Autor: Ing. Oscar R. Espeche 41


PHP, MySQL y E-COMMERCE
Editar productos
Haciendo clic en el nombre del producto, enviamos a la página productos.php la variable modo=editar y la
variable id=$id del registro que se desea editar.

En la página productos.php se ejecuta la siguiente opción de la función swith():

case "editar" : /*******formulario para modificar un producto ********/


editar_producto_form($id);
break;

La función editar_producto_form($id) se encarga de definir las variables que serán utilizadas en el


formulario que se mostrará en pantalla para editar el producto.

function editar_producto_form($id) {

/* muestra el formulario para editar un producto */

global $CFG, $ME;

/* carga la informacion del producto */

$qid = db_query("
SELECT *
FROM productos
WHERE id = $id
");
$frm = db_fetch_array($qid);

/* carga las categorías donde se encuentra el producto */

$qid = db_query("
SELECT categoria_id
FROM productos_categorias
WHERE producto_id = $id
");

$frm["categorias"] = array();
while ($cat = db_fetch_object($qid)) {
$frm["categorias"][] = $cat->categoria_id;
}

Autor: Ing. Oscar R. Espeche 42


PHP, MySQL y E-COMMERCE

/* establece otros valores iniciales para el formulario */

$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar cambios";

/*construye el arbol de categorias para usar como OPTIONS del SELECT*/

arbol_categorias($arbol, $frm["categorias"]);

include("templates/producto_form.php");/*incluye PRODUCTO_FORM.PHP***/
}

Vemos que consiste fundamentalmente en obtener datos de la tabla para el producto que se quiere editar y
usar estos datos como valores iniciales del formulario templates/producto_form.php que se usa para
introducir los cambios.

El formulario es el mismo que usamos para agregar un producto, salvo que se define la variable
$frm["modo"] = "actualizar" para diferenciarlo.

Esta variable lo lleva a la opción “actualizar” de la función switch() como vemos.

case "actualizar" :
actualiza_producto($id, $HTTP_POST_VARS);
listar_producto();
break;

function actualiza_producto($id, $frm) {

/* actualiza el producto. Los valores estan en el array $frm */

global $CFG, $ME;

/* graba los nuevos valores en la tabla */

Autor: Ing. Oscar R. Espeche 43


PHP, MySQL y E-COMMERCE

$qid = db_query("
UPDATE productos SET
nombre = '$frm[nombre]'
,descripcion = '$frm[descripcion]'
,precio = '$frm[precio]'
,oferta_especial = '$frm[oferta_especial]'
,oferta = '$frm[oferta]'
,imagen = '$frm[imagen]'
,prov_id = '$frm[prov_id]'
,imp_id = '$frm[imp_id]'

WHERE id = $id
");

/* elimina al producto de las categorías donde se encontraba */

$qid = db_query("
DELETE FROM productos_categorias
WHERE producto_id = $id
");

/* agrega al producto a las nuevas categorías.


Si no se especifica categoría se lo pone en la cat. superior*/

if (count($frm["categorias"]) == 0) {
$frm["categorias"][] = 0;
}

for ($i = 0; $i < count($frm["categorias"]); $i++) {


$qid = db_query("
INSERT INTO productos_categorias (categoria_id, producto_id)
VALUES ('{$frm["categorias"][$i]}', '$id')
");
}
}

Autor: Ing. Oscar R. Espeche 44


PHP, MySQL y E-COMMERCE
Eliminar productos
Al hacer un clic en la letra X que se indica como acción en el registro del producto seleccionado, se envía a
la página productos.php la variable modo=eliminar y la variable id=$id del producto que se quiere eliminar.

En la página productos.php se ejecuta la siguiente opción de la función swith():

case "eliminar" :
eliminar_producto($id);
listar_producto();
break;

La función eliminar_producto() se encarga de borrar el producto de la tabla productos.

function eliminar_producto($id) {

/* elimina el producto indicado por $id, tambien se elimina de la tabla


productos_categorías . Esto deberia hacerse con transacciones */

global $CFG, $ME;

/* carga la información del producto */

$qid = db_query("
SELECT nombre
FROM productos
WHERE id = $id
");
$prod = db_fetch_object($qid);

/* elimina el producto */

$qid = db_query("
DELETE FROM productos
WHERE id = $id
");
/* elimina el producto de la tabla productos_categorias */
$qid = db_query("
DELETE FROM productos_categorias
WHERE producto_id = $id
");
include("templates/producto_eliminado.php");/*incluye
PRODUCTO_ELIMINADO.PHP***/
}

Autor: Ing. Oscar R. Espeche 45


PHP, MySQL y E-COMMERCE
La página templates/producto_eliminado.php muestra un mensaje en donde se indica que el producto ha
sido eliminado.

El mensaje dirá algo parecido a lo siguiente.

El código que permite visualizar el mensaje se encuentra en la página secundaria


templates/producto_eliminado.php.

<p class=normal>
El producto <b><? pv($prod->nombre) ?></b> ha sido eliminado.

Autor: Ing. Oscar R. Espeche 46


PHP, MySQL y E-COMMERCE
7-5 Administración de clientes
La página principal usuarios.php permite la administración de los clientes de la tienda virtual. La imagen
que permite visualizar la página principal de los clientes es la siguiente.

Vemos que se dispone de los links para:

Agregar
Modificar
Eliminar

A continuación vemos el contenido de la página usuarios.php.

Autor: Ing. Oscar R. Espeche 47


PHP, MySQL y E-COMMERCE
usuarios.php

<?
/******************* Adminisatracion de usuarios **************************/

include("../aplicacion.php");/**** incluye aplicacion.php**************/


requiere_login();
requiere_priv("admin");

$titulo = "Administracion de Clientes";


include("templates/header.php");/**** incluye HEADER.PHP******************/

switch (nvl($modo)) {
case "agregar" :
agregar_usuario_form();
break;

case "editar" :
editar_usuario_form($cliente);
break;

case "eliminar" :
eliminar_usuario($cliente);
usuario_lista();
break;

case "insertar" :
insertar_usuario($HTTP_POST_VARS);
usuario_lista();
break;

case "actualizar" :
actualizar_usuario($HTTP_POST_VARS);
usuario_lista();
break;

case "resetpasswd" :
reset_password($cliente);
include("templates/user_password_reset.php");
usuario_lista();
break;

default :
usuario_lista();
break;
}

Autor: Ing. Oscar R. Espeche 48


PHP, MySQL y E-COMMERCE

include("templates/pie.php");

/******************************************************************************
* FUNCIONES
*****************************************************************************/

function agregar_usuario_form() {

/* muestra formulario para crear una nueva cuenta */

global $CFG, $ME;

/* set default values for the reset of the fields */


$frm["cliente"] = "";
$frm["nombre"] = "";
$frm["apellido"] = "";
$frm["email"] = "";
$frm["telefono"] = "";
$frm["direccion"] = "";
$frm["password"] = "";
$frm["pais"] = "";
$frm["provincia"] = "";
$frm["ciudad"] = "";

$frm["modo"] = "insertar";
$frm["rotulo"] = "Agregar Cliente";

include("templates/usuario_form.php");/** incluye USUARIO_FORM.PHP*****/


}

function editar_usuario_form($cliente) {

/*muestra el formulario de los datos del cliente con valores de la tabla de usuarios*/

global $CFG, $ME;

Autor: Ing. Oscar R. Espeche 49


PHP, MySQL y E-COMMERCE

/* carga informacion de la tabla */

$qid = db_query("
SELECT cliente, nombre, apellido, email, telefono, direccion, priv, pais,
provincia, ciudad
FROM usuarios
WHERE cliente = '$cliente'
");
$frm = db_fetch_array($qid);
$frm["password"]="*********";

$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar datos";

include("templates/usuario_form.php");/***incluye USUARIO_FORM.PHP*********/
}

function eliminar_usuario($cliente) {

/* elimina la cuenta de $cliente */

global $CFG, $ME;

$qid = db_query("DELETE FROM usuarios WHERE cliente = '$cliente'");


include("templates/usuario_eliminado.php");/* incluye USUARIO_ELIMINADO.PHP*/
}

function insertar_usuario($frm) {

/*agrega una cuenta a la tabla verificando(??) los datos que vienen en el array $frm*/

$password="$frm[password]";

$qid = db_query("
INSERT INTO usuarios (
cliente, password, priv, nombre, apellido, email, telefono,
direccion, pais, provincia, ciudad
)

Autor: Ing. Oscar R. Espeche 50


PHP, MySQL y E-COMMERCE

VALUES (
'$frm[cliente]'
,'" . md5($password) ."'
,'$frm[priv]'
,'$frm[nombre]'
,'$frm[apellido]'
,'$frm[email]'
,'$frm[telefono]'
,'$frm[direccion]'
,'$frm[pais]'
,'$frm[provincia]'
,'$frm[ciudad]'
)");

include("templates/usuario_creado.php");/**incluye USUARIO_CREADO.PHP****/
}

function actualizar_usuario($frm) {

/* actualiza los datos del usuario verificando que la clave no contega "*".Si contiene
"*" no la actualiza*/

$password="$frm[password]";
if(substr($password,1,1) != "*") {
db_query("update usuarios set password='".md5($password)
."' WHERE cliente = '$frm[cliente]' ");
}

$qid = db_query("
UPDATE usuarios SET
priv = '$frm[priv]'
,nombre = '$frm[nombre]'
,apellido = '$frm[apellido]'
,email = '$frm[email]'
,telefono = '$frm[telefono]'
,direccion = '$frm[direccion]'
,pais = '$frm[pais]'
,provincia = '$frm[provincia]'
,ciudad = '$frm[ciudad]'
WHERE cliente = '$frm[cliente]'
");
}

Autor: Ing. Oscar R. Espeche 51


PHP, MySQL y E-COMMERCE

function usuario_lista() {

/* lista los usuarios */

global $CFG, $ME;

$qid = db_query("
SELECT cliente, nombre, apellido, email, priv
FROM usuarios
");

include("templates/usuario_lista.php");/** incluye USUARIO_LISTA.PHP*/


}
?>

Autor: Ing. Oscar R. Espeche 52


PHP, MySQL y E-COMMERCE
Listar los clientes
La función usuario_lista() obtiene los datos de los clientes de la tabla usuarios y luego incluye el archivo
templates/usuario_lista.php que permite visualizar la lista de los clientes como se muestra en el siguiente
código.

templates/usuario_lista.php

<p class=normal>
<a href="<?=$ME?>?modo=agregar">Agregar un Cliente</a>
</p>

<table border=0 cellpagregaring=3>


<tr>
<th>Accion</th>
<th>Nombre de login</th>
<th>Nombre</th>
<th>Apellido</th>
<th>Dir. de Correo</th>
<th>Privilegio</th>
</tr>

<? while ($r = db_fetch_object($qid)) { ?>


<tr>
<td class=normal>
<a title="Eliminar <? pv($r->cliente) ?>" href="<?=$ME?>
?modo=eliminar&cliente=<? pv($r->cliente) ?>">X</a>
&nbsp;
<a title="Resetear contrasena de <? pv($r->cliente) ?>" href="<?=$ME?>
?modo=resetpw&cliente=<? pv($r->cliente) ?>">R</a>
</td>
<td class=normal><a title="Editar este usuario" href="<?=$ME?>
?modo=editar&cliente=<? pv($r->cliente) ?>">
<? pv($r->cliente) ?></a></td>
<td class=normal><? pv($r->nombre) ?></td>
<td class=normal><? pv($r->apellido) ?></td>
<td class=normal><a title="Enviarle un EMail" href="mailto:<?
pv($r->email) ?>"><? pv($r->email) ?></a></td>
<td class=normal><? pv($r->priv) ?></td>
</tr>
<? } ?>
</table>

Autor: Ing. Oscar R. Espeche 53


PHP, MySQL y E-COMMERCE
Agregar clientes
La función agregar_usuario_form() permite agregar un cliente como se muestra a continuación.

function agregar_usuario_form() {

/* muestra formulario para crear una nueva cuenta */

global $CFG, $ME;

/* set default values for the reset of the fields */


$frm["cliente"] = "";
$frm["nombre"] = "";
$frm["apellido"] = "";
$frm["email"] = "";
$frm["telefono"] = "";
$frm["direccion"] = "";
$frm["password"] = "";
$frm["pais"] = "";
$frm["provincia"] = "";
$frm["ciudad"] = "";

$frm["modo"] = "insertar";
$frm["rotulo"] = "Agregar Cliente";

include("templates/usuario_form.php");/** incluye USUARIO_FORM.PHP*****/


}

Finalmente, la página templates/usuario_form.php muestra el formulario para editar el nuevo cliente,


haciendo uso de las variables predefinidas.

templates/usuario_form.php

<form method="post" action="<?=$ME?>">


<input type="hidden" name="modo" value="<?=$frm["modo"]?>">
<table>
<tr>
<td class=label>Nombre de login:</td>
<? if ($frm["cliente"] == "") { ?>
<td><input type="text" name="cliente" size=25 value=
"<? pv($frm["cliente"]) ?>"></td>
<? } else { ?>

Autor: Ing. Oscar R. Espeche 54


PHP, MySQL y E-COMMERCE

<input type="hidden" name="cliente" value=


"<? pv($frm["cliente"]) ?>">
<td class=normal><? pv($frm["cliente"]) ?></td>
<? } ?>
</tr>
<tr>
<td class=label>Contrasena:</td>
<td><input type="password" name="password" size=25 value=
"<? pv($frm["password"]) ?>"></td>
</tr>

<tr>
<td class=label>Privilegio:</td>
<td><input type="text" name="priv" size=5 value=
"<? pv($frm["priv"]) ?>"></td>
</tr>
<tr>
<td class=label>Nombre:</td>
<td><input type="text" name="nombre" size=25 value=
"<? pv($frm["nombre"]) ?>"></td>
</tr>
<tr>
<td class=label>Apellido:</td>
<td><input type="text" name="apellido" size=25 value=
"<? pv($frm["apellido"]) ?>"></td>
</tr>
<tr>
<td class=label>Dir. de Correo:</td>
<td><input type="text" name="email" size=25 value=
"<? pv($frm["email"]) ?>"></td>
</tr>
<tr>
<td class=label>Telefono:</td>
<td><input type="text" name="telefono" size=25 value=
"<? pv($frm["telefono"]) ?>"></td>
</tr>
<tr>
<td class=label>Pais:</td>
<td><select name="pais">
<?php
$qid=db_query("select * from pais");

Autor: Ing. Oscar R. Espeche 55


PHP, MySQL y E-COMMERCE

while ($row=db_fetch_array($qid)) { ?>


<option <? echo $row["pnombre"];
if ($row["pnombre"]==$frm["pais"])
{?> selected<?}?>><?=$row["pnombre"]?>
<?}?>
</select>
</td>
</tr>
<tr>
<td class=label>Provincia:</td>
<td><select name="provincia">
<?php
$qid=db_query("select * from provincia");
while ($row=db_fetch_array($qid)) { ?>
<option <? echo $row["prov_nom"];
if ($row["prov_nom"]==$frm["provincia"])
{?> selected<?}?>><?=$row["prov_nom"]?>
<?}?>
</select>
</td>
</tr>
<tr>
<td class=label>Ciudad:</td>
<td><select name="ciudad">
<?php
$qid=db_query("select * from ciudad");
while ($row=db_fetch_array($qid)) { ?>
<option <? echo $row["cnombre"];
if ($row["cnombre"]==$frm["ciudad"])
{?> selected<?}?>><?=$row["cnombre"]?>
<?}?>
</select>
</td>
</tr>
<tr valign=top>
<td class=label>Domicilio Particular:</td>
<td><textarea name="direccion" cols=50 rows=5>
<? pv($frm["direccion"]) ?></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="<?=$frm["rotulo"] ?>"></td>
</table>
</form>

Autor: Ing. Oscar R. Espeche 56


PHP, MySQL y E-COMMERCE

La ejecución de este código genera la siguiente pantalla para editar el formulario del nuevo cliente.

Una vez llenado el formulario, sus datos son enviados a clientes.php con la variable modo=”insertar”.

En la página clientes.php se ejecuta la siguiente opción de la función switch():

case "insertar" : //*******agregar un cliente ***********************


insertar_usuario($HTTP_POST_VARS);
usuario_lista();
break;

La función insertar_usuario() permite grabar el nuevo cliente y la función usuario_lista() muestra en la


pantalla la lista de todos los clientes como ya vimos.

Autor: Ing. Oscar R. Espeche 57


PHP, MySQL y E-COMMERCE

function insertar_usuario($frm) {

/*agrega una cuenta a la tabla verificando(??) los datos que vienen en el array $frm*/

$password="$frm[password]";

$qid = db_query("
INSERT INTO usuarios (
cliente, password, priv, nombre, apellido, email, telefono,
direccion, pais, provincia, ciudad
) VALUES (
'$frm[cliente]'
,'" . md5($password) ."'
,'$frm[priv]'
,'$frm[nombre]'
,'$frm[apellido]'
,'$frm[email]'
,'$frm[telefono]'
,'$frm[direccion]'
,'$frm[pais]'
,'$frm[provincia]'
,'$frm[ciudad]'
)");

include("templates/usuario_creado.php");/**incluye USUARIO_CREADO.PHP****/
}

Autor: Ing. Oscar R. Espeche 58


PHP, MySQL y E-COMMERCE
Editar clientes
Haciendo clic en el nombre del cliente, enviamos a la página usuarios.php la variable modo=editar y la
variable id=$id del registro que se desea editar.

En la página usuarios.php se ejecuta la siguiente opción de la función swith():

case "editar" : /*******formulario para modificar un cliente ********/

editar_usuario_form($cliente);
break;

La función editar_usuario_form($id) se encarga de definir las variables que serán utilizadas en el formulario
que se mostrará en pantalla para editar el cliente.

function editar_usuario_form($cliente) {

/*muestra el formulario de los datos del cliente con valores de la tabla de usuarios*/

global $CFG, $ME;

/* carga informacion de la tabla */

$qid = db_query("
SELECT cliente, nombre, apellido, email, telefono, direccion, priv, pais,
provincia, ciudad
FROM usuarios
WHERE cliente = '$cliente'
");
$frm = db_fetch_array($qid);
$frm["password"]="*********";

$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar datos";

include("templates/usuario_form.php");/***incluye USUARIO_FORM.PHP*********/
}

Autor: Ing. Oscar R. Espeche 59


PHP, MySQL y E-COMMERCE
Vemos que consiste fundamentalmente en obtener datos de la tabla para el cliente que se quiere editar y usar
estos datos como valores iniciales del formulario templates/usuario_form.php que se usa para introducir los
cambios.

El formulario es el mismo que usamos para agregar un cliente, salvo que se define la variable $frm["modo"]
= "actualizar" para diferenciarlo.

Esta variable lo lleva a la opción “actualizar” de la función switch() como vemos.

case "actualizar" :
actualizar_usuario($HTTP_POST_VARS);
usuario_lista();
break;

function actualizar_usuario($frm) {

/* actualiza los datos del usuario verificando que la clave no contega "*".Si contiene
"*" no la actualiza*/

$password="$frm[password]";
if(substr($password,1,1) != "*") {
db_query("update usuarios set password='".md5($password)
."' WHERE cliente = '$frm[cliente]' ");
}

$qid = db_query("
UPDATE usuarios SET
priv = '$frm[priv]'
,nombre = '$frm[nombre]'
,apellido = '$frm[apellido]'
,email = '$frm[email]'
,telefono = '$frm[telefono]'
,direccion = '$frm[direccion]'
,pais = '$frm[pais]'
,provincia = '$frm[provincia]'
,ciudad = '$frm[ciudad]'
WHERE cliente = '$frm[cliente]'
");
}

Autor: Ing. Oscar R. Espeche 60


PHP, MySQL y E-COMMERCE
Eliminar clientes
Al hacer un clic en la letra X que se indica como acción en el registro del cliente seleccionado, se envía a la
página usuarios.php la variable modo=eliminar y la variable id=$id del cliente que se quiere eliminar.

En la página usuarios.php se ejecuta la siguiente opción de la función swith():

case "eliminar" :
eliminar_usuario($cliente);
usuario_lista();
break;

La función eliminar_usuario() se encarga de borrar el cliente de la tabla usuarios.

function eliminar_usuario($cliente) {

/* elimina la cuenta de $cliente */

global $CFG, $ME;

$qid = db_query("DELETE FROM usuarios WHERE cliente = '$cliente'");


include("templates/usuario_eliminado.php");/* incluye USUARIO_ELIMINADO.PHP*/
}

La página templates/usuario_eliminado.php muestra un mensaje en donde se indica que el cliente ha sido


eliminado.

El mensaje dirá algo parecido a lo siguiente.

El código que permite visualizar el mensaje se encuentra en la página secundaria


templates/usuario_eliminado.php.

Autor: Ing. Oscar R. Espeche 61


PHP, MySQL y E-COMMERCE

<p class=normal>
El usuario
<b><? pv($cliente) ?></b>
ha sido eliminado.

Autor: Ing. Oscar R. Espeche 62


PHP, MySQL y E-COMMERCE
7-6 Administración de órdenes
La página principal ordenes.php permite la administración de las órdenes de compra de la tienda virtual. La
imagen que permite visualizar la página principal de las órdenes es la siguiente.

Vemos que solo contiene el link para ver los detalles de las ordenes ya que estas no pueden modificarse ni
eliminarse sino que las crea el sistema y quedan allí indefectiblemente como testigos de las operaciones
realizadas en al tienda virtual.

A continuación vemos el contenido de la página ordenes.php

Autor: Ing. Oscar R. Espeche 63


PHP, MySQL y E-COMMERCE
ordenes.php

<?
/********************
****Administra
Ordenes**************
*********************
**/

include("../aplicacion.php"
);/************* incluye
aplicacion.php*********

Autor: Ing. Oscar R. Espeche 64


PHP, MySQL y E-COMMERCE

function mostrar_lista() {

/* lista las Ordenes con el contenido de la tabla ordenes */

global $CFG, $ME;

$qid = db_query("
SELECT *
FROM ordenes
");

include("templates/orden_lista.php");
}
?>

La función mostrar_orden_detalles($id) muestra los detalles de la orden seleccionada.

function mostrar_orden_detalles($id) {

/* carga los datos de la Orden con el contenido de las tablas ordenes y ordenes_items*/

global $CFG, $ME;

$qid_orden = db_query("SELECT * FROM ordenes WHERE id = '$id'");

$orden = db_fetch_object($qid_orden);
include("templates/orden_detalles.php");/*********** incluye orden_detalles.PHP**/
}

la página secundaria templates/orden_detalles.php permite visualizar los detalles de la orden.

Autor: Ing. Oscar R. Espeche 65


PHP, MySQL y E-COMMERCE

Autor: Ing. Oscar R. Espeche 66


PHP, MySQL y E-COMMERCE

El código para mostrar los detalles es el siguiente.

orden_detalles.php

<h2>Orden # <? pv($id)


?></h2>
<div class=default>
<table>
<tr>
<td
class=label>Fecha de
Emision:</td>
<td
class=normal><?

<h2>Montos de la
Orden</h2>
<div>
<table cellspacing=5
cellpadding=3 borden =
0>
<tr>
<td></td>
<td
class=label>Producto</td

while ($prod =
db_fetch_object($qid)) {

$imp_id = $prod-
>imp_id;

$imp =
db_query("select * from
impuestos where iid =

Autor: Ing. Oscar R. Espeche 67


PHP, MySQL y E-COMMERCE

<tr>
<td class=normal>Total del Lote</td>
<tdclass=normal></td>
<tdclass=normal></td>
<td class=normal align=right>$<?=$lote?></td>
<tdclass=normal colspan = 3></td>
</tr>
<tr><td><table width=100%><tr><td><hr size=1></td></tr></table></td></tr>
<?$i++?>
<?
}/****************************final de lotes********************************/
?>

<tr>
<td colspan=3 class=label align=right>Total:</td>
<td class=normal></td>
<td class=normal align=right>$<?=$gtotal?></td>
</tr>
</table>

Autor: Ing. Oscar R. Espeche 68


PHP, MySQL y E-COMMERCE
7-7 Administración de proveedores
La página principal proveedores.php permite la administración de los proveedores de la tienda virtual. La
imagen que permite visualizar la página principal de los proveedores es la siguiente.

Vemos que se dispone de los links para:

Agregar
Modificar
Eliminar

A continuación vemos el contenido de la página proveedores.php.

Autor: Ing. Oscar R. Espeche 69


PHP, MySQL y E-COMMERCE
proveedores.php

<?
/******************* Administracion de proveedores ***********************/

include("../aplicacion.php");/**** incluye aplicacion.php**************/


requiere_login();
requiere_priv("admin");

$titulo = "Administracion de Proveedores";


include("templates/header.php");/**** incluye HEADER.PHP*****************/

switch (nvl($modo)) {
case "agregar" :
agregar_proveedores_form();
break;

case "editar" :
editar_proveedores_form($pid);
break;

case "eliminar" :
elimina_proveedores($pid);
listar_proveedores();
break;

case "insertar" :
inserta_proveedores($HTTP_POST_VARS);
listar_proveedores();
break;

case "actualizar" :
actualiza_proveedores($HTTP_POST_VARS);
listar_proveedores();
break;
default :
listar_proveedores();
break;
}

include("templates/pie.php");

Autor: Ing. Oscar R. Espeche 70


PHP, MySQL y E-COMMERCE

/******************************************************************************
* FUNCIONES
*****************************************************************************/

function agregar_proveedores_form() {

/* muestra formulario para crear un nuevo proveedor*/

global $CFG, $ME;

/* set default values for the reset of the fields */


$frm["pnombre"] = "";
$frm["pcodigo"] = "";
$frm["pemail"] = "";
$frm["pdireccion"] = "";
$frm["ptelefono"] = "";
$frm["pcontactonombre"] = "";
$frm["pcontactoapellido"] = "";
$frm["pcontactoemail"] = "";
$frm["ppais"] = "";
$frm["pprovincia"] = "";
$frm["pciudad"] = "";

$frm["modo"] = "insertar";
$frm["rotulo"] = "Agregar Proveedor";

include("templates/proveedores_form.php");/* incluye proveedores_FORM.PHP */


}

function editar_proveedores_form($pid) {

/*muestra el formulario de los datos del cliente con valores de la tabla de proveedoress*/

global $CFG, $ME;

/* carga informacin de la tabla */

$qid = db_query("
SELECT *
FROM proveedores
WHERE pid = '$pid'
");
$frm = db_fetch_array($qid);
$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar datos";

Autor: Ing. Oscar R. Espeche 71


PHP, MySQL y E-COMMERCE

include("templates/proveedores_form.php");/***incluye proveedores_FORM.PHP**/
}

function elimina_proveedores($pid) {

/* elimina la cuenta del proveedor $pid */

global $CFG, $ME;


$qid = db_query("
SELECT *
FROM proveedores
WHERE pid = '$pid'
");
$p = db_fetch_array($qid);
$pnombre = $p["pnombre"];
$qid = db_query("DELETE FROM proveedores WHERE pid = '$pid'");
include("templates/proveedores_eliminado.php");/*incluye proveedores_eliminado.PHP*/
}

function inserta_proveedores($frm) {

/*agrega una cuenta a la tabla verificando(??) los datos que vienen en el array $frm*/

$qid = db_query("
INSERT INTO proveedores (
pnombre, pcodigo, pemail, pdireccion, ptelefono, pcontactonombre,
pcontactoapellido, pcontactoemail, ppais, pprovincia, pciudad
) VALUES (
'$frm[pnombre]'
,'$frm[pcodigo]'
,'$frm[pemail]'
,'$frm[pdireccion]'
,'$frm[ptelefono]'
,'$frm[pcontactonombre]'
,'$frm[pcontactoapellido]'
,'$frm[pcontactoemail]'
,'$frm[ppais]'
,'$frm[pprovincia]'
,'$frm[pciudad]'
)");

include("templates/proveedores_creado.php");/*incluye proveedores_creado.PHP*/
}

Autor: Ing. Oscar R. Espeche 72


PHP, MySQL y E-COMMERCE

function actualiza_proveedores($frm) {

/* actualiza los datos del proveedor*/

$qid = db_query("
UPDATE proveedores SET
pnombre = '$frm[pnombre]'
,pcodigo = '$frm[pcodigo]'
,pemail = '$frm[pemail]'
,pdireccion = '$frm[pdireccion]'
,ptelefono = '$frm[ptelefono]'
,pcontactonombre = '$frm[pcontactonombre]'
,pcontactoapellido = '$frm[pcontactoapellido]'
,pcontactoemail = '$frm[pcontactoemail]'
,ppais = '$frm[ppais]'
,pprovincia = '$frm[pprovincia]'
,pciudad = '$frm[pciudad]'
WHERE pid = '$frm[pid]'
");
}

function listar_proveedores() {

/* lista los proveedores */

global $CFG, $ME;

$qid = db_query("
SELECT *
FROM proveedores
");

include("templates/proveedores_lista.php");/*incluye proveedores_LISTA.PHP*/
}
?>

Autor: Ing. Oscar R. Espeche 73


PHP, MySQL y E-COMMERCE

Listar los proveedores


La función listar_proveedores() obtiene los datos de los proveedores de la tabla proveedores y luego incluye
el archivo templates/proveedores_lista.php que permite visualizar la lista de los proveedores como se
muestra en el siguiente código.

templates/proveedores_lista.php

<p class=normal>
<a
href="<?=$ME?>?modo=
agregar">Agregar un
Proveedor</a>
</p>

<table border=0
cellpagregaring=3>
<tr>

Autor: Ing. Oscar R. Espeche 74


PHP, MySQL y E-COMMERCE
Agregar proveedores
La función agregar_proveedores_form() permite agregar un proveedor como se muestra a continuación.

function agregar_proveedores_form() {

/* muestra formulario para crear un nuevo proveedor*/

global $CFG, $ME;

/* set default values for the reset of the fields */


$frm["pnombre"] = "";
$frm["pcodigo"] = "";
$frm["pemail"] = "";
$frm["pdireccion"] = "";
$frm["ptelefono"] = "";
$frm["pcontactonombre"] = "";
$frm["pcontactoapellido"] = "";
$frm["pcontactoemail"] = "";
$frm["ppais"] = "";
$frm["pprovincia"] = "";
$frm["pciudad"] = "";

$frm["modo"] = "insertar";
$frm["rotulo"] = "Agregar Proveedor";

include("templates/proveedores_form.php");/* incluye proveedores_FORM.PHP */


}

Finalmente, la página templates/proveedores_form.php muestra el formulario para editar el nuevo


proveedor, haciendo uso de las variables predefinidas.

Templates/proveedores_form.php

<form method="post" <tr>


action="<?=$ME?>"> <td
<input type="hidden" class=label>Email del
name="modo" contacto:</td>
value="<?=$frm["modo"] <td><input
?>"> type="text"
<input type="hidden" name="pcontactoemail"
name="pid" size=25 value="<?
value="<?=$frm["pid"]?> pv($frm["pcontactoemail"
"> ]) ?>"></td>

Autor: Ing. Oscar R. Espeche 75


PHP, MySQL y E-COMMERCE
La ejecución de este código genera la siguiente pantalla para editar el formulario del nuevo proveedor.

Una vez llenado el formulario, sus datos son enviados a proveedores.php con la variable modo=”insertar”.

En la página proveedores.php se ejecuta la siguiente opción de la función switch():

case "insertar" : //*******agregar un proveedor ***********************


inserta_proveedores($HTTP_POST_VARS);
listar_proveedores();
break;

La función inserta_proveedores() permite grabar el nuevo proveedor y la función listar_proveedores()


muestra en la pantalla la lista de todos los proveedores como ya vimos.

Autor: Ing. Oscar R. Espeche 76


PHP, MySQL y E-COMMERCE

function inserta_proveedores($frm) {

/*agrega una cuenta a la tabla verificando(??) los datos que vienen en el array $frm*/

$qid = db_query("
INSERT INTO proveedores (
pnombre, pcodigo, pemail, pdireccion, ptelefono, pcontactonombre,
pcontactoapellido, pcontactoemail, ppais, pprovincia, pciudad
)

VALUES (
'$frm[pnombre]'
,'$frm[pcodigo]'
,'$frm[pemail]'
,'$frm[pdireccion]'
,'$frm[ptelefono]'
,'$frm[pcontactonombre]'

Autor: Ing. Oscar R. Espeche 77


PHP, MySQL y E-COMMERCE
Editar proveedores
Haciendo clic en el nombre del proveedor, enviamos a la página proveedores.php la variable modo=editar y
la variable id=$id del registro que se desea editar.

En la página proveedores.php se ejecuta la siguiente opción de la función swith():

case "editar" :
editar_proveedores_form($pid);
break;

La función editar_proveedores_form($id) se encarga de definir las variables que serán utilizadas en el


formulario que se mostrará en pantalla para editar el proveedor.

function editar_proveedores_form($pid) {

/*muestra el formulario de los datos del cliente con valores de la tabla de proveedoress*/

global $CFG, $ME;

/* carga informacin de la tabla */

$qid = db_query("
SELECT *
FROM proveedores
WHERE pid = '$pid'
");
$frm = db_fetch_array($qid);
$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar datos";

include("templates/proveedores_form.php");/***incluye proveedores_FORM.PHP**/
}

Vemos que consiste fundamentalmente en obtener datos de la tabla para el proveedor que se quiere editar y
usar estos datos como valores iniciales del formulario templates/proveedores_form.php que se usa para
introducir los cambios.
El formulario es el mismo que usamos para agregar un proveedor, salvo que se define la variable
$frm["modo"] = "actualizar" para diferenciarlo.
Esta variable lo lleva a la opción “actualizar” de la función switch() como vemos.

case "actualizar" :
actualiza_proveedores($HTTP_POST_VARS);
listar_proveedores();
break;

Autor: Ing. Oscar R. Espeche 78


PHP, MySQL y E-COMMERCE

function actualiza_proveedores($frm) {

/* actualiza los datos del proveedor*/

$qid = db_query("
UPDATE proveedores SET
pnombre = '$frm[pnombre]'
,pcodigo = '$frm[pcodigo]'
,pemail = '$frm[pemail]'
,pdireccion = '$frm[pdireccion]'
,ptelefono = '$frm[ptelefono]'
,pcontactonombre = '$frm[pcontactonombre]'
,pcontactoapellido = '$frm[pcontactoapellido]'
,pcontactoemail = '$frm[pcontactoemail]'
,ppais = '$frm[ppais]'
,pprovincia = '$frm[pprovincia]'
,pciudad = '$frm[pciudad]'
WHERE pid = '$frm[pid]'
");
}

Autor: Ing. Oscar R. Espeche 79


PHP, MySQL y E-COMMERCE
Eliminar proveedores
Al hacer un clic en la letra X que se indica como acción en el registro del proveedor seleccionado, se envía a
la página proveedores.php la variable modo=eliminar y la variable id=$id del proveedor que se quiere
eliminar.

En la página proveedores.php se ejecuta la siguiente opción de la función swith():

case "eliminar" :
elimina_proveedores($pid);
listar_proveedores();
break;

La función elimina_proveedores () se encarga de borrar al proveedor de la tabla proveedores.

function elimina_proveedores($pid) {

/* elimina la cuenta del proveedor $pid */

global $CFG, $ME;


$qid = db_query("
SELECT *
FROM proveedores
WHERE pid = '$pid'
");
$p = db_fetch_array($qid);
$pnombre = $p["pnombre"];
$qid = db_query("DELETE FROM proveedores WHERE pid = '$pid'");
include("templates/proveedores_eliminado.php");/*incluye proveedores_eliminado.PHP*/
}

La página templates/proveedores_eliminado.php muestra un mensaje en donde se indica que el proveedor ha


sido eliminado.
El mensaje dirá algo parecido a lo siguiente.

Autor: Ing. Oscar R. Espeche 80


PHP, MySQL y E-COMMERCE

El código que permite visualizar el mensaje se encuentra en la página secundaria


templates/proveedores_eliminado.php.

<p class=normal>
El Proveedor
<b><? pv($pnombre) ?></b>
ha sido eliminado.

Autor: Ing. Oscar R. Espeche 81


PHP, MySQL y E-COMMERCE
7-8 Administración de transportes
La página principal transportes.php permite la administración de los transportes de la tienda virtual. La
imagen que permite visualizar la página principal de los transportes es la siguiente.

Vemos que se dispone de los links para:

Agregar
Modificar
Eliminar

A continuación vemos el contenido de la página transportes.php.

Autor: Ing. Oscar R. Espeche 82


PHP, MySQL y E-COMMERCE
transportes.php

<?
/******************* Adminisatracion de transportes ****************************/

include("../aplicacion.php");/**** incluye aplicacion.php********************/


requiere_login();
requiere_priv("admin");

$titulo = "Administracion de transportes";


include("templates/header.php");/**** incluye HEADER.PHP***********************/

switch (nvl($modo)) {
case "agregar" :
agregar_transporte_form();
break;

case "editar" :
editar_transporte_form($t_id);
break;

case "eliminar" :
elimina_transportes($t_id);
listar_transporte();
break;

case "insertar" :
inserta_transportes($HTTP_POST_VARS);
listar_transporte();
break;

case "actualizar" :
actualiza_transportes($HTTP_POST_VARS);
listar_transporte();
break;
default :
listar_transporte();
break;
}

include("templates/pie.php");

Autor: Ing. Oscar R. Espeche 83


PHP, MySQL y E-COMMERCE
/******************************************************************************
* FUNCIONES
*****************************************************************************/

function agregar_transporte_form() {

/* muestra formulario para crear un nuevo transporte*/

global $CFG, $ME;

/* set default values for the reset of the fields */


$frm["tnombre"] = "";
$frm["tcodigo"] = "";
$frm["tdias"] = "";
$frm["tprecio"] = "";
$frm["prov_id"] = "";
$frm["tpais"] = "";
$frm["tprovincia"] = "";
$frm["tciudad"] = "";

$frm["modo"] = "insertar";
$frm["rotulo"] = "Agregar transporte";

include("templates/transportes_form.php");/* incluye transportes_FORM.PHP*/


}

function editar_transporte_form($t_id) {

/*muestra el formulario de los datos del cliente con valores de la tabla de transportes*/

global $CFG, $ME;

/* carga informacin de la tabla */

$qid = db_query("
SELECT *
FROM transporte
WHERE t_id = '$t_id'
");
$frm = db_fetch_array($qid);
$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar datos";

include("templates/transportes_form.php");/*incluye transportes_FORM.PHP*/
}

Autor: Ing. Oscar R. Espeche 84


PHP, MySQL y E-COMMERCE

function
elimina_transportes($t_id)
{

/* elimina la cuenta de
$transportesname */

global $CFG,
$ME;
$qid = db query("

Autor: Ing. Oscar R. Espeche 85


PHP, MySQL y E-COMMERCE

function actualiza_transportes($frm) {

/* actualiza los datos del transporte*/

$qid = db_query("
UPDATE transporte SET
tnombre = '$frm[tnombre]'
,tcodigo = '$frm[tcodigo]'
,tdias = '$frm[tdias]'
,tprecio = '$frm[tprecio]'
,prov_id = '$frm[prov_id]'
,tpais = '$frm[tpais]'
,tprovincia = '$frm[tprovincia]'
,tciudad = '$frm[tciudad]'
WHERE t_id = '$frm[t_id]'
");
}

function listar_transporte() {

/* lista los transportes */

global $CFG, $ME;

$qid = db_query("
SELECT *
FROM transporte
");

include("templates/transportes_lista.php");/*incluye transportes_LISTA.PHP*/
}
?>

Autor: Ing. Oscar R. Espeche 86


PHP, MySQL y E-COMMERCE
Listar los transportes
La función listar_transporte() obtiene los datos de los transportes de la tabla transportes y luego incluye el
archivo templates/transportes_lista.php que permite visualizar la lista de los transportes como se muestra en
el siguiente código.

templates/transportes_lista.php

<p class=normal>
<a
href="<?=$ME?>?modo=
agregar">Agregar un
transporte</a>
</p>

<table border=0
cellpagregaring=3>
<tr>

Agregar transportes
La función agregar_transporte_form() permite agregar un transporte como se muestra a continuación.

Finalmente, la página templates/transportes_form.php muestra el formulario para editar el nuevo


transporte, haciendo uso de las variables predefinidas.

function agregar_transporte_form() {

/* muestra formulario para crear un nuevo transporte*/

global $CFG, $ME;

/* set default values for the reset of the fields */


$frm["tnombre"] = "";
$frm["tcodigo"] = "";
$frm["tdias"] = "";
$frm["tprecio"] = "";
$frm["prov_id"] = "";
$frm["tpais"] = "";
$frm["tprovincia"] = "";
$frm["tciudad"] = "";

$frm["modo"] = "insertar";
$frm["rotulo"] = "Agregar transporte";

include("templates/transportes_form.php");/* incluye transportes_FORM.PHP*/


}

Autor: Ing. Oscar R. Espeche 87


PHP, MySQL y E-COMMERCE

templates/transportes_form.php

<form method="post"
action="<?=$ME?>">
<input type="hidden"
name="modo"
value="<?=$frm["modo"]
?>">
<input type="hidden"
name="t_id"
value="<?=$frm["t_id"]?>
">

Autor: Ing. Oscar R. Espeche 88


PHP, MySQL y E-COMMERCE

<tr>
<td class=label>pais:</td>
<td><select name="tpais">
<?php
$qid=db_query("select * from pais");
while ($row=db_fetch_array($qid)) { ?>
<option <? echo $row["pnombre"]; if ($row["pnombre"]==$frm["tpais"])
{?> selected<?}?>><?=$row["pnombre"]?>
<?}?>
</select>

</td>
</tr>
<tr>
<td class=label>Provincia:</td>
<td><select name="tprovincia">
<?php
$qid=db_query("select * from provincia");
while ($row=db_fetch_array($qid)) { ?>
<option <? echo $row["prov_nom"]; if ($row["prov_nom"]==$frm["tprovincia"])
{?> selected<?}?>><?=$row["prov_nom"]?>
<?}?>
</select>
</td>
</tr>
<tr>
<td class=label>Ciudad:</td>
<td><select name="tciudad">
<?php
$qid=db_query("select * from ciudad");
while ($row=db_fetch_array($qid)) { ?>
<option <? echo $row["cnombre"]; if ($row["cnombre"]==$frm["tciudad"])
{?> selected<?}?>><?=$row["cnombre"]?>
<?}?>
</select>

</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="<?=$frm["rotulo"] ?>"></td>
</table>
</form>

Autor: Ing. Oscar R. Espeche 89


PHP, MySQL y E-COMMERCE
La ejecución de este código genera la siguiente pantalla para editar el formulario del nuevo transporte.

Una vez llenado el formulario, sus datos son enviados a transportes.php con la variable modo=”insertar”.

En la página transportes.php se ejecuta la siguiente opción de la función switch():

case "insertar" :
inserta_transportes($HTTP_POST_VARS);
listar_transporte();
break;

La función inserta_transportes() permite grabar el nuevo transporte y la función listar_transporte() muestra


en la pantalla la lista de todos los transportes como ya vimos.

Autor: Ing. Oscar R. Espeche 90


PHP, MySQL y E-COMMERCE
function inserta_transportes($frm) {

/*agrega una cuenta a la tabla verificando(??) los datos que vienen en el array $frm*/

$qid = db_query("
INSERT INTO transporte (
tnombre, tcodigo, tdias , tprecio, prov_id, tpais, tprovincia, tciudad
) VALUES (
'$frm[tnombre]'
,'$frm[tcodigo]'
,'$frm[tdias]'
,'$frm[tprecio]'
,'$frm[prov_id]'
,'$frm[tpais]'
,'$frm[tprovincia]'
,'$frm[tciudad]'
)");
$tcodigo = $frm["tcodigo"];
$tnombre = $frm["tnombre"];
include("templates/transportes_creado.php");/*incluye transportes_CREADO.PHP*/
}

Autor: Ing. Oscar R. Espeche 91


PHP, MySQL y E-COMMERCE
Editar transportes
Haciendo clic en el nombre del transporte, enviamos a la página transportes.php la variable modo=editar y
la variable id=$id del registro que se desea editar.

En la página transportes.php se ejecuta la siguiente opción de la función swith():

case "editar" :
editar_transporte_form($t_id);
break;

La función editar_transporte_form($id) se encarga de definir las variables que serán utilizadas en el


formulario que se mostrará en pantalla para editar el transporte.

function editar_transporte_form($t_id) {

/*muestra el formulario de los datos del cliente con valores de la tabla de transportes*/

global $CFG, $ME;

/* carga informacin de la tabla */

$qid = db_query("
SELECT *
FROM transporte
WHERE t_id = '$t_id'
");
$frm = db_fetch_array($qid);
$frm["modo"] = "actualizar";
$frm["rotulo"] = "Grabar datos";

include("templates/transportes_form.php");/*incluye transportes_FORM.PHP*/
}

Vemos que consiste fundamentalmente en obtener datos de la tabla para el transporte que se quiere editar y
usar estos datos como valores iniciales del formulario templates/transporte_form.php que se usa para
introducir los cambios. El formulario es el mismo que usamos para agregar un transporte, salvo que se
define la variable $frm["modo"] = "actualizar" para diferenciarlo.
Esta variable lo lleva a la opción “actualizar” de la función switch() como vemos.

case "actualizar" :
actualiza_transportes($HTTP_POST_VARS);
listar_transporte();
break;

Autor: Ing. Oscar R. Espeche 92


PHP, MySQL y E-COMMERCE
function actualiza_transportes($frm) {

/* actualiza los datos del transporte*/

$qid = db_query("
UPDATE transporte SET
tnombre = '$frm[tnombre]'
,tcodigo = '$frm[tcodigo]'
,tdias = '$frm[tdias]'
,tprecio = '$frm[tprecio]'
,prov_id = '$frm[prov_id]'
,tpais = '$frm[tpais]'
,tprovincia = '$frm[tprovincia]'
,tciudad = '$frm[tciudad]'
WHERE t_id = '$frm[t_id]'
");
}

Autor: Ing. Oscar R. Espeche 93


PHP, MySQL y E-COMMERCE
Eliminar transportes
Al hacer un clic en la letra X que se indica como acción en el registro del transporte seleccionado, se envía a
la página transportes.php la variable modo=eliminar y la variable id=$id del transporte que se quiere
eliminar.

En la página transportes.php se ejecuta la siguiente opción de la función swith():

case "eliminar" :
elimina_transportes($t_id);
listar_transporte();
break;

La función elimina_transportes () se encarga de borrar al transporte de la tabla transportes.

function elimina_transportes($t_id) {

/* elimina la cuenta de $transportesname */

global $CFG, $ME;


$qid = db_query("
SELECT *
FROM transporte
WHERE t_id = $t_id
");
$t = db_fetch_array($qid);
$tcodigo = $t["tcodigo"];
$tnombre = $t["tnombre"];
$qid = db_query("DELETE FROM transporte WHERE t_id = '$t_id'");
include("templates/transportes_eliminado.php");/*incluye transportes_ELIMINADO.PHP*/
}

Autor: Ing. Oscar R. Espeche 94


PHP, MySQL y E-COMMERCE
La página templates/transportes_eliminado.php muestra un mensaje en donde se indica que el proveedor ha
sido eliminado. El mensaje dirá algo parecido a lo siguiente.

El código que permite visualizar el mensaje se encuentra en la página secundaria


templates/proveedores_eliminado.php.

<p class=normal>
El Transporte
<b><? pv($tnombre) ?></b>
codigo
<b><? pv($tcodigo) ?></b>
ha sido eliminado.

Autor: Ing. Oscar R. Espeche 95


PHP, MySQL y E-COMMERCE
7-9 Administración de impuestos
Solamente se mostrán las pantallas del ejercicio. Queda como tarea para los alumnos del curso, resolver los
scripts de acuerdo a lo que ya se explicó con detalle en los ítems anteriores.

La página principal impuestos.php permite la administración de los impuestos de la tienda virtual. La


imagen que permite visualizar la página principal de los impuestos es la siguiente.

Vemos que se dispone de los links para:

Agregar
Modificar
Eliminar

Listar los impuestos


La función listar_impuesto() obtiene los datos de los impuestos de la tabla impuestos y luego incluye el
archivo templates/impuestos_lista.php que permite visualizar la lista de los impuestos.

Agregar impuestos
La función agregar_impuesto_form() permite agregar un impuesto.

Finalmente, la página templates/impuestos_form.php muestra el formulario para editar el nuevo


impuesto, haciendo uso de las variables predefinidas.

La ejecución de este código genera la siguiente pantalla para editar el formulario del nuevo impuesto.

Una vez llenado el formulario, sus datos son enviados a impuestos.php con la variable modo=”insertar”.

En la página impuestos.php se ejecuta la opción de la función switch() que corresponde a dicho modo.
En dicha opción, la función inserta_impuestos() permite grabar el nuevo impuesto y la función
listar_impuesto() muestra en la pantalla la lista de todos los impuestos.

Autor: Ing. Oscar R. Espeche 96


PHP, MySQL y E-COMMERCE

Editar impuestos
Haciendo clic en el nombre del impuesto, enviamos a la página impuestos.php la variable modo=editar y la
variable id=$id del registro que se desea editar.

En la página impuestos.php se ejecuta la opción de la función swith para dicho modo.

Allí, la función editar_impuesto_form($id) se encarga de definir las variables que serán utilizadas en el
formulario que se mostrará en pantalla para editar el impuesto.

Consiste fundamentalmente en obtener datos de la tabla para el impuesto que se quiere editar y usar estos
datos como valores iniciales del formulario templates/impuesto_form.php que se usa para introducir los
cambios.

El formulario es el mismo que usamos para agregar un impuesto, salvo que se define la variable
$frm["modo"] = "actualizar" para diferenciarlo.

Esta variable lo lleva a la opción “actualizar” de la función switch() como vimos en casos anteriores.

Eliminar impuestos
Al hacer un clic en la letra X que se indica como acción en el registro del impuesto seleccionado, se envía a
la página impuestos.php la variable modo=eliminar y la variable id=$id del impuesto que se quiere eliminar.

En la página impuestos.php se ejecuta la opción de la función swith()correspondiente. Allí se llama a la


función elimina_impuestos () que se encarga de borrar al impuesto de la tabla impuestos.

La página templates/impuestos_eliminado.php muestra un mensaje en donde se indica que el proveedor ha


sido eliminado. El mensaje dirá algo parecido a lo siguiente.

Autor: Ing. Oscar R. Espeche 97

Вам также может понравиться