Sistema de registro de usuarios con rangos.

Iniciado por GonzaFz, 2 Febrero 2013, 06:11 AM

0 Miembros y 1 Visitante están viendo este tema.

GonzaFz

Estoy haciendo un proyecto en el que necesito un sistema de registro de usuarios y estoy elaborando el mio...
Tengo dos cositas que me hacen dudar mucho, la primera es que al tener rangos debo comprobarlos antes de mostrar cada sitio web pero seria molesto tener que agregar en cada pagina el llamado a la base de datos, la comprobacion y la devolucion del resultado.
Siguiendo esta guia:
http://www.phperos.net/foro/index.php?topic=2129.0
Veo que el que la hizo agrego la comprobacion en el config.php, pero cuando yo lo utilizo no me funciona..
Código (php) [Seleccionar]
<?php
// Config.php es la página que nos va a conectar al Servidor y luego a la Base de Datos
$hostname 'TU_HOST'// Host (generalmente es localhost)
$user 'TU_USER'// Usuario de la base de datos (por defecto en MySQL es root)
$pass 'PASSWORD'// Contraseña de la base de datos (por defecto en MySQL se deja en blanco)
$dbnombre 'BASEDEDATOS'// Nombre de la Base de Datos en la que vas a trabajar  devuelve atrás
$rango $_SESSION["nivel"];

 
mysql_connect($hostname$user$pass);
 
mysql_select_db($dbnombre);

// Aqui comenzamos la sesión
session_start();
// Funciones
if($rango == 2) {

$rango 'Moderador Global';
}

elseif(
$rango == 1) {

$rango 'Administrador';
}

elseif(
$rango == 3) {

$rango 'Moderador';
}

elseif(
$rango == 4) {

$rango 'Usuario';
}

?>


Si lo utilizo asi me dice: Notice: Undefined index: nivel in C:\xampp\.... Es tipo que no reconoce lo que esta dentro de $_SESSION['nivel']; lo que me hace pensar que no estoy utilizando correctamente...
O si tienen alguna forma que sea mas facil agradeceria.
Se que debo comprobar en cada pagina pero quiero ahorrarme tener que poner muchas lineas de codigo..

Y otra cosa, que tipo de seguridad puedo implementar al sistema para que no lo jodan? Es decir que recomiendan ustedes.

Shell Root

#1
1. No es un error, es un mensaje de noticia, que quiere decir que la sesión aun no se ha inicializado, es como por ejemplo, printear un valor por GET y tener
Código (php) [Seleccionar]
<?php echo $_GET['token']; ?>
Pero si en la url, no se manifiesta dicha variable, pues no existe!

----

2. Para simplificar el código, usa funciones o clases :p, mejor usa un framework es más simple, CodeIgniter es mi favorito :p
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

GonzaFz

#2
Quizas si me convenga utilizar clases para algunas cosas como la verificacion del usuario asi me ahorro bastante..

Mira pero no entiendo como hacer eso de la session =/!
Mi login es:
Código (php) [Seleccionar]
<?php
require_once('config.php');

$username $_POST['username'];
$password $_POST['password'];

if(isset(
$_POST['ingresar'])) {
$query mysql_query("SELECT * FROM usuarios WHERE nick='".$username."' and pass='".$password."'");
if(
mysql_num_rows($query) > 0){
     echo 
"Bienvenido $username";
   
}else{
     echo 
"Error";
}
}
?>


Y quiero que una vez logueado entonces su rango se guarde en el config o de alguna otra forma para que sea mas facil verificar y comprobar su nivel..

Muchas gracias por tu ayuda =).


EDITO:

Logre hacer que la session funcionara.. Coloco session_start() al inicio de cada pagina donde la necesito y luego llamo a las sesiones..
Ahora tengo un problema, cuando quiero obtener el "rango" de mi usuario, en vez de devolverme 4 que es el que tengo (en la bd cree un int llamado nivel) me devuelve 0.. Lo hago de esta forma:
Código (php) [Seleccionar]
<?php
session_start
();
require_once(
'config.php');

// Iniciamos
$username $_POST['username'];
$password $_POST['password'];

if(isset(
$_POST['ingresar'])) {
$query mysql_query("SELECT * FROM usuarios WHERE nick='".$username."' and pass='".$password."'");
if(
mysql_num_rows($query) > 0){
     
$rango mysql_query("SELECT nivel FROM usuarios WHERE nick='".$username."'");
     
$_SESSION['usuario'] = $username;
     
$_SESSION['nivel'] = $rango;
     


echo 
'<script language="javascript">window.location.href = "index.php";</script>';
   
}else{
     echo 
'<script language="javascript">window.location.href = "index.php";</script>';
}
 }

?>


Lo raro de todo esto es que username si me devuelve mi nick (varchar) pero rango solo me devuelve 0 (en la bd nivel es un int)..

Ahora encima me di cuenta que si debajo de las asignaciones a los $_SESSION hago mostrar $rango en un echo me devuelve :
tu rango es Resource id #6 ... No entiendo que esta mal en el llamado a la base de datos..


VUELVO A EDITAR:
Segun lei era porque estaba haciendo nuevamente un llamado por un dato que ya lo tengo..
Bueno la solucion es esta:
Código (php) [Seleccionar]
$query = mysql_query("SELECT * FROM usuarios WHERE nick='".$username."' and pass='".$password."'");
$datos = mysql_fetch_assoc($query);
$rango = $datos['nivel'];
$usuario = $datos['nick'];
        $_SESSION['nivel'] = $rango;
        $_SESSION['usuario'] = $usuario;

Ahora me queda otra duda.. Esta bien esta comprobacion de que el usuario y contraseña es correcto?
Código (php) [Seleccionar]
$query = mysql_query("SELECT * FROM usuarios WHERE nick='".$username."' and pass='".$password."'");

if(mysql_num_rows($query) > 0){

o es algo primitiva?