
El alumno conocerá los aspectos básicos de PHP y su instalación.
1. Instalar la plataforma Apache-MySQL-PHP en su computadora como XAMPP, MAMP, LAMP o WAMP o es su defecto, contar con un servidor remoto con PHP.
2. Un navegador moderno.
3. Un editor de código como Sublime Text, Aptana, Brackets, Atom o Dreamweaver (cualquier versión).
4. Si se cuenta con un servidor remoto, necesitarás un FTP o cPanel.
XAMPP es un paquete de instalación independiente de plataforma, software libre, que consiste principalmente en el sistema de gestión de bases de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script: PHP y Perl.
El patrón de diseño (de software) MVC se encarga de separar la “lógica de negocio” de la “interfaz de usuario” y es el más utilizado en aplicaciones web, ya que facilita la funcionalidad, mantenibilidad y escalabilidad del sistema.
En esta clase utilizaremos las carpetas:
app
controladores
libs
modelos
sql
vistas
public
css
js
Img
fotos
clientes
configuracion
cuentas
cuentastipo
generos
lotes
medicoespecialidad
medicos
movimientos
movimientotipo
ordencompra
ordencompradetalle
ordencompraestado
El archivo .htaccess nos permite modificar el acceso, en un ambiente Apache, a directorios o archivos.
Para que no puedan entrar a un directorio desde la URL y no ver el mismo se utiliza (en app):
extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
MVC divide las aplicaciones en tres niveles de abstracción:
El método separarURL() toma la URL del sistema y lo separará.
Utilizaremos las funciones:
isset() valida si una variable está definida.
rtrim() limpia caracteres a la derecha.
filter_var(FILTER_SANITIZE_URL) limpia los caracteres ilegales en una URL.
explode() separa una cadena por medio de una cadena delimitadora.
Dentro del constructor llamaremos el controlador y el método solicitado desde los parámetros.
Utilizaremos las funciones:
file_exists() verifica que exista el archivo físico.
ucwords() cambia a mayúscula las primeras letras.
unset() elimina una variable.
En todos los controladores necesitaremos dos métodos: Uno para llamar a las vistas con los datos a desplegar y otro para generar el modelo.
Nos conviene generar una clase auxiliar (que no se ejecuta directamente) con ambos métodos.
El proceso de entrada o login es un procedimiento de seguridad que permite a un usuario autenticarse para acceder a un sistema, aplicación o servicio en línea, generalmente utilizando un nombre de usuario y una contraseña, y a menudo complementado con autenticación multifactor (MFA) para mayor seguridad.
Bootstrap 5.3, la versión actual de Bootstrap, es muy bien considerada por la comunidad de desarrolladores web.
Se destaca por su facilidad de uso, su amplia compatibilidad y su extensa documentación, lo que lo convierte en una herramienta muy valiosa tanto para principiantes como para desarrolladores experimentados.
form-group
text-start
form-control
btn
btn-info
Dividiremos la vista en un encabezado y en un pie de página para utilizarlos en las diferentes vistas.
Una práctica muy común es tomar un archivo anterior y convertirlo en un nuevo.
Lo realizaremos para crear la vista de “olvido de la contraseña”.
De la vista principal al controlador.
El controlador despliega la vista de “Olvidaste tu contraseña”.
A medida que avanzamos en las llamadas de los métodos, la ruta relativa se puede ir perdiendo, por lo que la mantendremos en una Constante global.
define()
filter_var() en PHP es una función esencial para validar y sanear datos, como emails, URLs, números e IPs, asegurando que sean seguros y cumplan con un formato específico, protegiendo tu aplicación de datos maliciosos o incorrectos.
Un proceso de validación muy importante es que busquemos en la base de datos el correo electrónico antes de enviar el correo.
Por medio de la instrucción mail() enviaremos el correo electrónico al usuario.
Realizaremos la función para desplegar el arreglo de errores dentro de la vista.
Podemos crear una vista general donde podemos enviar diferentes mensajes erróneos o de aceptación.
Es muy importante saber a donde regresar después de la vista.
Para realizar una encriptación de dos vías (cifrado simétrico reversible) en PHP, utilice las funciones openssl_encrypt() y openssl_decrypt() con el método AES-256-CBC.
Se requiere una clave secreta segura y un vector de inicialización (IV) para garantizar la seguridad.
Necesitamos crear el método y la vista para cambiar la clave de acceso.
hash_hmac(“sha512”,$clave,”llave encriptacion”); Genera una cadena cifrada por el método HMAC.
hash_hmac(“sha512”,$clave,”llave encriptacion”); Genera una cadena cifrada por el método HMAC.
Una vez que tenemos la clave de acceso encriptada, la compararemos con la correspondiente en la base de datos.
hash_hmac(“sha512”,$clave,”llave encriptacion”);
Genera una cadena cifrada por el método HMAC.
session_start(array $options = []): bool
$_SESSION[ ]
session_destroy(): bool
Debemos validar que la sesión sea correctamente creada.
Si el usuario “retrocede” al login, debemos eliminar la sesión.
time() - Regresa los números de segundo transcurridos desde el 1o de enero de 1970, tiempo Unix.
setcookie() - establece una cookie o galleta.
$_COOKIE[] - vector global
Dentro de el archivo del encabezado podemos añadir un menú y manipularlo si es administrativo o un usuario.
La clase de utilidad de Bootstrap .ms-auto establece como margin-start: auto.
Crear las opciones del lado derecho: usuario y salida.
Crear el parámetro private $sesion; el la clase Tablero.
Modificar el constructor en la clase Tablero.
Crear el método de logout() en la clase Tablero.
Id (*) int(11)
nombres varchar(200)
apellidos varchar(200)
correo varchar(200)
clave varchar(500)
telefono varchar(100)
tipoUsuario (Índice) int(11)
estadoUsuario (Índice) int(11)
genero (Índice) int(11)
CREATE TABLE `usuarios` (
`id` int(11) NOT NULL,
`tipoUsuario` int(11) NOT NULL,
`nombres` varchar(200) NOT NULL,
`apellidos` varchar(200) NOT NULL,
`direccion` varchar(500) NOT NULL,
`telefono` varchar(50) NOT NULL,
`correo` varchar(150) NOT NULL,
`clave` varchar(500) NOT NULL,
`genero` int(11) NOT NULL,
`estadoUsuario` int(11) NOT NULL,
`baja` tinyint(4) NOT NULL,
`login_dt` datetime DEFAULT NULL,
`alta_dt` datetime NOT NULL,
`baja_dt` datetime NOT NULL,
`cambio_dt` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
Crearemos la vista con los siguientes campos:
Id (*) int(11)
nombres varchar(200)
apellidos varchar(200)
correo varchar(200)
clave varchar(500)
telefono varchar(100)
tipoUsuario (Índice) int(11)
estadoUsuario (Índice) int(11)
genero (Índice)int(11)
Debemos primero “armar” la vista con los datos necesarios.
Crear la vista con los campos.
Regresar los mismos al controlador y validarlos.
Insertarlos en la base de datos.
Creamos la etiqueta Select
Escribimos la primer etiqueta <option>
Creamos las etiquetas del catálogo con PHP
Verificamos si una de ellas ha sido seleccionada previamente.
Realizaremos el proceso de validación y creación de la clave de acceso temporal.
Los usuarios tendrán un estado “inactivo”.
Devuelve una cadena con barras invertidas antes de los caracteres que deben escaparse. Estos caracteres son:
comilla simple ( ')
comillas dobles ( ")
barra invertida ( \)
NUL (el byte NUL)
Primero verificaremos que el correo no exista previamente en la base de datos.
Después insertamos el registro.
Después enviaremos el correo al usuario.
Aprovecharemos la vista de “Alta” para modificar los datos.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Enviaremos los datos al método “alta”.
Aprovecharemos la vista de “Alta” para mostrar el registro antes de borrarse.
Necesitamos un método para “armar” la vista de baja.
En nuestro caso, la baja será lógica, no física.
Debemos validar que el usuario esté activo.
Actualizar la fecha del login.
Enviarlo a diferente menú (si procede).
Debemos definir el tamaño de la página (una constante).
El método de carátula debemos calcular el número de página.
Determinar el número de registros de la tabla.
Debemos calcular la página y el último registro.
Enviar los datos a la vista
Crear un archivo de librerías
Debemos definir el tamaño de la página (una constante).
El método de carátula debemos recibir el número de página.
Determinar el número de registros de la tabla.
Debemos calcular la página y el último registro.
Enviar los datos a la vista
Crear un archivo de librerías
Debemos definir el tamaño de la página (una constante).
El método de carátula debemos recibir el número de página.
Determinar el número de registros de la tabla.
Debemos calcular la página y el último registro.
Enviar los datos a la vista
Crear un archivo de librerías
Límites y número de páginas (izquierda y derecha)
Crear una vista con los campos a filtrar y una opción para ordenar.
Recibir los datos y armar el filtro, la cadena informativa y la cadena para ordenar.
Almacenar los datos del filtro en la base de datos.
Modificar los querys de consulta.
Lanzar nuevamente la carátula.
Crear una vista con los campos a filtrar y una opción para ordenar.
Recibir los datos y armar el filtro, la cadena informativa y la cadena para ordenar.
Almacenar los datos del filtro en la base de datos.
Modificar los querys de consulta.
Lanzar nuevamente la carátula.
Crearemos los archivos del patrón de diseño MVC tomando como base los anteriores ejercicios.
Crearemos los campos de la vista para recibir los datos de los clientes.
Realizaremos el proceso de validación utilizando el método de alta anterior.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para mostrar el registro antes de borrarse.
Necesitamos un método para “armar” la vista de baja.
En nuestro caso, la baja será lógica, no física.
Aprovecharemos la vista de “Alta” para crear la vista de filtro.
Necesitamos un método para “filtro” la vista.
Tomaremos la estructura del filtro del objeto anterior.
Crearemos los archivos del Controlador, el Modelo y las dos Vistas base.
Adecuaremos el método de la tabla.
Realizaremos el proceso de validación e inserción utilizando el método de alta anterior.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para mostrar crear la vista del filtro.
Necesitamos un método para “armar” la vista del filtro..
Crearemos los archivos del Controlador, el modelo y las dos vistas base.
Adecuaremos el método de la tabla.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para mostrar crear la vista del filtro.
Necesitamos un método para “armar” la vista del filtro.
Crearemos los archivos del Controlador, el modelo y las dos vistas base.
Adecuaremos el método de la tabla.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para mostrar crear la vista del filtro.
Determinar los campos y las llaves foráneas.
Si las listas tienen otro orden, por ejemplo, orden alfabético, los identificadores ya nos funcionan como índices del arreglo.
Crearemos los archivos del patrón de diseño MVC tomando como base los anteriores ejercicios.
En este video realizaremos los archivos Controlador, Modelo y las dos Vistas básicas, así como modificaremos el método getTabla() para su desplegado.
Realizaremos el proceso de validación utilizando el método de alta anterior.
Aprovecharemos la vista de “Alta” para modificar.
Necesitamos un método para “armar” la vista.
Aprovecharemos la vista de “Alta” para mostrar el detalle o producto de la orden de compra.
Necesitamos un método para “armar” la vista de alta.
Validaremos los datos e insertaremos en la base de datos.
El proceso de modificación de un producto de los detalles de la orden de compra es similar a modificar el registro maestro.
El proceso de baja de un producto de los detalles de la orden de compra es similar a la baja lógica en el registro maestro.
El proceso de modificación de una orden de compra tomaremos la misma vista de alta.
Realizaremos el proceso de validación e inserción utilizando el método de alta anterior.
Crearemos los movimientos de almacén como transferencia entre sucursales, mercancía caducada, diferencias de almacén (robo) y devoluciones.
El primer tipo de movimiento será darle entrada a la orden de compra.
Debe ser una orden abierta.
Necesitamos crear la vista para la recepción de la orden de compra.
Una posibilidad es que nos llegue más o menos producto que el solicitado.
Con los datos de la recepción necesitamos: actualizar el stock, crear un nuevo lote, insertar un nuevo movimiento y actualizar el registro del detalle.
Con los datos de la recepción necesitamos: actualizar el stock, crear un nuevo lote, insertar un nuevo movimiento y actualizar el registro del detalle.
Otro proceso es cancelar el producto solicitado de la orden de compra.
Otro proceso es cancelar el producto solicitado de la orden de compra.
Otro estado de una orden de compra es que puede ser cancelada.
También hay que cancelar su detalle.
Crearemos una vista para seleccionar el producto y darla de alta.
En el método del alta recibiremos, limpiaremos y validaremos los datos antes de su inserción.
En el método del alta recibiremos, limpiaremos y validaremos los datos antes de su inserción.
En el método del alta recibiremos, limpiaremos y validaremos los datos antes de su inserción.
Realizaremos una vista en Productos para visualizar los movimientos.
Crearemos los archivos del patrón de diseño MVC tomando como base los anteriores ejercicios.
Crearemos los campos en la vista, según la tabla correspondiente.
Realizaremos el proceso de validación utilizando el método de alta anterior.
Aprovecharemos la vista de “Alta” para capturar los datos del producto.
Obtendremos los datos del detalle de la venta.
Insertaremos el registro del detalle de la venta y lanzaremos la vista de detalle de la misma para ver el total parcial.
Modificaremos el registro del detalle para ser modificado.
El proceso de borrado de un producto de los detalles de la Ventas es similar a modificar el registro maestro.
Realizaremos una baja lógica.
El proceso de baja de un producto de los detalles de la Ventas es similar a la baja lógica en el registro maestro.
El proceso de cierre de una Ventas la realizaremos antes del pago.
Tendremos las cuentas: Efectivo, Tarjeta de crédito o de débito.
El proceso de cierre de una Ventas la realizaremos antes del pago.
Tendremos las cuentas: Efectivo, Tarjeta de crédito o de débito.
Debemos iterar nuevamente para asegurarnos que el saldo es cero y cerrar la venta.
Algunos productos necesitan receta para ser vendidos y muchas veces la receta es retenida.
Validar los datos y subir la imagen de la receta.
Por medio del arreglo $_FILES sabremos si el usuario subió la imagen de la receta.
Una vez que dimos de alta la receta, debemos seguir añadir el producto seleccionado.
Crearemos las vistas y los métodos para la consulta de las recetas.
Dentro de las opciones de la receta, visualizaremos la imagen. No crearemos procesos de alta, baja o cambios.
scandir(): Se utiliza para listar los archivos y directorios que se encuentran dentro de una ruta específica. Devuelve un array con los nombres de los elementos encontrados o false en caso de error.
Crearemos un filtro con más operadores de búsqueda.
Crearemos más recetas para su prueba.
Crearemos un filtro con más operadores de búsqueda.
Crearemos más recetas para su prueba.
Con la información de la vista armaremos la cadena, el filtro y la cadena para ordenar.
Probaremos los filtros y crearemos más operadores lógicos.
La integridad referencial es propiedad de la base de datos. La misma significa que la clave externa de una tabla de referencia siempre debe aludir a una fila válida de la tabla a la que se haga referencia. La integridad referencial garantiza que la relación entre dos tablas permanezca sincronizada durante las operaciones de actualización y eliminación.
La integridad referencial es propiedad de la base de datos. La misma significa que la clave externa de una tabla de referencia siempre debe aludir a una fila válida de la tabla a la que se haga referencia. La integridad referencial garantiza que la relación entre dos tablas permanezca sincronizada durante las operaciones de actualización y eliminación.
La integridad referencial es propiedad de la base de datos. La misma significa que la clave externa de una tabla de referencia siempre debe aludir a una fila válida de la tabla a la que se haga referencia. La integridad referencial garantiza que la relación entre dos tablas permanezca sincronizada durante las operaciones de actualización y eliminación.
Los administradores pueden respaldar la base de datos.
Preparar la vista “mensaje” para mandar el respaldo (dos botones).
Crear en Tablero el método para desplegar el mensaje con dos opciones.
Crear en Tablero el método “respaldarEjecutar()”.
Crear en el Modelo los métodos getTablas() y respaldarTabla().
Crear en MySQL dos métodos: queryCrudo() y getBaseDatos().
Devuelve el string str después de haber escapado todos los caracteres que deben serlo. Estos caracteres son:
comillas simples (')
comillas dobles (")
barra invertida (\)
NUL (el byte NUL)
Cualquier usuario podrá modificar sus datos y su clave de acceso.
Cualquier usuario podrá modificar sus datos y su clave de acceso.
En nuestro sistema tendremos tres roles: Administrador, Operador y Almacén.
Necesitamos calcular los días de la semana del día presente.
Crearemos la extracción de la información por cuenta, día y usuario.
Mostraremos la información en una tabla.
Necesitamos realizar un query que lea las ventas de la semana por usuario, cuenta (tipo de pago) en la tabla de pagos.
Necesitamos realizar una tabla para desplegar los datos de las ventas de la semana.
Necesitamos realizar una tabla para desplegar los datos de las ventas de la semana.
Necesitamos realizar una tabla para desplegar los datos de los últimos movimientos.
Necesitamos verificar toda la funcionalidad del sistema y corregir los posibles errores.
Activaremos la visualización del detalle de la venta.
Utilizaremos la librería de terceros FPDF para generar un PDF con el ticket de la venta.
'I' (Inline): Muestra el archivo directamente en el navegador (opción por defecto).
'D' (Download): Envía el archivo al navegador forzando la descarga automática con el nombre indicado.
'F' (File): Guarda el archivo localmente en el servidor, necesitando una ruta y nombre.
'S' (String): Devuelve el documento como una cadena de caracteres, útil para enviarlo por correo o procesarlo.
'I' (Inline): Muestra el archivo directamente en el navegador (opción por defecto).
'D' (Download): Envía el archivo al navegador forzando la descarga automática con el nombre indicado.
'F' (File): Guarda el archivo localmente en el servidor, necesitando una ruta y nombre.
'S' (String): Devuelve el documento como una cadena de caracteres, útil para enviarlo por correo o procesarlo.
AliasNbPages() en FPDF se usa para definir un texto que se reemplazará por el número total de páginas en un PDF, permitiendo mostrar algo como "Página X de Y", donde {nb} es el alias por defecto para el total de páginas, y se utiliza en métodos como Footer() para añadir la paginación en español, reemplazando {nb} por el número final de páginas al generar el documento.
Vamos a integrar los logos, el favicon y el botón de hamburguesa en el sistema.
Compactar los archivos.
Subiremos los archivos al servidor.
Cambiar los datos de la conexión (modificar el usuario).
Verificar la ruta del mismo.
Verificar el correo electrónico.
Verificar los css para la imagen.
Verificar el respaldo.
El alumno desarrollará una plataforma integral para la gestión de operaciones de una farmacia, incluyendo clientes, productos, recetas, movimientos de almacén (entradas y salidas), venta de productos, control de caja e impresión de tickets de venta..
Una aplicación que es muy recurrente en Internet es el desarrollo de una aplicación para el control de una farmacia. Esta aplicación nos sirve para utilizar lenguajes del lado del cliente, como JavaScript y lenguajes del lado del servidor como PHP, así como conectarlo con bases de datos, en este caso como MySQL, herramientas que son las más utilizadas en la Web. En este curso construiremos las páginas web por medio de Bootstrap 5.3. lo cual nos permitirá tener una aplicación responsiva.
Partiremos desde una página completamente en blanco hasta concluir la parte del usuario (front-end) y la parte del administrador (back-end). Los objetivos del presente curso son:
Conocer los aspectos básicos de PHP y su instalación.
Crear la estructura Modelo, Vista y Controlador para construir la tienda virtual con PHP y MySQL.
Crear el controlador, el modelo y las vistas necesarias para permitir el acceso de los usuarios al sistema.
Crear el menú, controlador, modelo y las vistas necesarias para: el tablero, las cuentas, los movimientos.
Manejo de imágenes y paginación de consultas muy largas
Este curso intermedio, por lo que usted debe tener las bases de programación en Bootstrap, PHP, JavaScript y MySQL, aunque no debe de ser experto en ellos. Es una buena oportunidad para poner en práctica sus conocimientos. Usted debe de contar con una instalación de Apache-PHP-MySQL, como XAMPP, MAMP o WAMP.
Al final del curso contarás con todos los archivos del curso y los esquemas de la base de datos.