Merge para login y registro
This commit is contained in:
+136
-6
@@ -4,8 +4,8 @@ if (session_status() === PHP_SESSION_NONE) {
|
||||
}
|
||||
|
||||
// Comprobación de sesión
|
||||
$isLoggedIn = isset($_SESSION['usuario']) && !empty($_SESSION['usuario']);
|
||||
$username = $isLoggedIn ? $_SESSION['usuario'] : '';
|
||||
$isLoggedIn = isset($_SESSION['idUsuario']) && !empty($_SESSION['idUsuario']);
|
||||
$username = $isLoggedIn ? $_SESSION['nombreUsuario'] : '';
|
||||
?>
|
||||
|
||||
<!-- Bootstrap 5 CSS -->
|
||||
@@ -15,6 +15,7 @@ $username = $isLoggedIn ? $_SESSION['usuario'] : '';
|
||||
<!-- Google Fonts para estilo Kahoot -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="css/index.css">
|
||||
<script src="js/jquery-4.0.0.min.js"></script>
|
||||
<style>
|
||||
|
||||
|
||||
@@ -89,7 +90,7 @@ $username = $isLoggedIn ? $_SESSION['usuario'] : '';
|
||||
<label for="loginEmail">Correo electrónico</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" class="form-control border-dark" id="loginPassword" name="password" placeholder="Contraseña" required>
|
||||
<input type="password" class="form-control border-dark" id="loginPassword" name="contrasena" placeholder="Contraseña" required>
|
||||
<label for="loginPassword">Contraseña</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
@@ -121,7 +122,7 @@ $username = $isLoggedIn ? $_SESSION['usuario'] : '';
|
||||
<div class="modal-body">
|
||||
<form id="formRegistro">
|
||||
<div class="form-floating mb-3">
|
||||
<input type="text" class="form-control border-dark" id="regNombre" name="nombre" placeholder="Nombre" required>
|
||||
<input type="text" class="form-control border-dark" id="regNombre" name="nombreUsuario" placeholder="Nombre" required>
|
||||
<label for="regNombre">Nombre</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
@@ -129,11 +130,11 @@ $username = $isLoggedIn ? $_SESSION['usuario'] : '';
|
||||
<label for="regEmail">Correo electrónico</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" class="form-control border-dark" id="regPassword" name="password" placeholder="Contraseña" required>
|
||||
<input type="password" class="form-control border-dark" id="regPassword" name="contrasena" placeholder="Contraseña" required>
|
||||
<label for="regPassword">Contraseña</label>
|
||||
</div>
|
||||
<div class="form-floating mb-3">
|
||||
<input type="password" class="form-control border-dark" id="regPasswordConfirm" name="passwordConfirm" placeholder="Confirmar contraseña" required>
|
||||
<input type="password" class="form-control border-dark" id="regPasswordConfirm" name="contrasenaConfirm" placeholder="Confirmar contraseña" required>
|
||||
<label for="regPasswordConfirm">Confirmar contraseña</label>
|
||||
</div>
|
||||
<input type="hidden" name="orden" value="registrar">
|
||||
@@ -147,3 +148,132 @@ $username = $isLoggedIn ? $_SESSION['usuario'] : '';
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
// Registro
|
||||
$('#botonAceptarRegistro').click(function(event){
|
||||
event.preventDefault();
|
||||
console.log('hola');
|
||||
let nombreUsuario = $('#regNombre').val().trim();
|
||||
let email = $('#regEmail').val().trim();
|
||||
let contrasena = $('#regPassword').val();
|
||||
let contrasenaConfirmacion = $('#regPasswordConfirm').val();
|
||||
|
||||
// Limpiamos errores anteriores
|
||||
$('#regNombre').removeClass('is-invalid');
|
||||
$('#regEmail').removeClass('is-invalid');
|
||||
$('#regPassword').removeClass('is-invalid');
|
||||
$('#regPasswordConfirm').removeClass('is-invalid');
|
||||
$('#errorRegistro').text('');
|
||||
|
||||
// Comprobamos que las contraseñas coincidan
|
||||
if(contrasena !== contrasenaConfirmacion){
|
||||
|
||||
$('#regPassword').addClass('is-invalid');
|
||||
$('#regPasswordConfirm').addClass('is-invalid');
|
||||
|
||||
$('#errorRegistro').text('Las contraseñas no coinciden.');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
method: "POST",
|
||||
url: "controladores/controladorUsuario.php",
|
||||
data: {
|
||||
'nombreUsuario': nombreUsuario,
|
||||
'email': email,
|
||||
'contrasena': contrasena,
|
||||
'orden': 'registrarUsuario'
|
||||
}
|
||||
}).done(function(respuesta){
|
||||
console.log(respuesta);
|
||||
respuesta = JSON.parse(respuesta);
|
||||
if(respuesta.error){
|
||||
|
||||
$('#errorRegistro').text(respuesta.error);
|
||||
|
||||
// Marcamos los campos si hay error
|
||||
$('#regNombre').addClass('is-invalid');
|
||||
$('#regEmail').addClass('is-invalid');
|
||||
|
||||
}else{
|
||||
|
||||
// Registro correcto
|
||||
$('#errorRegistro')
|
||||
.removeClass('text-danger')
|
||||
.addClass('text-success')
|
||||
.text(respuesta.exito);
|
||||
|
||||
// Limpiamos formulario
|
||||
$('#formRegistro')[0].reset();
|
||||
|
||||
// Cerramos modal después de un segundo
|
||||
setTimeout(function(){
|
||||
location.reload();
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
}); // Fin función ajax
|
||||
|
||||
});
|
||||
|
||||
// Login
|
||||
$('#botonAceptarLogin').click(function(event){
|
||||
event.preventDefault();
|
||||
|
||||
let email = $('#loginEmail').val().trim();
|
||||
let contrasena = $('#loginPassword').val();
|
||||
|
||||
// Limpiamos errores anteriores
|
||||
$('#loginEmail').removeClass('is-invalid');
|
||||
$('#loginPassword').removeClass('is-invalid');
|
||||
$('#errorLogin').text('');
|
||||
|
||||
// Comprobación básica
|
||||
if(email === '' || contrasena === ''){
|
||||
|
||||
$('#errorLogin').text('Todos los campos son obligatorios.');
|
||||
|
||||
if(email === ''){
|
||||
$('#loginEmail').addClass('is-invalid');
|
||||
}
|
||||
|
||||
if(contrasena === ''){
|
||||
$('#loginPassword').addClass('is-invalid');
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
method: "POST",
|
||||
url: "controladores/controladorUsuario.php",
|
||||
data: {
|
||||
'email': email,
|
||||
'contrasena': contrasena,
|
||||
'orden': 'comprobarUsuario'
|
||||
}
|
||||
}).done(function(respuesta){
|
||||
console.log(respuesta);
|
||||
respuesta = JSON.parse(respuesta);
|
||||
if(respuesta.error){
|
||||
|
||||
$('#loginEmail').addClass('is-invalid');
|
||||
$('#loginPassword').addClass('is-invalid');
|
||||
|
||||
$('#errorLogin').text(respuesta.error);
|
||||
|
||||
}else{
|
||||
|
||||
location.reload();
|
||||
}
|
||||
|
||||
}); // Fin función ajax
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/triviagmatico/includes/conexionBD.php';
|
||||
|
||||
|
||||
class Categoria{
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
require_once __DIR__ . '/../includes/conexionBD.php';
|
||||
|
||||
|
||||
class Equipo{
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
require_once __DIR__ . '/../includes/conexionBD.php';
|
||||
|
||||
|
||||
class EquipoxUsuario {
|
||||
public $idEquipoxUsuario;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
require_once __DIR__ . '/../includes/conexionBD.php';
|
||||
|
||||
|
||||
class Pregunta {
|
||||
private ?int $idPregunta;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
require_once __DIR__ . '/../includes/conexionBD.php';
|
||||
|
||||
class Respuesta{
|
||||
public $idRespuesta;
|
||||
public $idPregunta;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
require_once __DIR__ . '/../includes/conexionBD.php';
|
||||
|
||||
// Clase encargada de registrar las respuestas de los jugadores en tiempo real durante la partida
|
||||
class RespuestaAlmacenada {
|
||||
@@ -7,14 +7,12 @@ class RespuestaAlmacenada {
|
||||
public $idPartidaxPregunta;
|
||||
public $idUsuario;
|
||||
public $idRespuesta;
|
||||
public $primero; // Indica con 1 o 0 si fue el más rápido en responder correctamente
|
||||
|
||||
public function __construct($idRespuestaAlmacenada = null, $idPartidaxPregunta = null, $idUsuario = null, $idRespuesta = null, $primero = 0) {
|
||||
public function __construct($idRespuestaAlmacenada = null, $idPartidaxPregunta = null, $idUsuario = null, $idRespuesta = null) {
|
||||
$this->idRespuestaAlmacenada = $idRespuestaAlmacenada;
|
||||
$this->idPartidaxPregunta = $idPartidaxPregunta;
|
||||
$this->idUsuario = $idUsuario;
|
||||
$this->idRespuesta = $idRespuesta;
|
||||
$this->primero = $primero;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -25,14 +23,13 @@ class RespuestaAlmacenada {
|
||||
if (is_array($conexion)) return $conexion;
|
||||
|
||||
try {
|
||||
$sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta, primero)
|
||||
VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta, :primero)";
|
||||
$sql = "INSERT INTO respuestaalmacenada (idPartidaxPregunta, idUsuario, idRespuesta)
|
||||
VALUES (:idPartidaxPregunta, :idUsuario, :idRespuesta)";
|
||||
$consulta = $conexion->prepare($sql);
|
||||
|
||||
$consulta->bindParam(':idPartidaxPregunta', $this->idPartidaxPregunta);
|
||||
$consulta->bindParam(':idUsuario', $this->idUsuario);
|
||||
$consulta->bindParam(':idRespuesta', $this->idRespuesta);
|
||||
$consulta->bindParam(':primero', $this->primero, PDO::PARAM_INT);
|
||||
$consulta->execute();
|
||||
|
||||
return [
|
||||
|
||||
+75
-1
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
require_once __DIR__ . '/../includes/conexionBD.php';
|
||||
|
||||
class Usuario {
|
||||
private ?int $idUsuario;
|
||||
@@ -139,4 +139,78 @@ class Usuario {
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
public static function buscarPorEmail($email) {
|
||||
$conexion = conexionBD();
|
||||
|
||||
if (is_array($conexion)) {
|
||||
return $conexion;
|
||||
}
|
||||
|
||||
try {
|
||||
$sql = "SELECT * FROM usuario WHERE email = :email";
|
||||
$stmt = $conexion->prepare($sql);
|
||||
$stmt->execute([':email' => $email]);
|
||||
|
||||
$datos = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($datos) {
|
||||
return new Usuario(
|
||||
$datos['nombreUsuario'],
|
||||
$datos['contrasena'],
|
||||
$datos['email'],
|
||||
$datos['avatar'],
|
||||
$datos['cookie'],
|
||||
(int)$datos['aciertos'],
|
||||
(int)$datos['victorias'],
|
||||
(int)$datos['derrotas'],
|
||||
(int)$datos['idUsuario']
|
||||
);
|
||||
}
|
||||
|
||||
return null; // No existe usuario con ese email
|
||||
|
||||
} catch (PDOException $error) {
|
||||
return [
|
||||
'error' => 'Ocurrió un error al buscar el usuario por email.',
|
||||
'error_tecnico' => $error->getMessage()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
public static function login($email, $contrasena)
|
||||
{
|
||||
$usuario = self::buscarPorEmail($email);
|
||||
|
||||
// El usuario no existe
|
||||
if (!($usuario instanceof Usuario)) {
|
||||
|
||||
// Limpiamos posibles datos de sesión anteriores
|
||||
unset($_SESSION['idUsuario']);
|
||||
unset($_SESSION['email']);
|
||||
unset($_SESSION['nombreUsuario']);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Comprobamos la contraseña
|
||||
if (password_verify($contrasena, $usuario->getContrasena())) {
|
||||
|
||||
// Usuario validado correctamente
|
||||
$_SESSION['idUsuario'] = $usuario->getIdUsuario();
|
||||
$_SESSION['email'] = $usuario->getEmail();
|
||||
$_SESSION['nombreUsuario'] = $usuario->getNombreUsuario();
|
||||
|
||||
// Devolvemos el usuario como hasta ahora
|
||||
return $usuario;
|
||||
}
|
||||
|
||||
// Contraseña incorrecta
|
||||
unset($_SESSION['idUsuario']);
|
||||
unset($_SESSION['email']);
|
||||
unset($_SESSION['nombreUsuario']);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
session_start();
|
||||
|
||||
require_once '../clases/Usuario.php';
|
||||
require_once '../clases/ClaseUsuario.php';
|
||||
|
||||
switch ($_POST['orden']) {
|
||||
|
||||
@@ -54,10 +54,6 @@ switch ($_POST['orden']) {
|
||||
|
||||
if ($resultado instanceof Usuario) {
|
||||
|
||||
$_SESSION['idUsuario'] = $resultado->getIdUsuario();
|
||||
$_SESSION['email'] = $resultado->getEmail();
|
||||
$_SESSION['nombreUsuario'] = $resultado->getNombreUsuario();
|
||||
|
||||
echo json_encode([
|
||||
'exito' => 'Login correcto',
|
||||
'idUsuario' => $resultado->getIdUsuario(),
|
||||
@@ -74,6 +70,7 @@ switch ($_POST['orden']) {
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case 'cerrarSesion':
|
||||
|
||||
session_destroy();
|
||||
@@ -83,4 +80,5 @@ switch ($_POST['orden']) {
|
||||
]);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
@@ -1,11 +1,4 @@
|
||||
<?php
|
||||
session_start();
|
||||
// Usuario logueado (CAMBIAR A NULL PARA CERRAR SESIÓN)
|
||||
$_SESSION['usuario'] = "Alexis";
|
||||
|
||||
$isLoggedIn = isset($_SESSION['usuario']);
|
||||
$username = $isLoggedIn ? $_SESSION['usuario'] : '';
|
||||
|
||||
|
||||
include 'cabecera.php';
|
||||
?>
|
||||
|
||||
Vendored
+2
File diff suppressed because one or more lines are too long
+7
-10
@@ -27,18 +27,17 @@ SET time_zone = "+00:00";
|
||||
-- Table structure for table `preguntas`
|
||||
--
|
||||
|
||||
CREATE TABLE `preguntas` (
|
||||
CREATE TABLE `pregunta` (
|
||||
`idPregunta` int NOT NULL,
|
||||
`idDificultad` int DEFAULT NULL,
|
||||
`idCategoria` int DEFAULT NULL,
|
||||
`pregunta` varchar(200) DEFAULT NULL
|
||||
`nombrePregunta` varchar(255) DEFAULT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
|
||||
|
||||
--
|
||||
-- Dumping data for table `preguntas`
|
||||
--
|
||||
|
||||
INSERT INTO `preguntas` (`idPregunta`, `idDificultad`, `idCategoria`, `pregunta`) VALUES
|
||||
INSERT INTO `pregunta` (`idPregunta`, `idCategoria`, `nombrePregunta`) VALUES
|
||||
(2140, 1, 4, '¿En qué año llegó Cristóbal Colón a América?'),
|
||||
(2141, 1, 5, '¿Cuál es la capital de Francia?'),
|
||||
(2142, 1, 6, '¿Qué planeta es conocido como el planeta rojo?'),
|
||||
@@ -442,9 +441,8 @@ INSERT INTO `preguntas` (`idPregunta`, `idDificultad`, `idCategoria`, `pregunta`
|
||||
--
|
||||
-- Indexes for table `preguntas`
|
||||
--
|
||||
ALTER TABLE `preguntas`
|
||||
ALTER TABLE `pregunta`
|
||||
ADD PRIMARY KEY (`idPregunta`),
|
||||
ADD KEY `idDificultad` (`idDificultad`),
|
||||
ADD KEY `idCategoria` (`idCategoria`);
|
||||
|
||||
--
|
||||
@@ -454,7 +452,7 @@ ALTER TABLE `preguntas`
|
||||
--
|
||||
-- AUTO_INCREMENT for table `preguntas`
|
||||
--
|
||||
ALTER TABLE `preguntas`
|
||||
ALTER TABLE `pregunta`
|
||||
MODIFY `idPregunta` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2535;
|
||||
|
||||
--
|
||||
@@ -464,9 +462,8 @@ ALTER TABLE `preguntas`
|
||||
--
|
||||
-- Constraints for table `preguntas`
|
||||
--
|
||||
ALTER TABLE `preguntas`
|
||||
ADD CONSTRAINT `preguntas_ibfk_1` FOREIGN KEY (`idDificultad`) REFERENCES `dificultades` (`idDificultad`),
|
||||
ADD CONSTRAINT `preguntas_ibfk_2` FOREIGN KEY (`idCategoria`) REFERENCES `categorias` (`idCategoria`);
|
||||
ALTER TABLE `pregunta`
|
||||
ADD CONSTRAINT `preguntas_ibfk_2` FOREIGN KEY (`idCategoria`) REFERENCES `categoria` (`idCategoria`);
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user