Inicio de sesión con Node.js Express y MySQL

Con este tutorial aprenderás sencillamente a implementar en tu servidor local un inicio de sesión con Node.js, Express y MySQL, con el que podrás autenticar el acceso de tus usuarios finales desde el registro en base de datos.

Cabe agregar que esta aplicación es totalmente básica, solo muestra una landing page donde poner usuario y contraseña; y según las validaciones correspondientes se confirma si el usuario puede ingresar a una nueva página, a un home o no.

Si el usuario marca la URL con el home sin validar su usuario y contraseña, le aparecerá un mensaje de usuario o contraseña inválidos, pero en caso de que haya ingresado las credenciales correctamente, relacionadas con la información persistente en la base de datos, entonces, será redireccionado al home, con un mensaje de bienvenida.

Node.js es un potente gestor para funciones de servidor que a base de javascript, es muy popular actualmente, se dice de node.js que es el desarrollo del futuro y por esto es muy importante aprender de esta tecnología.

Puesta a punto del sistema de inicio de sesión con Node.js Express y MySQL

Lo primero es instalar NPM, para poder acceder a la tecnología, instalar las librerías necesarias y activar el servidor para ejecutar la aplicación.

Descarga e Instalación de node.js

El proceso de descarga he instalación no lo abordaré en el presente tutorial, aunque cabe agregar que es bien sencillo es solo acceder a la URL a continuación y realizar todos los procesos por defecto que apliquen para la instalación en tu ordenador, entonces el siguiente es el enlace de descarga de nodejs:

https://nodejs.org/es/download/

Descarga e Instalación de Visual Studio Code

Posterior a la descarga e instalación de nodejs, te recomiendo la instalación de Visual Studio Code que es el editor de código más popular del mundo, esta aplicación la puedes descargar en el enlace a continuación:

https://code.visualstudio.com/download

Descarga he Instalación de XAMPP

Es necesario instalar XAMPP por el servidor de la base de la base de datos lo ejecutaremos desde XAMPP, con phpMyAdmin y MariaDB.

El proceso de la descarga e Instalación tampoco lo abordaré porqué es muy sencillo es cuestión de acceder al siguiente enlace y darle siguiente, siguiente a todas la opciones que te plantea el instalador de XAMPP, el siguiente es el enlace de descarga de XAMPP:

https://www.apachefriends.org/es/download.html

Instalación de Express y MySQL

Express es una infraestructura de aplicaciones web Node.js mínima y flexible que proporciona un conjunto sólido de características para las aplicaciones web y móviles.

Para descargar he instalar Express en el proyecto de inicio de sesión con Node.js Express y MySQL vamos a utilizar la consola desde Visual Studio Code.

Desde VS Code, pulsamos en File, Open Folder y nos vamos donde vayamos a ubicar el proyecto, en mi caso la carpeta que elegí fue login-nodejs.

Ya ubicados en este punto pulsamos en View, Terminal y en la parte inferior de VS Code nos aparecerá una pantalla negra, donde podremos ejecutar comandos ya ubicados desde terminal en la carpeta del proyecto.

Ahora desde terminal copio y pego el siguiente comando:

npm install express --save

Después instalamos Express Session con la siguiente línea de comandos:

npm install express-session --save

Por último instalo una librería de MySQL para Nodejs con el siguiente script:

npm install mysql --save

Ya en este punto desde consola ya puedo iniciar formalmente un proyecto npm, con el siguiente script:

npm init

La consola me va a hacer ciertas preguntas, en el nombre del package name, pongo login después doy enter seguidamente hasta que me pida el entry point, en esta instancia escribo login.js

Diseño del CSS para el formulario del sistema de login en nodejs

Debo crear una carpeta llamada static dentro del proyecto y en esta carpeta crear un documento llamado style.css.

El siguiente es el código con el que se ajustaron los estilos de la aplicación:

* {
    box-sizing: border-box;
    font-family: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
    font-size: 16px;
}
body {
    background-color: #fc7d1c;
}
.login {
    width: 400px;
    background-color: #ffffff;
    box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.3);
    margin: 100px auto;
}
.login h1 {
    text-align: center;
    color: #5b6574;
    font-size: 24px;
    padding: 20px 0 20px 0;
    border-bottom: 1px solid #dee0e4;
}

.login a {
    text-align: center;
    color: #5b6574;
    font-size: 24px;
    padding: 20px 0 20px 0;
    border-bottom: 1px solid #dee0e4;
}
.login form {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    padding-top: 20px;
}
.login form label {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 50px;
    height: 50px;
    background-color: #1984bc;
    color: #ffffff;
}
.login form input[type="password"], .login form input[type="text"] {
    width: 310px;
    height: 50px;
    border: 1px solid #dee0e4;
    margin-bottom: 20px;
    padding: 0 15px;
}
.login form input[type="submit"] {
    width: 100%;
    padding: 15px;
   margin-top: 20px;
    background-color: #1984bc;
    border: 0;
    cursor: pointer;
    font-weight: bold;
    color: #ffffff;
    transition: background-color 0.2s;
}
.login form input[type="submit"]:hover {
  background-color: #1984bc;
    transition: background-color 0.2s;
}

Formulario HTML de Login

Creación del archivo login.html donde estará el formulario donde el usuario final va a ingresar sus credenciales de acceso. Este archivo se crea sobre la carpeta raíz del proyecto, el siguiente es el código que lleva el Formulario:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width,minimum-scale=1">
		<title>ConfiguroWeb</title>
        <!-- the form awesome library is used to add icons to our form -->
		<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.1/css/all.css">
        <!-- include the stylesheet file -->
        <link href="/style.css" rel="stylesheet" type="text/css">
	</head>
	<body>
		<div class="login">
			<h1>Login  | <a  href="https://configuroweb.com/">ConfiguroWeb</a></h1>
			<form action="/auth" method="post">
				<label for="username">
					<!-- font awesome icon -->
					<i class="fas fa-user"></i>
				</label>
				<input type="text" name="username" placeholder="Usuario" id="username" required>
				<label for="password">
					<i class="fas fa-lock"></i>
				</label>
				<input type="password" name="password" placeholder="Contraseña" id="password" required>
				<input type="submit" value="Ingresar">
			</form>
		</div>
	</body>
</html>

Creación de la lógica del Inicio de sesión con Node.js Express y MySQL en el archivo login.js

const mysql = require('mysql');
const express = require('express');
const session = require('express-session');
const path = require('path');

const connection = mysql.createConnection({
	host     : 'localhost',
	user     : 'root',
	password : '',
	database : 'login-socket'
});

const app = express();

app.use(session({
	secret: 'secret',
	resave: true,
	saveUninitialized: true
}));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, 'static')));

// http://localhost:3000/
app.get('/', function(request, response) {
	// Render login template
	response.sendFile(path.join(__dirname + '/login.html'));
});

// http://localhost:3000/auth
app.post('/auth', function(request, response) {
	// Capture the input fields
	let username = request.body.username;
	let password = request.body.password;
	// Ensure the input fields exists and are not empty
	if (username && password) {
		// Execute SQL query that'll select the account from the database based on the specified username and password
		connection.query('SELECT * FROM accounts WHERE username = ? AND password = ?', [username, password], function(error, results, fields) {
			// If there is an issue with the query, output the error
			if (error) throw error;
			// If the account exists
			if (results.length > 0) {
				// Authenticate the user
				request.session.loggedin = true;
				request.session.username = username;
				// Redirect to home page
				response.redirect('/home');
			} else {
				response.send('Usuario y/o Contraseña Incorrecta');
			}			
			response.end();
		});
	} else {
		response.send('Por favor ingresa Usuario y Contraseña!');
		response.end();
	}
});

// http://localhost:3000/home
app.get('/home', function(request, response) {
	// If the user is loggedin
	if (request.session.loggedin) {
		// Output username
		response.send('Te has logueado satisfactoriamente:, ' + request.session.username + '!');
	} else {
		// Not logged in
		response.send('¡Inicia sesión para ver esta página!');
	}
	response.end();
});

app.listen(3000);

Creación de la base de datos con el usuario de acceso

El nombre de la base de datos es login-socket, para el proceso de creación de la base de datos, debes acceder a XAMPP y activar el servicio de Apache y MySQL.

Después se accede a la siguiente URL:

http://localhost/phpmyadmin/

Se crea la base de datos con el nombre login-socket, se pulsa en el apartado SQL y se inserta el siguiente código:

-- phpMyAdmin SQL Dump
-- version 5.1.1
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 09-05-2022 a las 17:18:44
-- Versión del servidor: 10.4.21-MariaDB
-- Versión de PHP: 8.0.11

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de datos: `login-socket`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `accounts`
--

