A
AlexMnrs
Beta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Buenas!
Hoy era el día en que iba a lanzar una web al público en la que llevo un tiempo trabajando, pero al parecer se va a retrasar debido a unos problemas que no me esperaba.
Básicamente en local el sitio funciona perfectamente, no tiene errores, pero al subirla al servidor tengo 1 problema, no funciona ni el login ni el registro.
Os voy a dejar el código de los archivos responsables de que estas dos secciones (login y registro) funcionen:
conectar.php
registrar.php
validar.js
Y en el formulario de registro, al botón le paso un onclick="registro(nombre.value, usuario.value, email.value, pass1.value, pass2.value, verifica.value);" y en el de login lo mismo pero onclick="conecta(usuario.value, pass.value);"
Como digo, en local funciona todo perfectamente. Puedo conectarme con mi cuenta, registrar nuevas, etc. lo normal. Sin embargo, en el servidor cuando pulso en el botón de conectarme o en el de registrar y miro el network en la consola de Chrome recibe un error 500 por respuesta:
Pero eso no es todo, he probado a subir la web a otro servidor, Hostinger en este caso que es el que uso para testear cosas, y tampoco funcionan los botones, pero el status en el network ya no es un 500 Internal Server Error, sino un 200 OK...
No sé qué puede estar pasando, pero me trae loco :ambivalence: a ver si podéis arrojarme un poco de luz porque estoy algo perdido ahora mismo...
Muchas gracias!
Hoy era el día en que iba a lanzar una web al público en la que llevo un tiempo trabajando, pero al parecer se va a retrasar debido a unos problemas que no me esperaba.
Básicamente en local el sitio funciona perfectamente, no tiene errores, pero al subirla al servidor tengo 1 problema, no funciona ni el login ni el registro.
Os voy a dejar el código de los archivos responsables de que estas dos secciones (login y registro) funcionen:
conectar.php
PHP:
<?php
include_once('inc/config.php');
// Validar formulario
if (!isset($_POST['usuario']) || $_POST['usuario'] == '' || $_POST['pass'] == '') exit;
// sprintf nos devuelve un string formateado y de esa manera protegemos las peticiones de inyecciones sql
$login = sprintf("SELECT * FROM ".$prefijo."_usuarios WHERE usuario=%s AND pass=%s OR email=%s AND pass=%s ",
formatearcadena($_POST['usuario'], "text"),
formatearcadena(md5($_POST['pass']), "text"),
formatearcadena($_POST['email'], "text"),
formatearcadena(md5($_POST['pass']), "text"));
$consulta_login = mysqli_query($conexion, $login) or die('Error: ' . mysqli_error($conexion));
$datos_login = mysqli_fetch_assoc($consulta_login);
$cantidad_login = mysqli_num_rows($consulta_login); // 0 = No existe, 1 = Existe
if ($cantidad_login == 1) {
$_SESSION['id'] = $datos_login['id'];
$_SESSION['usuario'] = $datos_login['usuario'];
// LA SESSION DE ADMIN DESAPARECE CUANDO CIERRAS EL NAVEGADOR. FIX!!!
if ($_SESSION['id'] == 1 && $_SESSION['usuario'] == "admin") {
$_SESSION['admin'] = true;
}
if (isset($_POST['mantener-sesion']) && $_POST['mantener-sesion'] == 'on') {
// Mantener la sesión iniciada
setcookie('bci', $datos_login['id'], time()+30*24*60*60, '/');
setcookie('bcu', $datos_login['usuario'], time()+30*24*60*60, '/');
}
echo 'correcto';
} else echo 'error';
mysqli_free_result($consulta_login);
?>
registrar.php
PHP:
<?php
include_once('inc/config.php');
// Validar formulario
if (!isset($_POST['nombre']) || $_POST['usuario'] == '' || $_POST['email'] == '' || $_POST['pass1'] == '') exit;
// Comprueba si el usuario/email ya existe en la base de datos
// sprintf nos devuelve un string formateado y de esa manera protegemos las peticiones de inyecciones sql
$comprobar_existe = sprintf("SELECT * FROM ".$prefijo."_usuarios WHERE email=%s OR usuario=%s",
formatearcadena($_POST['email'], "text"),
formatearcadena($_POST['usuario'], "text"));
$consulta_existe = mysqli_query($conexion, $comprobar_existe) or die('Error: ' . mysqli_error($conexion));
$datos_existe = mysqli_fetch_assoc($consulta_existe);
$cantidad_existe = mysqli_num_rows($consulta_existe); // 0 = No existe, 1 = Existe
if ($cantidad_existe == 0) {
// Insertar usuario
$insertar = sprintf("INSERT INTO ".$prefijo."_usuarios (nombre, usuario, email, pass) VALUES (%s, %s, %s, %s)",
formatearcadena($_POST['nombre'], "text"),
formatearcadena($_POST['usuario'], "text"),
formatearcadena($_POST['email'], "text"),
formatearcadena(md5($_POST['pass1']), "text"));
// Ejecutar la consulta
$resultado_insertar = mysqli_query($conexion, $insertar) or die(mysqli_error($conexion));
echo 'correcto';
} else {
echo 'existe';
}
mysqli_free_result($consulta_existe);
?>
validar.js
PHP:
var maximoCaracteresNombre = 30;
var maximoCaracteresUsuarioPass = 20;
var maximoCaracteresEmail = 100;
function conecta(usuario, pass) {
if (limpiar(usuario) != '' && limpiar(pass) != '') {
// Intentar llevar a cabo el login
$.ajax({
// Especificamos si será una petición POST o GET
type: 'POST',
// Le pasamos la URL para la petición
url: 'inc/conectar.php',
// Establecemos si la petición será guardada en la cache del navegador o no.
// Cuando el valor es false, se agrega una cadena de caracteres anti-cache
// al final de la URL de la petición
cache: false,
// Esta es la información a enviar. En este caso estamos serializando, es decir, recogiendo
// los datos que el usuario ha ingresado en el formulario de registro
data: $('#frmConectar').serialize(),
// Código a ejecutar si la petición es satisfactoria
// la respuesta es pasada como argumento a la función
success: function(respuesta) {
if (limpiar(respuesta) == 'correcto') {
// Recargar la página
window.location.reload();
} else if (limpiar(respuesta) == 'error') {
// Mostrar error
$('#login-erroneo').fadeIn(500);
$('#login-mensaje-error').text('Datos incorrectos. Vuelve a intentarlo.');
}
}
});
} else {
$('#login-erroneo').fadeIn(500);
$('#login-mensaje-error').text('Todos los campos son obligatorios');
}
}
function registro(nombre, usuario, email, pass1, pass2, verifica) {
if (limpiar(nombre) != '' && limpiar(usuario) != '' && limpiar(email) != '' && limpiar(pass1) != '' && limpiar(pass2) != '' && limpiar(verifica) == '') {
if (limpiar(pass1) != limpiar(pass2)) {
$('#registro-erroneo').fadeIn(500);
$('#registro-mensaje-error').text('Las contraseñas no coinciden');
} else if (limpiar(nombre).length > maximoCaracteresNombre) {
$('#registro-erroneo').fadeIn(500);
$('#registro-mensaje-error').text('El nombre es demasiado largo');
} else if (limpiar(usuario).length > maximoCaracteresUsuarioPass) {
$('#registro-erroneo').fadeIn(500);
$('#registro-mensaje-error').text('El usuario es demasiado largo');
} else if (limpiar(email).length > maximoCaracteresEmail) {
$('#registro-erroneo').fadeIn(500);
$('#registro-mensaje-error').text('El email es demasiado largo');
} else if (limpiar(pass1).length > maximoCaracteresUsuarioPass) {
$('#registro-erroneo').fadeIn(500);
$('#registro-mensaje-error').text('La contraseña es demasiado larga');
} else {
// Intentar llevar a cabo el registro
$.ajax({
// Especificamos si será una petición POST o GET
type: 'POST',
// Le pasamos la URL para la petición
url: 'inc/registrar.php',
// Establecemos si la petición será guardada en la cache del navegador o no.
// Cuando el valor es false, se agrega una cadena de caracteres anti-cache
// al final de la URL de la petición
cache: false,
// Esta es la información a enviar. En este caso estamos serializando, es decir, recogiendo
// los datos que el usuario ha ingresado en el formulario de registro
data: $('#frmRegistro').serialize(),
// Código a ejecutar si la petición es satisfactoria
// la respuesta es pasada como argumento a la función
success: function(respuesta) {
if (limpiar(respuesta) == 'correcto') {
$('#registro-erroneo').fadeOut(500);
$('#registro-correcto').fadeIn(500);
$('#registro-mensaje-ok').text('Usuario registrado satisfactoriamente. Redirigiendo a la página de login...');
setTimeout(function() {
window.location.href = url + "conectar";
}, 3000);
} else if (limpiar(respuesta) == 'existe') {
// Mostrar error
$('#registro-erroneo').fadeIn(500);
$('#registro-mensaje-error').text('El usuario o email ya está registrado');
}
}
});
}
} else {
$('#registro-erroneo').fadeIn(500);
$('#registro-mensaje-error').text('Todos los campos son obligatorios');
}
}
function limpiar(valor) {
var cadena = valor.split(' ').join('');
return cadena;
}
Y en el formulario de registro, al botón le paso un onclick="registro(nombre.value, usuario.value, email.value, pass1.value, pass2.value, verifica.value);" y en el de login lo mismo pero onclick="conecta(usuario.value, pass.value);"
Como digo, en local funciona todo perfectamente. Puedo conectarme con mi cuenta, registrar nuevas, etc. lo normal. Sin embargo, en el servidor cuando pulso en el botón de conectarme o en el de registrar y miro el network en la consola de Chrome recibe un error 500 por respuesta:

Pero eso no es todo, he probado a subir la web a otro servidor, Hostinger en este caso que es el que uso para testear cosas, y tampoco funcionan los botones, pero el status en el network ya no es un 500 Internal Server Error, sino un 200 OK...
No sé qué puede estar pasando, pero me trae loco :ambivalence: a ver si podéis arrojarme un poco de luz porque estoy algo perdido ahora mismo...
Muchas gracias!