sesiones, registro de usuario

This commit is contained in:
victor.monge 2025-04-26 17:31:54 -06:00
parent d8bd5168b1
commit d4ed9ee1e1
10 changed files with 1117 additions and 12 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,4 @@
-- Crear usuario que utiliza el sistema
CREATE USER lania@localhost IDENTIFIED BY 'l4n1@Cc';
GRANT ALL PRIVILEGES ON lania_cc.* TO lania@localhost;
FLUSH PRIVILEGES;

View File

@ -0,0 +1,176 @@
DROP DATABASE IF EXISTS lania_cc;
CREATE DATABASE lania_cc DEFAULT CHARACTER SET utf8mb4;
USE lania_cc;
-- DDL -------------------------------------------------------------------------------------
CREATE TABLE genero (
id_genero TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
descripcion VARCHAR(20) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE rango_edad (
id_rango_edad TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
descripcion VARCHAR(15) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE tipo_identificacion (
id_tipo_id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
descripcion VARCHAR(50) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE nivel_estudio (
id_nivel TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
descripcion VARCHAR(50) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE giro (
id_giro TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
descripcion VARCHAR(100) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE examen (
id_examen SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre_examen VARCHAR(150) NOT NULL UNIQUE
) ENGINE=InnoDB;
-- IMPORTAR BASE DE DATOS DE INEGI
-- 1. TABLA CANDIDATO (datos básicos)
CREATE TABLE candidato (
id_candidato INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
fecha_entrada DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
fecha_salida DATETIME DEFAULT NULL,
nombres VARCHAR(100) NOT NULL,
primer_apellido VARCHAR(100) NOT NULL,
segundo_apellido VARCHAR(100) DEFAULT NULL,
correo VARCHAR(150) NOT NULL,
telefono VARCHAR(30) NOT NULL,
id_examen SMALLINT UNSIGNED NOT NULL,
id_tipo_id TINYINT UNSIGNED NOT NULL,
id_rango_edad TINYINT UNSIGNED NOT NULL,
id_genero TINYINT UNSIGNED NOT NULL,
FOREIGN KEY (id_examen) REFERENCES examen(id_examen),
FOREIGN KEY (id_tipo_id) REFERENCES tipo_identificacion(id_tipo_id),
FOREIGN KEY (id_rango_edad) REFERENCES rango_edad(id_rango_edad),
FOREIGN KEY (id_genero) REFERENCES genero(id_genero)
) ENGINE=InnoDB;
-- 2. TABLA INFO_CANDIDATOS (datos extendidos)
CREATE TABLE info_candidatos (
id_candidato INT UNSIGNED PRIMARY KEY,
id_pais INT NOT NULL,
id_estado INT DEFAULT NULL,
id_municipio INT DEFAULT NULL,
id_colonia INT DEFAULT NULL,
id_nivel TINYINT UNSIGNED NOT NULL,
id_giro TINYINT UNSIGNED NOT NULL,
nombre_empresa_institucion VARCHAR(150) NOT NULL,
motivo_examen VARCHAR(255) NOT NULL,
calificacion_servicio TINYINT NOT NULL,
consentimiento_pub TINYINT NOT NULL,
FOREIGN KEY (id_candidato) REFERENCES candidato(id_candidato)
ON DELETE CASCADE,
FOREIGN KEY (id_pais) REFERENCES paises(id),
FOREIGN KEY (id_estado) REFERENCES estados(id),
FOREIGN KEY (id_municipio) REFERENCES municipios(id),
FOREIGN KEY (id_colonia) REFERENCES colonias(id),
FOREIGN KEY (id_nivel) REFERENCES nivel_estudio(id_nivel),
FOREIGN KEY (id_giro) REFERENCES giro(id_giro)
) ENGINE=InnoDB;
CREATE TABLE usuario (
id INT AUTO_INCREMENT PRIMARY KEY,
usuario VARCHAR(150) UNIQUE NOT NULL,
contrasena VARCHAR(255) NOT NULL
) ENGINE=InnoDB;
-- DML -------------------------------------------------------------------------------------
-- Inserción catalogo "genero":
INSERT INTO genero (id_genero, descripcion) VALUES
(1, 'Masculino'),
(2, 'Femenino'),
(3, 'Prefiero no decir');
-- Inserción catalogo "rango_edad":
INSERT INTO rango_edad (id_rango_edad, descripcion) VALUES
(1, 'Menos de 18'),
(2, '18-24'),
(3, '24-34'),
(4, '35-44'),
(5, '44-54'),
(6, '55-64'),
(7, '65 o más');
-- Inserción catalogo "tipo_identificacion":
INSERT INTO tipo_identificacion (id_tipo_id, descripcion) VALUES
(1, 'INE'),
(2, 'Pasaporte'),
(3, 'CURP'),
(4, 'RFC'),
(5, 'Cédula Profesional'),
(6, 'Licencia de Conducir'),
(7, 'Otro');
-- Inserción catalogo "nivel_estudio":
INSERT INTO nivel_estudio (id_nivel, descripcion) VALUES
(1, 'Primaria'),
(2, 'Secundaria'),
(3, 'Bachillerato'),
(4, 'Técnico Superior Universitario'),
(5, 'Licenciatura'),
(6, 'Maestría'),
(7, 'Doctorado'),
(8, 'Otro');
-- Inserción catalogo "giro_empresa" considerando los giros de las empresas más comunes:
INSERT INTO giro (id_giro, descripcion) VALUES
(1, 'Tecnologías de la Información'),
(2, 'Gobierno'),
(3, 'Finanzas'),
(4, 'Salud'),
(5, 'Educación'),
(6, 'Telecomunicaciones'),
(7, 'Retail'),
(8, 'Manufactura'),
(9, 'Logística y Transporte'),
(10, 'Construcción'),
(11, 'Turismo y Hospitalidad'),
(12, 'Energía y Recursos Naturales'),
(13, 'Agricultura y Alimentación'),
(14, 'Medios de Comunicación y Entretenimiento'),
(15, 'Otros');
-- Inserción catalogo "examen" se refiere al nombre de la organización a la que pertence el examen:
INSERT INTO examen (id_examen, nombre_examen) VALUES
(1, 'Cisco'),
(2, 'IBM'),
(3, 'Microsoft'),
(4, 'Oracle'),
(5, 'SAP'),
(6, 'CompTIA'),
(7, 'Amazon Web Services'),
(8, 'Google Cloud Platform'),
(9, 'Salesforce'),
(10, 'Red Hat'),
(11, 'VMware'),
(12, 'Palo Alto Networks'),
(13, 'Fortinet'),
(14, 'Juniper Networks'),
(15, 'Otros');
-- Depues de importar la bd de inegi
insert into paises(nombre) values('Otro');

View File

@ -1,4 +1,5 @@
<?php
// $db = Database::getInstance();
class Database {
private static $instance = null;
@ -7,8 +8,8 @@ class Database {
private function __construct() {
$host = 'localhost';
$db = 'lania_cc';
$user = 'root';
$pass = 'P@ssw0rd';
$user = 'lania';
$pass = 'l4n1@Cc';
try {
$this->mysqli = new mysqli($host, $user, $pass, $db);
@ -31,8 +32,4 @@ class Database {
}
}
// Uso:
// $db = Database::getInstance();
?>

View File

@ -0,0 +1,57 @@
<?php
require_once __DIR__ . '/../models/UsuarioModel.php';
class UsuarioController{
private static $usuarioModel = null;
public static function inicializar() {
if (self::$usuarioModel === null) {
self::$usuarioModel = new UsuarioModel();
}
}
public static function obtenerUsuarios(){
return self::$usuarioModel->obtenerUsuarios();
}
public static function iniciarSesion($usuario, $contrasena){
return self::$usuarioModel->iniciarSesion($usuario, $contrasena);
}
public static function existeUsuario($usuario){
$usuarios = self::obtenerUsuarios();
foreach ($usuarios as $u) {
if ($u['usuario'] === $usuario) {
return true; // El usuario ya existe
}
}
return false; // El usuario no existe
}
public static function registrarUsuario($usuario, $contrasena){
if (self::existeUsuario($usuario)) {
echo "El usuario ya existe.";
return;
}
self::$usuarioModel->registrarUsuario($usuario, $contrasena);
echo "Usuario: ${usuario} registrado exitosamente.";
}
public static function eliminarUsuario($usuario){
if (!self::existeUsuario($usuario)) {
echo "El usuario no existe.";
return;
}
self::$usuarioModel->eliminarUsuario($usuario);
echo "Usuario: ${usuario} eliminado exitosamente.";
}
}
# Instanciar el modelo al cargar el controlador
UsuarioController::inicializar();
?>

View File

@ -1,19 +1,18 @@
<?php
require_once __DIR__ . '/../models/Usuario.php';
require_once __DIR__ . '/UsuarioController.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Crear una instancia del modelo usuario
$usuarioModel = new Usuario();
// Obtener los datos de la solicitud
$usuario = $_POST['numero-personal'];
$contrasena = $_POST['contrasena'];
try {
// Iniciar sesión del usuario
if ($usuarioModel->iniciarSesion($usuario, $contrasena)) {
if (UsuarioController::iniciarSesion($usuario, $contrasena)) {
session_start(); // Iniciar la sesión
$_SESSION['autenticado'] = true; // Marcar la sesión como autenticada
echo json_encode(['loginExitoso' => true, 'message' => 'Inicio de sesión exitoso']);
} else {
echo json_encode(['loginExitoso' => false, 'message' => 'Usuario o contraseña incorrectos']);

View File

@ -2,7 +2,7 @@
require_once __DIR__ . '/../controllers/Database.php';
class Usuario {
class UsuarioModel {
private $conn;
public function __construct() {
@ -58,6 +58,35 @@ class Usuario {
}
}
public function obtenerUsuarios() {
// Preparar la consulta mysql usando msqli
$stmt = $this->conn->prepare("SELECT usuario FROM usuario");
if (!$stmt->execute()) {
throw new Exception("Error al obtener nombres de usuarios: " . $stmt->error);
}
// Obtener el resultado
$result = $stmt->get_result();
$usuarios = [];
while ($row = $result->fetch_assoc()) {
$usuarios[] = $row;
}
return $usuarios;
}
public function eliminarUsuario($id){
// Preparar la consulta mysql usando msqli
$stmt = $this->conn->prepare("DELETE FROM usuario WHERE id = ?");
$stmt->bind_param("i", $id);
if (!$stmt->execute()) {
throw new Exception("Error al eliminar usuario: " . $stmt->error);
}
$stmt->close();
}
}
?>

20
pruebaSesion.php Normal file
View File

@ -0,0 +1,20 @@
<?php
session_start();
if (!isset($_SESSION['autenticado']) || $_SESSION['autenticado'] !== true) {
header('Location: index.html');
exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pagina protegida</title>
</head>
<body>
<h1>Test</h1>
</body>
</html>

7
testRegistroUsuario.php Normal file
View File

@ -0,0 +1,7 @@
<?php
require_once __DIR__ . "/controllers/usuarioController.php";
// UsuarioController::registrarUsuario("root", "root");
?>