CREATE TABLE `accounts` (
  `id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Volcado de datos para la tabla `accounts`
--

INSERT INTO `accounts` (`id`, `username`, `password`, `email`) VALUES
(1, 'configuroweb', '1234abcd..', 'hola@configuroweb.com');

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `accounts`
--
ALTER TABLE `accounts`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `accounts`
--
ALTER TABLE `accounts`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Activación del servidor nodejs desde consola

En este punto desde la consola, pego el siguiente script y este habilitará la URL http://localhost:3000/ para la ejecución de la aplicación:

node login.js

Si no te muestra desde consola el sistema ningún error solo tendrás que acceder a la siguiente URL y ya podrás probar la aplicación:

http://localhost:3000/

El único usuario de acceso es configuroweb y la contraseña es 1234abcd.. como es lo habitual.

Descarga del sistema de Login en Nodejs

Puedes descargar la aplicación en el siguiente enlace de GitHub

Inicio de sesión con Node.js Express y MySQL

Cualquier duda quedo al pendiente, si requieres más aplicaciones PHP, en Python o JavaScript te recomiendo te suscribas a mi contenido en Youtube y estés al pendiente de cualquier cambio, que vaya haciendo.

Etiquetado: / /

Tutorial Laravel ConfiguroWeb

El presente tutorial Laravel tiene por objeto abortar los temas más importantes de Laravel, para que de manera sencilla, nos adentremos en este gran framework, el más popular del mundo para PHP.

No haré mucho énfasis en las explicaciones sobre los conceptos, más que todo pienso orientar este tutorial a lo más práctico, manteniendo el filtro de la mayor sencillez posible en el mensaje de tal manera que sin gran experiencia en PHP, HTML y Laravel lo puedas replicar.

Si no estás tan familiarizado con PHP puedes ver el tutorial que tengo publicado en este mismo blog en el siguiente enlace:

La lista de reproducción del tutorial PHP con 29 vídeos donde se abarcan temas de PHP de básico a avanzado:

Lección 1 Tutorial Laravel ConfiguroWeb – Instalación Laravel en Windows con XAMPP y Composer

En el vídeo a continuación se explica el proceso de Instalación Laravel en Windows con XAMPP y Composer, abordando la Instalación de cada una de las aplicaciones, relacionadas hasta su puesta a punto en un servidor local

Instalación Laravel en Windows con XAMPP y Composer

Lección 2 Tutorial Laravel ConfiguroWeb – Qué son las Rutas en Laravel y Cómo se usan

En el vídeo a continuación se explica el funcionamiento de las Rutas de Laravel, su importancia para garantizar la seguridad de tu aplicación web, ya que Laravel solo le permite el acceso al usuario final a la carpeta public, gestionando efectivamente el modelo vista controlador

Qué son las Rutas en Laravel y cómo se usan

Lección 3 Tutorial Laravel ConfiguroWeb – Qué son los Controladores

Qué son los Controladores en Laravel

La principal característica de Laravel es organizar efectivamente los flujos de trabajo en el proceso de desarrollos, es bien sabido que Laravel utiliza el modelo vista controlador, por este motivo aunque las rutas soportan ampliamente la lógica de negocio para luego cargar las vistas correspondientes, lo ideal es que los procesos de cálculo y desarrollo se realicen con controladores.

Los controladores se pueden generar manualmente en la siguiente ubicación app/Http/Controllers, pero lo ideal es generarlos desde consola por medio de artisan que es un componente de Laravel, que ofrece un conjunto de comandos para realizar diferentes tareas, podemos ver todos los comandos que ofrece artisan directamente en consola con el siguiente comando

php artisan list

La recomendación para general los controladores es desde consola con el siguiente comando

php artisan make:controller "el nombre del controlador"

Se recomienda que el lado del nombre del controlador por convención poner la palabra controller, por ejemplo para un controlador con el index, el nombre quedaría indexController el comando en consola quedaría de la siguiente manera

php artisan make:controller indexController

El objetivo del controlador es llevar toda la lógica de negocio de la vista que se va a entregar según la entrada del usuario final.

Próximamente subiré un video explicativo de los controladores. y continuaré con las lecciones del tutorial.

Etiquetado: / /

Tutorial PHP y MySQL

Este tutorial PHP y MySQL es la continuación de uno previo que tengo en mi canal. En el siguiente enlace tengo la lista de reproducción:

Tutorial PHP ConfiguroWeb


En el tutorial inicial, abarco temas exclusivos de PHP desde básico hasta avanzado en 29 vídeos en promedio de más de 30 minutos. En el presente tutorial de PHP y MySQL se abarcarán temas específicos de la relación de PHP y su gestión con las bases de datos.

Tutorial PHP y MySQL Introducción

Esta relación intima entre PHP y MySQL es muy, muy funcional y por este motivo en este blog, publico constantemente aplicaciones de libre distribución y de pago con estas tecnologías.

Que es MySQL

MySQL es un sistema de administración de bases de datos relacionales (RDBMS) desarrollado por Oracle que se basa en un lenguaje de consulta estructurado (SQL).

Un RDBMS es un conjunto de herramientas de software utilizadas para implementar, administrar y consultar bases de datos.

Principales Motivos por los que usar MySQL

  • MySQL es fácil de usar y a la vez muy potente, rápido, seguro y escalable.
  • MySQL se ejecuta en una amplia gama de sistemas operativos, incluidos UNIX o Linux, Microsoft Windows, Apple Mac OS X y otros.
  • MySQL admite SQL estándar (lenguaje de consulta estructurado).
  • MySQL es una solución de base de datos ideal para aplicaciones pequeñas y grandes.
  • MySQL es desarrollado y distribuido por Oracle Corporation.
  • MySQL incluye capas de seguridad de datos que protegen los datos confidenciales de los intrusos.

Que es PHP

PHP es el lenguaje de desarrollo de código abierto más popular del mundo en desarrollo web, que tiene como principal característica su gran capacidad de integración con el código HTML

Como Conectarse a MySQL desde PHP

Tutorial PHP y MySQL

En este Tutorial PHP y MySQL vamos a aprender inicialmente a conectar nuestra aplicación con la base de datos en MySQL.

PHP ofrece dos formas posibles de conexión con bases de datos en MySQL, Las extensiones MySQLi y PDO.

MySQLi es la versión actual y mejorada de la API de MySQL para conectarse efectivamente a las bases de datos. Su gran diferencia con PDO es que este último no es solo compatible con MySQL sino con otras tecnologías, haciendo que la aplicación pueda tener una mayor capacidad de evolución que una exclusiva con MySQLi.

La extensión MySQLi tiene como ventaja sobre PDO que es más sencilla en su configuración y por ende muchos desarrolladores web la prefieren.

Conexión con MySQLi

La conexión a la base de datos con la extensión de MySQLi se puede hacer muy fácilmente a través de la función

mysqli_connect()

A continuación se muestra el código de conexión a la base de datos por línea de procedimientos:

Línea de Procesos

$link = mysqli_connect("donde está alojada la base de datos", "usuario", "contraseña", "nombre de base de datos");

Programación Orientada a Objetos

$mysqli = new mysqli("donde está alojada la base de datos", "usuario", "contraseña", "nombre de base de datos");

Conexión con PDO

PDO no está condenado exclusivamente a trabajar con MySQL, proporciona un capa de abstracción de acceso a los datos, esto significa que, independientemente de con que base de datos se esté se esté trabajando, permitirá que se usen las mismas funciones para realizar consultas y obtener datos.

Programación Orientada a Objetos con PDO

$pdo = new PDO("mysql:host=hostname;dbname=base_de_datos", "usuario", "contraseña");

El parámetro de nombre de host en PDO en la sintaxis anterior es donde está la base de datos alojada (por ejemplo localhost) o la dirección IP del servidor de MySQL en Internet o en un red LAN, mientras que los parámetros de nombre de usuario y contraseña especifican las credenciales para acceder al servidor MySQL.

El siguiente ejemplo muestra cómo conectarse al servidor de base de datos MySQL usando MySQLi por línea de procesos:

Ejemplo de Conexión MySQLi con Línea de Procesos

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Verificando Conexión
if($link === false){
    die("ERROR: No se pudo hacer la conexión. " . mysqli_connect_error());
}
 
// Mostrar conexión exitosa
echo "Conexión exitosa desde MySQLi Procedimientos. Información del anfitrión: " . mysqli_get_host_info($link);
?>

Ejemplo de Conexión MySQLi con Programación Orientada a Objetos

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Verificando Conexión
if($mysqli === false){
    die("ERROR: No se pudo hacer la conexión. " . $mysqli->connect_error);
}
 
// Mostrar conexión exitosa
echo "Conexión exitosa desde MySQL con POO: " . $mysqli->host_info;
?>

Ejemplo de Conexión PDO con Programación Orientada a Objetos

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "",);
    
    // Establecer el modo de error PDO en excepción
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Mostrar conexión exitosa
    echo "Conexión exitosa. Información del Host: " . 
$pdo->getAttribute(constant("PDO::ATTR_CONNECTION_STATUS"));
} catch(PDOException $e){
    die("ERROR: No pudo conectar. " . $e->getMessage());
}
?>

Cerrar la conexión del servidor de base de datos MySQL

La conexión con el servidor de la base de datos MySQL se cerrará automáticamente tan pronto como finalice la ejecución del script. Sin embargo, si deseas cerrar la conexión manualmente se puede hacer llamando a la función mysqli_close() de PHP.

Script de ejemplo de cierre de conexión de base de datos con MySQLi en línea de procesos

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Verificando Conexión
if($link === false){
    die("ERROR: No se pudo hacer la conexión. " . mysqli_connect_error());
}
 
// Mostrar conexión exitosa
echo "Conexión exitosa desde MySQLi Procedimientos. Información del anfitrión: " . mysqli_get_host_info($link);

// Cierre de Conexión
mysqli_close($link);
echo "</p></p></p> En esta instancia se ha cerrado la conexión de la base de datos con MySQLi en línea de procesos."

?>

Script de ejemplo de cierre de conexión de base de datos con MySQLi y Programación Orientada a Objetos

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Verificando Conexión
if($mysqli === false){
    die("ERROR: No se pudo hacer la conexión. " . $mysqli->connect_error);
}
 
// Mostrar conexión exitosa
echo "Conexión exitosa desde MySQL con POO: " . $mysqli->host_info;

// Cerrar conexión
$mysqli->close();

echo "</p></p></p> En esta instancia se ha cerrado la conexión de la base de datos con MySQLi con POO"
?>

Script de ejemplo de cierre de conexión de base de datos con PDO

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "",);
    
    // Establecer el modo de error PDO en excepción
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Mostrar conexión exitosa
    echo "Conexión exitosa. Información del Host: " . 
$pdo->getAttribute(constant("PDO::ATTR_CONNECTION_STATUS"));
} catch(PDOException $e){
    die("ERROR: No pudo conectar. " . $e->getMessage());
}

// Cierre de conexión
unset($pdo);
echo "</p></p></p> En esta instancia se ha cerrado la conexión de la base de datos con PDO"
?>

Cómo crear una base de datos desde PHP

Ya abordamos el tema de como Conectarse a MySQL desde PHP en esta sección del tutorial PHP y MySQL aprenderás cómo ejecutar una consulta SQL para crear una base de datos.

La declaración CREATE DATABASE se utiliza para crear una nueva base de datos en MySQL

A continuación se crea una consulta SQL usando la declaración CREATE DATABASE, pasándola a la función mysqli_query() de PHP para finalmente crear la base de datos.

Creación de la Base de Datos con MySQLi en Línea de Procesos

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
$link = mysqli_connect("localhost", "root", "");
 
// Verificando Conexión
if($link === false){
    die("ERROR: No se pudo hacer la conexión. " . mysqli_connect_error());
}
 
// Creación de la base de datos
$sql = "CREATE DATABASE demo";
if(mysqli_query($link, $sql)){
    echo "Base de Datos Creada Exitósamente";
} else{
    echo "ERROR: No se pudo ejecutar $sql. " . mysqli_error($link);
}
 
// Cierre de la conexión
mysqli_close($link);
?>

Creación de la Base de Datos con MySQLi en POO

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
$mysqli = new mysqli("localhost", "root", "");
 
// Verificando Conexión
if($mysqli === false){
    die("ERROR: No se pudo conectar. " . $mysqli->connect_error);
}
 
// Creación de la base de datos
$sql = "CREATE DATABASE demo";
if($mysqli->query($sql) === true){
    echo "Base de datos creada exitósamente";
} else{
    echo "ERROR: No se pudo ejecutar $sql. " . $mysqli->error;
}
 
// Cierre de la conexión
$mysqli->close();
?>

Creación de la Base de Datos con PDO

<?php
/* Intento de conexión al servidor MySQL. Suponiendo que está ejecutando MySQL
servidor con configuración predeterminada (usuario 'root' sin contraseña) */
try{
    $pdo = new PDO("mysql:host=localhost;", "root", "");
    // Mostrando errores de conexión PDO
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: No se pudo establecer la conexión. " . $e->getMessage());
}
 
// Ejecutando la consulta de creación de la base de datos
try{
    $sql = "CREATE DATABASE demo";
    $pdo->exec($sql);
    echo "Base de datos creada exitósamente";
} catch(PDOException $e){
    die("ERROR: No se pudo executar la consulta $sql. " . $e->getMessage());
}
 
// Cierre de la conexión
unset($pdo);
?>
Etiquetado: / /

Como recibir pagos en WordPress con Stripe

Aprende como recibir pagos en WordPress con Stripe de manera muy sencilla, básicamente con la instalación de un plugin, dándote de alta en Stripe y con unos pequeños ajustes que te explicaré a continuación ya podrás agregar sencillamente los productos en tu tienda, sin necesidad de Woocommerce, aunque si lo prefieres también puedes trabajar con Woocommerce sin problemas solo que esta configuración en específico excede el alcance de este tutorial.

Qué es Stripe?

Es un intermediario estratégico que facilita el proceso de implementar una pasarela de pagos en tu página web sin problemas, cabe agregar que a la fecha esta plataforma no está habilitada para algunos países, como Colombia, sin embargo en países como México y España esta disponible.

Como implementar Stripe en mi sitio web con WordPress

Lo primero es registrarse en Stripe, si tu país no aparece en los disponibles, podrás continuar el tutorial, únicamente poniendo otro país como Estados Unidos, España o México, y podrás implementar Stripe solo en modo de prueba. Sin embargo esta configuración es muy relevante aplicarla como desarrolladores ya que muchas empresas requieren de estas habilidades al contratar programadores.

Registro de usuario en Stripe

Para el proceso de registro de usuario en Stripe basta con hacer clic en el enlace a continuación:

https://dashboard.stripe.com/register

Diligencia el formulario de registro y Stripe te enviará un email de activación a tu bandeja de correo electrónico ingresada.

Con este proceso ya podrás utilizar los servicios en modo de prueba de Stripe y si tu país está incluido en los autorizados, podrás continuar el proceso de registro, donde será necesario que ingreses tu información bancaria, para que puedas recibir pagos sin ningún inconveniente.

Instalación del Plugin que permite recibir pagos en WordPress con Stripe

El nombre del plugin relacionado es Accept Stripe Payments, el siguiente es el enlace de información del plugin mencionado:

Accept Payments via Stripe

En cualquier caso lo puedes descargar directamente desde la opción de Añadir Nuevo Plugin, en el backend de WordPress.

Activación y Configuración del Plugin Accept Payments via Stripe

Posterior a la instalación y activación del Plugin de conexión con Stripe, solo queda agregar los productos, lo importante es extraer las variables

  • Clave publicable
  • Clave secreta

Con estas variables ingresadas correctamente ya será posible que tus clientes puedan hacer compras directas en la página, en mi caso de ejemplo mi producto es digital y el sistema permite su descarga, posterior a la compra, sin configuraciones adicionales.

Como agregar productos en tu sitio web para recibir pagos en WordPress con Stripe

Posterior a la activación del plugin relacionado, pulsa en la opción Stripe Payments y luego Añadir nuevo producto, como se muestra en la pantalla a continuación:

Diligenciar la información del producto a agregar

Después de pulsar la opción de agregar producto, solo necesitar poner la información de tu producto como se puede visualizar en el GIF a continuación:

Diligenciar la información del producto a agregar

Diligenciar la llave publicable y la llave privada

Estas llaves son la clave para que funcione todo el proceso, y Stripe te las provee, solo es cuestión de copiar y pegarlas, al final del formulario de Añadir nuevo producto. Como se muestra en la pantalla a continuación:

Muchas gracias por haber llegado hasta acá, este y un gran número de tutoriales los puedes encontrar en mi blog, así que te recomiendo que te pegues una pasada por mi contenido, además tengo más de 50 aplicaciones gratuitas en PHP, MySQL, Javascript y Python que te podrían interesar en el siguiente enlace:

Igualmente voy acumulando un grupo de aplicaciones premium a muy bajos precios en el siguiente enlace:

https://configuroweb.com/tag/premium/

Quedo al pendiente de cualquier duda, si requieres cualquier información o si deseas contratar mis servicios, el siguiente es mi enlace de Whatsapp:

https://configuroweb.com/WhatsappMessenger

Etiquetado: / /

Cómo utilizar la Terminal | Comandos básicos de Bash

En este muy práctico y sencillo tutorial aprenderás cómo utilizar la Terminal con unos comandos básicos de Bash.

El conocimiento de Terminal es muy necesario en tu gestión diaria como desarrollador, muchas veces necesitarás hacer implementaciones en servidores sin entorno gráfico.

El terminal es muy rápido, seguro, eficiente en la gestión de procesos del día, más que todo a nivel del Backend. Se que encontrarás muy entretenidos estos comandos que vas a poder procesar desde un ordenador Windows sin ningún inconveniente.

Aplicaciones previas para saber cómo utilizar la terminal de manera avanzada

Es necesario antes de cualquier cosa, para seguir este tutorial de manera sencilla instalar VS Code y Git ya que todos los comandos los vamos a ejecutar con Git Bash, la recomendación es instalar estas aplicaciones con todos los parámetros por defecto, seleccionar todos los checks de Visual Studio Code añadirlo a la PATH, agrégale todas las opciones posibles.

Aplicaciones para descargar

Los enlaces de las aplicaciones que nos enseñan cómo utilizar la terminal son los siguientes:

Visual Studio Code Para Windows

Visual Studio Code Para Mac

Git para Windows

Git para macOS

Comandos básicos desde Git Bash para usar en la terminal

Los comandos son los siguientes:

A continuación va el compendio donde voy a explicar 18 comandos de alta relevancia y utilidad para trabajar con Servidores desde la terminal:

pwd

Este comando en inglés resume present working directory y cuando lo ejecutas en consola te dice la ubicación donde te encuentras en se momento:

$ pwd
/c/xampp/htdocs

ls

Te lista los archivos y directorios contenidos en tu ubicación actual, por ejemplo yo estoy en la carpeta htdocs y tengo los siguiente archivos y directorios listados:

$ ls
 academia               control_inventario.rar     img
 alquiler_automoviles   control_inventario_1       index.php
 alquiler_motos         crud                       laravel
 applications.html      crud-ajax-datatable        libreria
 archivos_en_linea      dashboard                  libros_en_linea     
 archivos_online        deportes                   libros_pdf_en_linea 
 asistencia            'errores comunes banco w'   llenar_tabla_json   
 asistencia_empleados   errores_comunes_bw         materiales
 biblioteca             escrapeargoogleconphp      pagos
 biblioteca_1           escrapinggoogle            pos_2021
 biblioteca_sqlite      farmacia                   prueba
 bitnami.css            favicon.ico                restaurante
 carrito_compras        generador_codigo           sistema_monitoreo   
 clientes               gestion_clientes           suscribcion
 compartir_foto         gestion_inventario         webalizer
 configuroweb           helpdesk                   xampp
 control_inventario     html5

cd

Con este comando y la ruta especificada podemos movernos a donde queramos y para devolvernos a una carpeta previa se requiere poner el ..

En el ejemplo a continuación ingreso desde la ubicación en la que estaba a mi carpeta de documentos:

cd C:/Users/Usuario/Documents

Ya en la ubicación de documentos si utilizo el comando pwd, me mostraría lo siguiente:

$ pwd
/c/Users/Usuario/Documents

Este comando con el .. se devuelve a la carpeta anterior, tal como se ilustra en el siguiente ejemplo:

$ cd ..


Al utilizar PWD confirmo que ahora estoy en la carpeta de Usuario
$ pwd
/c/Users/Usuario

chmod

Este comando es uno de los más importantes de los que hablaré hoy, incluso podría tener su propia publicación.

Con chmod se pueden cambiar los permisos para acceder a los archivos, con este tipo de configuración se implementan por ejemplo los accesos a hosting, donde podemos leer y escribir pero no tenemos poderes de ejecución sobre las maquinas virtuales.

Los usuarios de hosting compartido a pesar de que no pueden ejecutar instrucciones a nivel de las máquinas virtuales, para los archivos que suben al hosting, si tienen plenos permisos de lectura, escritura y ejecución.

El comando chmod se basa en el sistema octal y parametriza el documento con un número de tres dígitos, por ejemplo para dar permisos completos de lectura, escritura y ejecución, a un usuario, su grupo y otros se escribe el 777

Como en el siguiente ejemplo:

$ chmod 777 documento.php

Si quisieras que sobre un documento en específico, los demás usuarios del grupo ni los otros usuarios fuera del grupo solo puedan leer el documento, no puedan escribir, ni ejecutar el número quedaría de la siguiente manera:

$ chmod 744 documento.php

En el enlace a continuación se habla con mucho más detalle del comando chmod, es una página de documentación de Oracle

https://docs.oracle.com/cd/E19620-01/805-7644/x-5lbib/index.html

La siguiente imagen ilustra las configuraciones posibles del comando chmod

Comando chmod en terminal
Comando chmod en terminal

Se pueden ver los permisos específicos de los documentos en un directorio con el comando ls -l en el ejemplo a continuación se muestra el cambio en la configuración de permisos aplicados al archivo documento.php

$ ls -l
total 0
-rw-r--r-- 1 Usuario 197121 0 dic. 17 15:35 documento.php

mkdir

Este comando te permite crear directorios, se pueden crear varias carpetas al mismo tiempo como en el ejemplo en el que creo al mismo tiempo los directorios dir1, dir2, dir3 y dir4

$ mkdir dir1 dir2 dir3 dir4

$ ls
dir1  dir2  dir3  dir4  documento.php

En adición se pueden crear carpetas con diferentes permisos con la bandera -m, una bandera es un parámetro que en cierta manera modifica la acción del comando principal.

La bandera -m en este contexto se utiliza como el comando chmod

En este ejemplo específico el comando quedaría de la siguiente manera:

$ mkdir -m 744 dir5

echo

Este comando imprime en pantalla lo que quieras escribir, como en el ejemplo a continuación que se muestra un mensaje de “hola mundo por consola”.

$ echo hola mundo por consola
hola mundo por consola

touch

Este comando crea un archivo si no existe ninguno con el nombre especificado y generalmente ingresa en modo edición del archivo creado.

En el ejemplo a continuación se crea un nuevo archivo llamado archivo.php Se puede ver con el comando ls como aparece listado el nuevo archivo archivo.php en la ubicación desde donde se genera el comando:

$ touch archivo.php

$ ls
archivo.php  dir1  dir2  dir3  dir4  dir5  documento.php

vim

Vim es un editor de texto que funciona desde la terminal y que viene incrustado en git bash

Si quieres saber más de vim o instalarlo puedes acceder al siguiente enlace:

https://www.vim.org/download.php

Vim como editor de código es tan popular que bien vale una publicación independiente para explicarlo ampliamente, ya que excede los límites de este tutorial donde se explica a nivel básico cómo utilizar la Terminal.

Con solo escribir vim y el nombre del documento a editar en el terminal y presionas enter, accedes a un ambiente de edición del documento para trabajar con vim.

Con el siguiente tramo de código al presionar enter accedes a un ambiente de edición como la captura a continuación:

$ vim archivo.php

Pantalla de Inicio de vim

Pantalla de Inicio de VIM

Esta imagen es vim en su pantalla de inicio con el archivo.php, sin embargo en este estado aun no se puede editar el documento archivo.php aun, se debe presionar i, para que se habilite el cursor, como se ve en la pantalla a continuación:

Modo de edición de VIM

Para guardar los cambios en el documento abierto de vim, se presiona la tecla de Escape y se escribe el comando :w

Guardar cambios en vim

Para salir de vim se presiona la tecla Escape y se escribe el comando :q

Salir de vim

El cambio al salir de vim queda cargado en el documento como se ve en la captura relacionada:

Guardar cambios en vim

nano

nano es un micro editor muy práctico y sencillo de utilizar, funciona muy similar a vim, solo ejecutas nano y el nombre del archivo que te interesa editar. Puedes ver su documentación oficial en el siguiente enlace:

https://www.nano-editor.org/docs.php

En el siguiente ejemplo se como el acceso al mismo documento archivo.php con el comando nano

$ nano archivo.php

La pantalla de inicio de inmediato entra en modo edición y los comandos disponibles de para escribir, pegar texto, reemplazar entre otros, se ven disponibles con atajos de teclado, como en la imagen a continuación:

Pantalla de Inicio nano

Salir es muy sencillo, solo basta con presionar CTRL + X el sistema consulta si se van a guardar los cambios o no, se elige la opción correspondiente, se presiona enter y de ese modo queda el documento editado.

cat

Este comando se utiliza para concatenar la salida en consola del terminal, si se utiliza con el operador > se sobre escribe la información de un documento al otro, con los operadores de mayor que juntos >> se une lo citado en ambos documentos.

Para el ejemplo voy a utilizar dos archivos archivo.php con la información que ya se le ingresó desde vim y desde nano en consola y documento.php con la frase “Aprende cómo utilizar la Terminal”

$ cat archivo.php documento.php
comando cat y salida en consola

Comando cat con operador mayor que >

Este comando sobre escribe la información de un archivo en el otro, sin escribirlo en consola

$ cat documento.php > archivo.php

En la captura a continuación se muestra como se sobre escribió la información de documento.php en archivo.php:

Comando cat con operador mayor que

Comando cat con doble operador mayor que >>

Este comando une la información de los archivos uniendo la información, sin sobre escribir la información de un archivo en el otro, como se muestra en el ejemplo a continuación

Comando cat con doble operador mayor que

grep

Este comando es de búsqueda, según parte de palabra clave, encuentra las líneas que coinciden la palabra de búsqueda por ejemplo ‘ento’ y muestra las líneas que coinciden

$ grep ento archivo.php
Frase documento.php
comando grep búsqueda

diff

Este comando compara dos archivos línea por línea he imprime las líneas diferentes por cada línea. como en el ejemplo a continuación:

$ diff documento.php archivo.php
1c1
< Frase documento.php
\ No newline at end of file
---
> Frase archivo.php
\ No newline at end of file
Comando diff

head y tail

Este par de comandos extraen las primeras y últimas líneas de un documento o caracteres de un documento, respectivamente, basta con enumerar el número de línea o carácter con las banderas -n para líneas y -c para caracteres, como se ve en el ejemplo a continuación:

Ejemplo comando head en terminal

$ head -n1 documento.php
Frase documento.php

$ head -c3 documento.php
Fra
Comando head en terminal

Ejemplo comando tail en terminal

$ tail -n1 documento.php
Ultima frase  archivo documento.php

$ tail -c3 documento.php
php
Comando tail en terminal

rm

Con este comando se eliminan archivos desde consola, es uno de los comandos más delicados de los que he hecho referencia en este tutorial donde se explica cómo utilizar la Terminal a nivel general.

Este comando también puede eliminar directorios, requiere de unas banderas adicionales y con mayor profundidad trataré el tema en publicaciones posteriores, por el momento va un ejemplo del comando rm en terminal.

$ rm eliminar_archivo.php

clear

Este comando borra lo escrito en pantalla, limpia la pantalla, su función es tan sencilla que no requiere ningún otro parámetro.

cp

El comando cp copia archivos de un directorio a otro, solo requiere la ruta y realiza el proceso como en el ejemplo a continuación:

cp archivo.php dir5/archivo_copiado.php
Comando cp en terminal

Estos han sido 18 comandos útiles de la terminal que seguramente en tu camino de programación encontrarás, en este blog encontrarás más que todo aplicaciones desarrolladas en PHP, MySQL, Python y Javascript de libre distribución en el enlace a continuación:

Así como aplicaciones de pago, que te podrían interesar:

https://configuroweb.com/tag/premium/

Si requieres contactarme por cualquier duda que llegues a tener, lo puedes hacer directamente a mi Whatsapp en el siguiente enlace:

https://configuroweb.com/WhatsappMessenger

quedo al pendiente de cualquier duda, saludos.

Etiquetado: / /

Cómo hacer Web Scraping con PHP

Aprende Cómo hacer Web Scraping con PHP en cualquier página. en este ejemplo vamos a trabajar con la página de resultados de Google, vamos a utilizar cURL que es una librería PHP que gestiona peticiones HTTP con las que vamos a republicar en nuestro servidor local, la información de resultados de una búsqueda específica en Google.

Scraping es un proceso que se aplica a los sitios web, para extraer información de estos, un ejemplo útil podría ser saber el precio del dólar con base en unos portales específicos, para re publicar el consolidado en Twitter, o en un blog relacionado con el tema.

Puesta a punto del proyecto sobre el cómo hacer Web Scraping con PHP

Para llevar a cabo el proceso de Scraping voy a usar una clase php llamada simple-html-dom que permite extraer y modificar el DOM HTML de una manera sencilla y efectiva.

El DOM representa un documento en el navegador como un árbol de nodos y cada nodo representa una parte del documento (puede tratarse de un elemento, una cadena de texto o un comentario.

Descarga de la clase simple-html-dom

La clase simple-html-dom la puedes descargar en su última versión en el siguiente enlace:

https://sourceforge.net/projects/simplehtmldom/files/latest/download

Descargarás un archivo ZIP que puedes descomprimir con WinRAR si estás en Windows sin inconvenientes. De este archivo el único que necesitarás para trabajar en este mini proyecto es el llamado simple_html_dom.php

Este documento simple_html_dom.php lo llamaremos desde nuestro index, por medio de una función require o include PHP para luego llamar las funciones y métodos de esta clase que lleguemos a necesitar.

Elección del termino de búsqueda en Google

Esta fase es bastante sencilla, basta con poner la frase que quieres escrapear de Google, para mi ejemplo voy a utilizar la siguiente frase:

aplicaciones php gratis

Después de poner tu frase presionas enter y te va a salir la típica pantalla de resultados de Google sobre tu frase elegida, se debe ignorar el parámetro source, y todo lo que esté después del query en sí, para mi ejemplo, la url original era esta:

https://www.google.com/search?q=aplicaciones+php+gratis&oq=aplicacio&aqs=chrome.0.69i59j69i57j0i271j69i60l4j69i61.8657j0j4&sourceid=chrome&ie=UTF-8

Después de gratis, el ampersand y todo lo demás se retira dejando la URL de la siguiente manera:

https://www.google.com/search?q=aplicaciones+php+gratis

Ambas generar el mismo resultado, pero la segunda hará el trabajo más sencillo para la librería nativa cURL de PHP.

Script index.php

Documento index.php resultante con la implementación de cURL para imprimir los resultados del texto de los enlaces de la pantalla de Google sobre la consulta de aplicaciones php gratis

<?php

include('simple_html_dom.php');

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://www.google.com/search?q=aplicaciones+php+gratis');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
curl_close($curl);
//echo $result;

$domResult = new simple_html_dom();
$domResult->load($result);

foreach($domResult->find('a[href^=/url?]') as $link)
echo '<h1>' . $link->plaintext . ' </h1><br>';

?>

Repositorio en GitHub del mini proyecto de web scraping en PHP


https://github.com/configuroweb/scraping-php
2 forks.
3 stars.
0 open issues.

Recent commits:

Instalación alternativa del proyecto en un servidor local

Puedes instalar el mini proyecto con XAMPP como es habitual en mis publicaciones, para eso te puedes guiar de la siguiente publicación:

Cualquier cosa quedo al pendiente !!

Etiquetado: / /

Como enviar correos desde PHP desde un hosting

El enviar correos desde PHP desde un hosting es muy sencillo, basta con definir los parámetros correspondientes, este proceso se diferencia bastante en su complejidad del envío de correos gmail desde un servidor local.

La función mail en PHP tiene unos variables muy específicas como las siguientes:

$to = "tucorreo@correo.com";
$subject = "Acá va el asunto que verá a quien le envías el correo";
$message = "Este es el cuerpo del correo que se va a enviar";

//Esta es la función que envía el correo 
mail($to, $subject, $message);

En el vídeo a continuación se explica el proceso completo paso a paso:

Explicación del como enviar correos desde PHP desde un hosting

El envío del correo, generalmente se utiliza para los formatos de contáctenos, cabe agregar que no todos los hosting tienen la configuración tan sencilla como la tiene Hostinger, por eso recomiendo este proveedor que es con quien tengo alojada mi página personal y de demos https://appscweb.com/

La ventaja que tengo con Hostinger es que con el dominio, ya tengo la opción de 100 correos en mi plan premium, y desde ese correo se envía fácilmente donde se requiera.

En este caso debo primero crear un correo, aunque nunca se use, por ejemplo yo tengo un correo que nunca uso, que se llama hola@appscweb.com que es desde donde envía el contáctenos. No tienes nada más que crear ese correo y ya puedes usar la función mail desde cualquier página desde tu sitio web sin inconvenientes.

En mi ejemplo a continuación muestro el index de mi página personal appscweb.com, tal como la tengo. En el código puedes encontrar que tengo el formulario de contacto, que envía la información a contact_me.php que es quien tiene la lógica de enviar el correo.

En adición está página tiene unas opciones de validación para garantizar que la información del formulario se vaya completa, que no haya campos vacíos y que posterior al envío se vacíe el formulario por eso desde la URL url: “././mail/contact_me.php” el archivo contact_me.js recibe los parámetros para realizar la validación con el método POST

Configuración del hosting para enviar los correos

El método que yo uso para enviar correos gmail desde PHP con la función mail desde mi hosting lo puedes replicar fácilmente con el código que te comparto a continuación, todo lo que debes hacer es crear una carpeta llamada mail y poner dentro de esta el código de contact_me.php, posteriormente crear una carpeta llamada js y poner el archivo contact_me.js dentro de esta.

El archivo index.html lo pones en la carpeta raíz del host y ya con esto te debe funcionar sin inconvenientes.

Archivos relacionados para el proceso del envío de correos desde un hosting

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="img/favicon.png">
<title>Mauricio Sevilla - Desarrollador PHP</title>
<meta name="description" content="">
<meta name="author" content="">


<meta name="google-site-verification" content="tmNuvXmvZX-7RgCougnA3u_08MjqzcSxA-l_eZudns8" />

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-62KY7R8YTS"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-62KY7R8YTS');
</script>



<!-- Favicons
    ================================================== -->
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
<link rel="apple-touch-icon" href="img/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="72x72" href="img/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="114x114" href="img/apple-touch-icon-114x114.png">

<!-- Bootstrap -->
<link rel="stylesheet" type="text/css"  href="css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="fonts/font-awesome/css/font-awesome.css">

<!-- Stylesheet
    ================================================== -->
<link rel="stylesheet" type="text/css"  href="css/style.css">
<link rel="stylesheet" type="text/css" href="css/prettyPhoto.css">
<link href='http://fonts.googleapis.com/css?family=Lato:400,700,900,300' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700,800,600,300' rel='stylesheet' type='text/css'>
<script type="text/javascript" src="js/modernizr.custom.js"></script>

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body id="page-top" data-spy="scroll" data-target=".navbar-fixed-top">

<!-- Header -->
<header id="header">
  <div class="intro">
    <div class="container">
      <div class="row">
        <div class="intro-text">
          <h1><span class="name">Mauricio Sevilla Britto</span></h1>
          <p>Desarrollador #PHP | Técnico #IT | #GrowthHacker</p>
          <a href="#about" class="btn btn-default btn-lg page-scroll">Saber más</a> </div>
      </div>
    </div>
  </div>
</header>
<!-- Navigation -->
<div id="nav">
  <nav class="navbar navbar-custom">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-main-collapse"> <i class="fa fa-bars"></i> </button>
        <a class="navbar-brand page-scroll" href="#page-top">Mauricio Sevilla Britto</a> </div>
      
      <!-- Collect the nav links, forms, and other content for toggling -->
      <div class="collapse navbar-collapse navbar-right navbar-main-collapse">
        <ul class="nav navbar-nav">
          <!-- Hidden li included to remove active class from about link when scrolled up past about section -->
          <li class="hidden"> <a href="#page-top"></a> </li>
          <li> <a class="page-scroll" href="#about">Acerca de mí</a> </li>
          <li> <a class="page-scroll" href="#skills">Skills</a> </li>
          <li> <a class="page-scroll" href="#portfolio">Portafolio</a> </li>
          <li> <a class="page-scroll" href="#resume">Experiencia</a> </li>
          <li> <a class="page-scroll" href="#contact">Contacto</a> </li>
        </ul>
      </div>
    </div>
  </nav>
</div>
<!-- About Section -->
<div id="about">
  <div class="container">
    <div class="section-title text-center center">
      <h2>Acerca de mí</h2>
      <hr>
    </div>
    <div class="row">
      <div class="col-md-12 text-center"><img src="img/about.jpg" class="img-responsive"></div>
      <div class="col-md-8 col-md-offset-2">
        <div class="about-text">
          <p>Bienvenid@ a mi sitio web personal, soy el fundador de <a href="https://configuroweb.com/">ConfiguroWeb</a>, llevo más de 10 años trabajando en Marketing Digital, procesos de Growth Hacking, Tecnologías de la Información y Desarrollo de Aplicaciones en PHP.</p>
          <p>En ConfiguroWeb tengo más de 50 aplicaciones gratuitas desarrolladas en PHP y MySQL, Python, Javascript, Node.js, así como algunas aplicaciones de pago que tengo alojadas en mi página personal.</p>
          <p class="text-center"><a class="btn btn-primary" href="./cv/CV.pdf" download><i class="fa fa-download"></i> Descargar mi CV</a></p>

          <a href="/images/myw3schoolsimage.jpg" download></a>
        </div>
      </div>
    </div>
  </div>
</div>
<!-- Skills Section -->
<div id="skills" class="text-center">
  <div class="container">
    <div class="section-title center">
      <h2>Skills</h2>
      <hr>
    </div>
    <div class="row">
      <div class="col-md-4 col-sm-6 skill"> <span class="chart" data-percent="95"> <span class="percent">95</span> </span>
        <h4>HTML5</h4>
      </div>
      <div class="col-md-4 col-sm-6 skill"> <span class="chart" data-percent="85"> <span class="percent">85</span> </span>
        <h4>CSS3</h4>
      </div>
      <div class="col-md-4 col-sm-6 skill"> <span class="chart" data-percent="80"> <span class="percent">80</span> </span>
        <h4>PHP</h4>
      </div>
      <div class="col-md-4 col-sm-6 skill"> <span class="chart" data-percent="80"> <span class="percent">95</span> </span>
        <h4>SQL</h4>
      </div>
      <div class="col-md-4 col-sm-6 skill"> <span class="chart" data-percent="70"> <span class="percent">75</span> </span>
        <h4>WordPress</h4>
      </div>
      <div class="col-md-4 col-sm-6 skill"> <span class="chart" data-percent="65"> <span class="percent">75</span> </span>
        <h4>Javasccript</h4>
      </div>
    </div>
  </div>
</div>
<!-- Portfolio Section -->
<div id="portfolio">
  <div class="container">
    <div class="section-title text-center center">
      <h2>Portafolio</h2>
      <hr>
    </div>
    <div class="categories">
      <ul class="cat">
        <li>
          <ol class="type">
            <li><a href="#" data-filter="*" class="active">Todo</a></li>
            <li><a href="#" data-filter=".php">PHP</a></li>
            <li><a href="#" data-filter=".python">Python</a></li>
            <li><a href="#" data-filter=".javascript">Javascript</a></li>
          </ol>
        </li>
      </ul>
      <div class="clearfix"></div>
    </div>
    <div class="row">
      <div class="portfolio-items">
        <div class="col-sm-6 col-md-3 col-lg-3 php">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/Sistema-Gestor-de-Archivos-Hecho-en-PHP-y-MySQL.png" title="Sistema Gestor de Archivos Hecho en PHP y MySQL" rel="prettyPhoto">
              <div class="hover-text">
                <h4>Sistema Gestor de Archivos Hecho en PHP y MySQL</h4>
                <small>PHP</small> </div>
              <img src="img/portfolio/Aplicaciones/Sistema-Gestor-de-Archivos-Hecho-en-PHP-y-MySQL.png" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-3 col-lg-3 php">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/Sistema-de-Gestion-de-Ausencias-de-Personal-desarrollado-en-PHP-y-MySQL.png" title="Sistema de Gestión de Ausencias de Personal desarrollado en PHP y MySQL" rel="prettyPhoto">
              <div class="hover-text">
                <h4>Sistema de Gestión de Ausencias de Personal desarrollado en PHP y MySQL                  
                </h4>
                <small>PHP</small> </div>
              <img src="img/portfolio/Aplicaciones/Sistema-de-Gestion-de-Ausencias-de-Personal-desarrollado-en-PHP-y-MySQL.png" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-3 col-lg-3 python">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/Portal-para-descargar-videos-de-Youtube-hecho-en-Python-con-Django..png" title="Portal para descargar videos de Youtube hecho en Python con Django" rel="prettyPhoto">
              <div class="hover-text">
                <h4>Portal para descargar videos de Youtube hecho en Python con Django</h4>
                <small>Python</small> </div>
              <img src="img/portfolio/Aplicaciones/Portal-para-descargar-videos-de-Youtube-hecho-en-Python-con-Django..png" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-3 col-lg-3 javascript">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/Chat-en-Javascript-con-nodejs.png" title="Chat en Javascript con nodejs" rel="prettyPhoto">
              <div class="hover-text">
                <h4>Chat en Javascript con nodejs</h4>
                <small>Javascript</small> </div>
              <img src="img/portfolio/Aplicaciones/Chat-en-Javascript-con-nodejs.png" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-3 col-lg-3 python">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/3-formas-de-descargar-vídeos-de-Youtube-con-Python-Aplicación-de-Escritorio-y-Online.png" title="3 formas de descargar vídeos de Youtube con Python, Aplicación de Escritorio y Online" rel="prettyPhoto">
              <div class="hover-text">
                <h4>3 formas de descargar vídeos de Youtube con Python, Aplicación de Escritorio y Online</h4>
                <small>Python</small> </div>
              <img src="img/portfolio/Aplicaciones/3-formas-de-descargar-vídeos-de-Youtube-con-Python-Aplicación-de-Escritorio-y-Online.png" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-3 col-lg-3 php">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/Control-de-Inventarios-ConfiguroWeb.jpg" title="Sistema de Inventario ConfiguroWeb" rel="prettyPhoto">
              <div class="hover-text">
                <h4>Sistema de Inventario ConfiguroWeb
                </h4>
                <small>PHP</small> </div>
              <img src="img/portfolio/Aplicaciones/Control-de-Inventarios-ConfiguroWeb.jpg" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-3 col-lg-3 javascript">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/CRUD-en-Javascript.png" title="CRUD en Javascript" rel="prettyPhoto">
              <div class="hover-text">
                <h4>CRUD en Javascript
                </h4>
                <small>Javascript</small> </div>
              <img src="img/portfolio/Aplicaciones/CRUD-en-Javascript.png" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
        <div class="col-sm-6 col-md-3 col-lg-3 javascript">
          <div class="portfolio-item">
            <div class="hover-bg"> <a href="img/portfolio/Aplicaciones/Chat-en-Python.png" title="Chat en Python (comparto el código)" rel="prettyPhoto">
              <div class="hover-text">
                <h4>Chat en Python (comparto el código)
                </h4>
                <small>Python</small> </div>
              <img src="img/portfolio/Aplicaciones/Chat-en-Python.png" class="img-responsive" alt="Project Title"> </a> </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<!-- Achievements Section -->
<div id="achievements" class="text-center">
  <div class="container">
    <div class="section-title center">
      <h2>Algunas Estadísticas</h2>
      <hr>
    </div>
    <div class="row">     
      <div class="col-md-3 col-sm-3 wow fadeInDown" data-wow-delay="400ms">
        <div class="achievement-box"> <span class="count">70000</span>
          <h4>Comunidad Construida en número de Seguidores</h4>
        </div>
      </div>
      <div class="col-md-3 col-sm-3 wow fadeInDown" data-wow-delay="600ms">
        <div class="achievement-box"> <span class="count">9000</span>
          <h4>Visitas al mes en ConfiguroWeb</h4>
        </div>
      </div>
      <div class="col-md-3 col-sm-3 wow fadeInDown" data-wow-delay="200ms">
        <div class="achievement-box"> <span class="count">59</span>
          <h4>Repositorios en GitHub</h4>
        </div>
      </div>
      <div class="col-md-3 col-sm-3 wow fadeInDown" data-wow-delay="800ms">
        <div class="achievement-box"> <span class="count">10</span>
          <h4>Experiencia en años de trabajo</h4>
        </div>
      </div>
    </div>
  </div>
</div>
<!-- Resume Section -->
<div id="resume" class="text-center">
  <div class="container">
    <div class="section-title center">
      <h2>Experiencia</h2>
      <hr>
    </div>
    <div class="row">
      <div class="col-lg-12">
        <ul class="timeline">
          <li>
            <div class="timeline-image">
              <h4>Julio 2015 <br>
                - <br>
                Presente </h4>
            </div>
            <div class="timeline-panel">
              <div class="timeline-heading">
                <h4>Kata-SoftWare</h4>
                <h4 class="subheading">Consultor Servicio a Cuentas</h4>
              </div>
              <div class="timeline-body">
                <p>Asesoria y Soporte en la gestiones relacionadas con las soluciones tecnólogicas de <a href="https://formiik.com/">Formiik</a> para <a href="https://www.bancow.com.co/">Banco W</a></p>
              </div>
            </div>
          </li>
          <li class="timeline-inverted">
            <div class="timeline-image">
              <h4>Febrero 2010 <br>
                - <br>
                Presente </h4>
            </div>
            <div class="timeline-panel">
              <div class="timeline-heading">
                <h4>ConfiguroWeb</h4>
                <h4 class="subheading">Gerente Propietario</h4>
              </div>
              <div class="timeline-body">
                <p>Gestiones de Marketing Digital, Growth Hacking y Desarrollo de Aplicaciones para <a href="https://configuroweb.com">ConfiguroWeb</a></p>
              </div>
            </div>
          </li>
          <li>
            <div class="timeline-image">
              <h4>Enero 2013 <br>
                - <br>
                Julio 2015 </h4>
            </div>
            <div class="timeline-panel">
              <div class="timeline-heading">
                <h4>Teleperformance</h4>
                <h4 class="subheading">Technical Support Microsoft</h4>
              </div>
              <div class="timeline-body">
                <p>Gestión y resolución de incidencias técnicas, sobre los productos de Microsoft.
                </p>
              </div>
            </div>
          </li>
        </ul>
      </div>
    </div>
  </div>
  <div class="container">
    <div class="section-title center">
      <h2>Educación</h2>
      <hr>
    </div>
    <div class="row">
      <div class="col-lg-12">
        <ul class="timeline">
          
          <!-- Education Section-->
          
          <li>
            <div class="timeline-image">
              <h4>2019 <br>
                - <br>
                2017 </h4>
            </div>
            <div class="timeline-panel">
              <div class="timeline-heading">
                <h4>Servicio Nacional de Aprendizaje (SENA)</h4>
                <h4 class="subheading">Analisis y Desarrollo de Sistemas de Información</h4>
              </div>
            </div>
          </li>
          <li class="timeline-inverted">
            <div class="timeline-image">
              <h4>2009 <br>
                - <br>
                2013 </h4>
            </div>
            <div class="timeline-panel">
              <div class="timeline-heading">
                <h4>Unilatina International College</h4>
                <h4 class="subheading">Tecnología en Gestión de Empresas</h4>
              </div>              
            </div>
          </li>          
        </ul>
      </div>
    </div>
  </div>
</div>
<!-- Contact Section -->
<div id="contact" class="text-center">
  <div class="container">
    <div class="section-title center">
      <h2>Contacto</h2>
      <hr>
    </div>
    <div class="col-md-8 col-md-offset-2">
      <div class="col-md-4"> <i class="fa fa-map-marker fa-2x"></i>
        <p>Cali,<br>
          Colombia</p>
      </div>
      <div class="col-md-4"> <i class="fa fa-envelope-o fa-2x"></i>
        <p>msevillab@gmail.com</p>
      </div>
      <div class="col-md-4"> <i class="fa fa-phone fa-2x"></i>
        <p> +57 316 243 0081</p>
      </div>
      <div class="clearfix"></div>
    </div>
    <div class="col-md-8 col-md-offset-2">
      <h3>Envíame un mensaje</h3>
      <form name="sentMessage" id="contactForm" novalidate>
        <div class="row">
          <div class="col-md-6">
            <div class="form-group">
              <input type="text" id="name" class="form-control" placeholder="Nombre" required="required">
              <p class="help-block text-danger"></p>
            </div>
          </div>
          <div class="col-md-6">
            <div class="form-group">
              <input type="email" id="email" class="form-control" placeholder="Correo" required="required">
              <p class="help-block text-danger"></p>
            </div>
          </div>
        </div>
        <div class="form-group">
          <textarea name="message" id="message" class="form-control" rows="4" placeholder="Mensaje" required></textarea>
          <p class="help-block text-danger"></p>
        </div>
        <div id="success"></div>
        <button type="submit" class="btn btn-default">Enviar Mensaje</button>
      </form>
      <div class="social">
        <ul>
          <li><a href="https://www.facebook.com/mauriciosevilabritto"><i class="fa fa-facebook"></i></a></li>
          <li><a href="https://twitter.com/configuroweb"><i class="fa fa-twitter"></i></a></li>          
          <li><a href="https://github.com/configuroweb"><i class="fa fa-github"></i></a></li>
          <li><a href="https://www.instagram.com/configuroweb/"><i class="fa fa-instagram"></i></a></li>
          <li><a href="https://www.linkedin.com/in/mauricio-sevilla/"><i class="fa fa-linkedin"></i></a></li>
          <li><a href="https://www.youtube.com/channel/UCVnrMbml3wUIuwz-oSaIUnA"><i class="fa fa-youtube"></i></a></li>
        </ul>
      </div>
    </div>
  </div>
</div>
<div id="footer">
  <div class="container text-center">
    <div class="fnav">
      <p>Para más desarrollos accede a <a href="https://configuroweb.com/" rel="nofollow">ConfiguroWeb</a></p>
    </div>
  </div>
</div>
<script type="text/javascript" src="js/jquery.1.11.1.js"></script> 
<script type="text/javascript" src="js/bootstrap.js"></script> 
<script type="text/javascript" src="js/SmoothScroll.js"></script> 
<script type="text/javascript" src="js/easypiechart.js"></script> 
<script type="text/javascript" src="js/jquery.prettyPhoto.js"></script> 
<script type="text/javascript" src="js/jquery.isotope.js"></script> 
<script type="text/javascript" src="js/jquery.counterup.js"></script> 
<script type="text/javascript" src="js/waypoints.js"></script> 
<script type="text/javascript" src="js/jqBootstrapValidation.js"></script> 
<script type="text/javascript" src="js/contact_me.js"></script> 
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>

contact_me.js

$(function() {

    $("input,textarea").jqBootstrapValidation({
        preventSubmit: true,
        submitError: function($form, event, errors) {
            // mensajes de error o eventos adicionales
        },
        submitSuccess: function($form, event) {
            event.preventDefault(); // evitar el comportamiento de envío predeterminado
            // obtener valores de FORM
            var name = $("input#name").val();
            var email = $("input#email").val();
            var message = $("textarea#message").val();
            var firstName = name; // For Success/Failure Message
            // Check for white space in name for Success/Fail message
            if (firstName.indexOf(' ') >= 0) {
                firstName = name.split(' ').slice(0, -1).join(' ');
            }
            $.ajax({
                url: "././mail/contact_me.php",
                type: "POST",
                data: {
                    name: name,
                    email: email,
                    message: message
                },
                cache: false,
                success: function() {
                    // Mensaje de correo enviado
                    $('#success').html("<div class='alert alert-success'>");
                    $('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
                        .append("</button>");
                    $('#success > .alert-success')
                        .append("<strong>Tu mensaje ha sido enviado </strong>");
                    $('#success > .alert-success')
                        .append('</div>');

                    //limpia todos los campos
                    $('#contactForm').trigger("reset");
                },
                error: function() {
                    // Mensaje fallido
                    $('#success').html("<div class='alert alert-danger'>");
                    $('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;")
                        .append("</button>");
                    $('#success > .alert-danger').append("<strong>Sorry " + firstName + ", parece que mi servidor de correo no responde. ¡Por favor, inténtalo de nuevo más tarde!");
                    $('#success > .alert-danger').append('</div>');
                    //Limpia todos los campos
                    $('#contactForm').trigger("reset");
                },
            })
        },
        filter: function() {
            return $(this).is(":visible");
        },
    });

    $("a[data-toggle=\"tab\"]").click(function(e) {
        e.preventDefault();
        $(this).tab("show");
    });
});


/*Al hacer clic en Ocultar cuadros de error / éxito de ocultación completa * /
$('#name').focus(function() {
    $('#success').html('');
});

contact_me.php

<?php
// Valida si los campos están vacios
if(empty($_POST['name'])  		||
   empty($_POST['email']) 		||
   empty($_POST['message'])	||
   !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
   {
	echo "Sin argumentos";
	return false;
   }
	
$name = $_POST['name'];
$email_address = $_POST['email'];
$message = $_POST['message'];
	
// Crea el correo electrónico y envía el mensaje
$to = 'msevillab@gmail.com'; // Agregua tu dirección de correo electrónico entre el "" reemplazando msevillab@gmail.com - Aquí es donde el formulario enviará un mensaje.
$email_subject = "Formulario de Contacto Mauricio Sevilla:  $name";
$email_body = "Ha recibido un nuevo mensaje del formulario de contacto de su sitio web.\n\n"."Estos son los detalles:\n\nNombre: $name\n\nCorreo: $email_address\n\nMensaje:\n$message";
$headers = "Desde: msevillab@gmail.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
$headers .= "Responder a: $email_address";	
mail($to,$email_subject,$email_body,$headers);
return true;			
?>

Contáctame

Si tienes cualquier duda sobre el como enviar correos desde PHP desde un hosting, requieres un desarrollo a medida o asesoría general, me puedes contactar directamente a mi Whatsapp en el siguiente enlace:

https://configuroweb.com/WhatsappMessenger

O por los formularios de contacto, quedo al pendiente

Etiquetado: /

Cómo exportar a Excel desde PHP

Por medio de esta aplicación sobre la que se comparte el código puedes aprender cómo exportar a Excel desde PHP. el sistema permite ingresar nombre, apellido y dirección del usuario. Los registros se suben a la base de datos y se muestran en la misma vista principal y desde un botón se exportan los registros ingresados a un documento de Excel.

En el vídeo a continuación explico tanto los aspectos funcionales de la aplicación como su instalación en un servidor local:

Cómo exportar a Excel desde PHP

Funcionamiento de la aplicación que permite exportar a Excel desde PHP

La aplicación consta de cuatro archivos, conn.php que es el que tiene la conexión con la base de datos, create_excel.php que es el documento que permite generar el archivo Excel, index.php que es la página que ve el usuario final y por último save.php, que es el archivo que guarda los registros en la base de datos.

La página del index.php tiene dos action por medio del que se comunica con los documentos de save.php y el de create_excel.php con el método POST. La página save.php guarda los registros que se envían desde un form que se diligencia en el index y la página create_excel.php ensambla el documento de Excel a generar.

Explicación de la página create_excel.php

Lo que permite que se genere el archivo de Excel, según los datos ingresados y visibles en la tabla desde el index son los siguientes datos:

header("Content-Type: application/xls");    
	
header("Content-Disposition: attachment; filename=documento_exportado_" .        date('Y:m:d:m:s').".xls");
header("Pragma: no-cache"); 
header("Expires: 0");

El segundo header es el que encuadra el nombre del archivo, al que para no repetir el nombre igual que con otra publicación previa donde explico como exportar de formulario HTML a MS Word con PHP se le implementó la función date, incluyendo minutos y segundos, pero si no te quieres complicar puedes dejar el parámetro filename con el nombre que quieras que tenga el documento.

Explicación de la página save.php

Esta página tiene el include del archivo de conexión conn.php que es el que tiene las credenciales de la base de datos, para hacer los INSERT INTO a la base de datos con la función MySQLI

Puesta a punto del sistema diseñado para exportar tabla a Excel desde PHP

El sistema como es habitual está colgado en GitHub en el siguiente enlace:

El sistema requiere la base de datos, que es el código SQL que está a continuación:

-- phpMyAdmin SQL Dump
-- version 5.1.1
-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 13-08-2021 a las 21:53:13
-- Versión del servidor: 10.4.19-MariaDB
-- Versión de PHP: 8.0.7

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de datos: `exportar_excel`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `member`
--

CREATE TABLE `member` (
  `mem_id` int(11) NOT NULL,
  `firstname` varchar(50) NOT NULL,
  `lastname` varchar(50) NOT NULL,
  `address` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Volcado de datos para la tabla `member`
--

INSERT INTO `member` (`mem_id`, `firstname`, `lastname`, `address`) VALUES
(1, 'Juan', 'Usuario', 'Carrera 13 N 23 12'),
(2, 'Pedro', 'Usuario', 'Calle 98 N 145 12');

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `member`
--
ALTER TABLE `member`
  ADD PRIMARY KEY (`mem_id`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `member`
--
ALTER TABLE `member`
  MODIFY `mem_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Para instalar la aplicación en tu ordenador a nivel local puedes seguir las indicaciones de la siguiente publicación:

Descarga del sistema que explica cómo exportar a Excel desde PHP

Si tienes inconvenientes para descargar mi repositorio de GitHub, te puedes guiar por el siguiente vídeo:

Subir el sistema hecho en PHP a un Hosting

Si deseas subir el sistema a un hosting en Internet, te puedes basar el vídeo a continuación:

Quedo al pendiente de cualquier duda, saludos !!

Etiquetado: /

Cómo obtener la extensión de un archivo con PHP

Por medio de este sistema puedes aprender cómo obtener la extensión de un archivo con PHP, comparto el código. El sistema agregar archivos en una carpeta llamada files, los muestra en una tabla de la pantalla principal y puede extraer la extensión de un archivo con PHP.

Esta aplicación por su sencillez no tiene base de datos, se puede utilizar como un módulo de un sistema que abarque más soluciones.

Funcionamiento de la aplicación con la que se puede conocer cómo obtener la extensión de un archivo con PHP

El funcionamiento de la explicación a nivel general, se explica en el vídeo a continuación:

La aplicación consta de 3 archivos, uno llamado index.php, get_ex.php y save_file está diseñada de una forma muy organizada y ejecuta las instrucciones en los archivos correspondientes.

El index.php es la vista a la que accede el usuario final, tiene una sentencia include en la que se muestra la tabla de los archivos agregados, con sus extensiones relacionadas.

Explicación del documento save_file.php

El documento save_file.php contiene la función move_uploaded_file con la que se asegura que el archivo designado por filename es válido, en otras palabras que fue subido mediante el mecanismo de subida HTTP POST de PHP. Si el archivo es válido, será movido al nombre de archivo dado por destination.

En este documento save_file.php también se parametriza el tamaño del archivo a recibir en el sistema, por medio de un condicional donde con un número que calcula el tamaño de los archivos en Kilobytes, si el archivo es mayor que la medida que coloquen en Kilobytes, entonces el archivo no se sube.

Explicación del documento get_ex.php

Este archivo es el que le permite al sistema el como obtener la extensión de un archivo con PHP por medio de la función scandir que enumera los ficheros y directorios ubicados en la ruta especificada y la función explode que organiza los elementos dentro de un array con un delimitador, que en este caso es el punto, esto permite extraer la extensión de los archivos que subimos al sistema.

Puesta a punto del sistema con el que se explica cómo obtener la extensión de un archivo con PHP

El proceso se explica a nivel general en la siguiente publicación

Descarga del código donde está alojado en GitHub

El código del sistema se encuentra alojado en GitHub en el siguiente enlace:

Si se tienen dudas con la descarga, en el siguiente vídeo se explica el proceso a nivel general:

Subida del proyecto a un hosting

Si se tienen dudas para la subida de cualquier proyecto php a un hosting, en el siguiente vídeo, se puede ver como hacer el proceso:

Cualquier duda quedo al pendiente.

Etiquetado: /

Exportar de formulario HTML a MS Word con PHP

El proceso para Exportar de formulario HTML a MS Word con PHP se explica a cabalidad en el vídeo a continuación:

El sistema permite de manera sencilla Exportar de formulario HTML a MS Word, por su sencillez no requiere de base de datos, comparto el código plenamente y lo puedes descargar de GitHub en el siguiente enlace:

Funcionamiento del sistema que permite Exportar de formulario HTML a MS Word con PHP

El sistema crea un archivo con nombre de fecha y hora, y el contenido del archivo es lo que está en el formulario

Este sistema solo consta de dos documentos export.php y index.php, index es la vista del formulario Y export, es el archivo que tiene la lógica que permite que se genere el documento de MS Word

El nombre del archivo que se genera incluye como nombre la fecha con minutos y segundos, esta configuración se hace con el objetivo de que no se repitan los nombres.

La forma en que se comunican estos archivos es por el método POST el archivo index.php tiene un formulación cuyo parámetro action envía al documento export.php, que es el que procesa la información para imprimir el documento.

Puesta a punto de la aplicación en un servidor local

Para la puesta a punto en un servidor local, se pueden basar en la siguiente documentación:

Descarga del Sistema para Exportar de formulario HTML a MS Word con PHP

En este post explico el proceso a nivel general. Solo agrego que no es necesario crear ninguna base de datos.
Si tienes inconvenientes para descargar mi repositorio de GitHub, te puedes guiar por el siguiente vídeo:

Subir el sistema hecho en PHP a un Hosting

Si deseas subir el sistema a un hosting en Internet, te puedes basar el vídeo a continuación:

Quedo al pendiente de cualquier duda, saludos !!

Etiquetado: /
configuroweb.com
×
Hola de Nuevo
Abrir chat
¿Qué te interesa?
Selecciona los temas de interés sobre
los que deseas recibir noticias: