false, 'message' => 'Faltan datos requeridos']); exit; } $correo = mysqli_real_escape_string($conexion, trim($data['correo'])); $codigo = mysqli_real_escape_string($conexion, trim($data['codigo'])); $nueva_contrasena = mysqli_real_escape_string($conexion, $data['nueva_contrasena']); // Validar que la contraseña tenga al menos 6 caracteres if (strlen($nueva_contrasena) < 6) { echo json_encode(['success' => false, 'message' => 'La contraseña debe tener al menos 6 caracteres']); exit; } // Verificar el código y que no haya expirado $sql = "SELECT ID_Usuario, Codigo_Recuperacion, Fecha_Exp_Codigo FROM usuarios WHERE Correo = '$correo'"; $resultado = mysqli_query($conexion, $sql); if (!$resultado) { error_log('Error en SELECT: ' . mysqli_error($conexion)); throw new Exception('Error en la consulta: ' . mysqli_error($conexion)); } if (mysqli_num_rows($resultado) === 0) { echo json_encode(['success' => false, 'message' => 'Correo no encontrado']); exit; } $usuario = mysqli_fetch_assoc($resultado); $id_usuario = $usuario['ID_Usuario']; // Verificar si el código es correcto if ($usuario['Codigo_Recuperacion'] === null || $usuario['Codigo_Recuperacion'] === '') { echo json_encode(['success' => false, 'message' => 'No hay código generado. Solicita uno nuevo']); exit; } if ($usuario['Codigo_Recuperacion'] !== $codigo) { echo json_encode(['success' => false, 'message' => 'Código incorrecto']); exit; } // Verificar si el código ha expirado if ($usuario['Fecha_Exp_Codigo'] === null) { echo json_encode(['success' => false, 'message' => 'Error: fecha de expiración no registrada']); exit; } $fecha_actual = new DateTime(); $fecha_exp = new DateTime($usuario['Fecha_Exp_Codigo']); if ($fecha_actual > $fecha_exp) { echo json_encode(['success' => false, 'message' => 'El código ha expirado. Solicita uno nuevo']); exit; } // Actualizar la contraseña - IMPORTANTE: el nombre de la columna es "Contraseña" con acento $sql_update = "UPDATE usuarios SET `Contraseña` = '$nueva_contrasena', `Codigo_Recuperacion` = NULL, `Fecha_Exp_Codigo` = NULL WHERE ID_Usuario = $id_usuario"; if (!mysqli_query($conexion, $sql_update)) { error_log('Error en UPDATE: ' . mysqli_error($conexion) . ' | SQL: ' . $sql_update); throw new Exception('Error al actualizar: ' . mysqli_error($conexion)); } // Verificar que se actualizó correctamente if (mysqli_affected_rows($conexion) === 0) { error_log('Warning: UPDATE ejecutado pero no afectó filas'); echo json_encode(['success' => false, 'message' => 'No se pudo actualizar la contraseña']); exit; } echo json_encode(['success' => true, 'message' => 'Contraseña actualizada correctamente']); } catch (Exception $e) { error_log('Exception en Recuperar_Contrasena_Verificar: ' . $e->getMessage()); echo json_encode([ 'success' => false, 'message' => 'Error: ' . $e->getMessage() ]); } ?>