Crear sesiones para varios roles con PHP para una intranet
En el siguiente apartado vamos a explicar como crear varios roles para una intranet usando sesiones en PHP.
Empezaremos explicando los conceptos básicos y después realizaremos un caso práctico paso a paso.
Conceptos básicos de las sesiones en PHP
- Las sesiones son un mecanismo para almacenar información en el servidor que permanecerá entre un acceso y otro.
- Al conectarse un usuario se le asigna un identificador de sesión con el que se asociará la información.
- Cuando se inicia una sesión en PHP comprueba automáticamente si ya existía alguna, en el caso que exista recupera toda la información de la sesión.
- A la información que se almacena en una sesión se le llama variable de sesión.
- Se crea una sesión con la función session_start().
- El vector $_SESSION almacena las variables de sesión.
- Para destruir los datos asociados a una sesión se utiliza la función session_destoy().
Caso práctico para crear sesiones para diferentes roles de usuarios
Para comenzar a explicar este ejemplo definiremos tres roles diferentes aunque podemos definir todos los que queramos.
Una vez tengamos claro cuáles van a ser esos roles, en nuestro caso serán: Director, profesor y alumno comenzaremos por crearnos una tabla en nuestra base de datos, en este caso nosotros utilizaremos la base de datos MySQL.
Nuestra tabla almacenada en la base de datos deberá tener un usuario y contraseña como valores obligatorios y como valores opcionales podemos incluir nombre y apellidos. Nuestro ejemplo usará estos datos pero vosotros pondréis los campos que os interesen, la restricción es que tiene que tener un identificador que sea clave primaria, en nuestro caso será usuario y una contraseña para confirmar el acceso a la sesión.
Como tenemos tres roles crearemos tres tablas diferentes llamadas directores, profesores y alumnos, también se podría incluir los tres roles en una tabla única y crear un campo que se llamara estado por ejemplo para indicarle su rol, pero nosotros lo haremos separándolas totalmente, cada uno que lo haga de la forma que más se adapte a su sistema.
Vuelvo a comentar el tema de los campos porque lo más importante es tenerlo todo claro antes de comenzar.
Necesitamos que un campo sea clave primaria, lo que me refiero con esto es que este campo no se va a poder repetir, hablando más claro si nuestra clave primaría es usuario (recomendado) solo va a poder existir un usuario con este nombre por lo tanto no podrán haber dos usuarios con el mismo nombre y no tendremos problemas a la hora de manejar nuestras sesiones.
Vamos a usar dos archivos el primero contendrá un formulario que tendrá como objetivo enviar el nombre del usuario y la contraseña.
Este ejemplo funcionará bien se tenemos la certeza que no se va a llamar un usuario de la misma manera en los tres roles. Por lo tanto una restricción de nuestro sistema sería que un usuario tiene que ser único y si existe en un rol no puede existir en otro. Si se va a crear un registro para que los usuarios se puedan registrar libremente una solución sería antes de registrar un usuario en un rol realizar una consulta sobre las tres tablas y comprobar que no existe en ninguna de ellas.
El segundo archivo será donde comprobemos si el usuario está registrado en la base de datos.
Bien, una vez que lo tenemos claro vamos a la implementación.
Ahora creamos un formulario para poder introducir el usuario y la contraseña.
Primer archivo:
Aquí visualizamos el código de un formulario común donde a través del método POST mandaremos el valor de los campos usuario y password a nuestro archivo manejadorsesiones.php.
<form action="manejadorsesiones.php" method="post"> <input name="usuario" type="text" placeholder="Usuario" /> <input name="password" type="password" placeholder="Contraseña" /> <input type="submit" value="Acceder" class="enviar"> </form> |
Para que funcione el proceso deberemos insertar un par de alumnos, profesores y directores directamente desde MySQL ya que no tenemos en nuestro caso un formulario de registro donde poder insertar usuarios y necesitamos ejemplos para ver que el sistema de autentificación funciona.
Una vez tengamos la tabla creada la conectamos desde nuestro código PHP. (Esta parte no la comentamos, pero si tenéis alguna duda comentar en el artículo y os responderé con mucho gusto).
Segundo archivo (en nuestro caso manejadorsesiones.php):
//Recibimos las dos variables $usuario=$_POST["usuario"]; $password=$_POST["password"]; /* Realizamos una consulta por cada tabla para buscar en que tabla se encuentra el usuario que está intentando acceder */ $alumno = mysql_query("SELECT * FROM alumnos WHERE alumno = '$usuario' AND password = '$password'"); $profesor = mysql_query("SELECT * FROM profesores WHERE profesor = '$usuario' AND password = '$password'"); $director = mysql_query("SELECT * FROM directores WHERE director = '$usuario' AND password = '$password'"); /* Sabemos que en el caso que exista el usuario se encontrará en una de estas tres tablas, por lo tanto se guardará en alguno de nuestras tres variables que guardan nuestra consulta */ /* Ahora comprobamos que variable contiene al usuario*/ if(mysql_num_rows($alumno) > 0) { /* Si entra en este if significa que el que intenta acceder es un alumno, por lo tanto le creamos una sesión */ session_start(); $_SESSION['alumno']="$usuario"; /* Nos dirigimos al espacio de los alumnos usando header que nos redireccionará a la página que le indiquemos */ header("Location: alumnos/espacioalumno.php"); /* terminamos la ejecución ya que si redireccionamos ya no nos interesa seguir ejecutando código de este archivo */ exit(); } /* Ahora comprobamos si el que intenta acceder es un profesor */ else if(mysql_num_rows($profesor) > 0) { session_start(); $_SESSION['profesor']="$usuario"; header("Location: entrenador/espacioentrenador.php"); exit(); } //comprobamos si es un director el que intenta abrir la sesión else if(mysql_num_rows($director) > 0) { session_start(); $_SESSION['director']="$usuario"; header("Location: administrador/espacioadministrador.php"); exit(); } else { /* Si no el usuario no se encuentra en ninguna de las tres tablas imprime el siguiente mensaje */ $mensajeaccesoincorrecto = "El usuario y la contraseña son incorrectos, por favor vuelva a introducirlos."; echo $mensajeaccesoincorrecto; } |
Cuando entre en un if crearemos una sesión en PHP que nos permitirá acceder a zonas restringidas para ciertos roles, vamos a ver por ejemplo el proceso si entra en el if del alumno.
El comando header(«Location: alumnos/espacioalumno.php»); nos dirigirá a dicha ruta, una vez accedamos a espacioalumno.php solo podremos leerlo si efectivamente somos un alumno, esto se comprueba colocando el siguiente código PHP en la parte superior del archivo.
//abrimos la sesión session_start(); //Si la variable sesión está vacía if (!isset($_SESSION['alumno'])) { /* nos envía a la siguiente dirección en el caso de no poseer autorización */ header("location:../index.php"); } |
Para que veamos cómo cambia al acceso a un área restringida de un alumno a un profesor os pongo como sería su código (lo único que debemos hacer es cambiar alumno por profesor):
//abrimos la sesión session_start(); //Si la variable de sesión profesor está vacía if (!isset($_SESSION[profesor])) { //nos envía al inicio header("location:../index.php"); } |
Este código se puede poner en los archivos PHP que queramos tener protegidos.
Tenemos una sesión creada pero cuando ya no se vaya a usar hay que destruir la sesión, para ello deberemos eliminar la sesión una vez el usuario se desconecta, por lo tanto se puede incluir un botón de cerrar sesión que al pulsarlo nos dirigirá a otro fichero, por ejemplo cerrar-sesion.php donde se encargará de destruir la sesión con el siguiente código:
<?php session_start(); /* comprobamos que un usuario registrado es el que accede al archivo, sino no tendría sentido que pasara por este archivo */ if (!isset($_SESSION[alumno])) { header("location:../index.php"); } /* usamos la función session_unset() para liberar la variable de sesión que se encuentra registrada */ session_unset($_SESSION[alumno]); // Destruye la información de la sesión session_destroy(); //volvemos a la página principal header("location:../index.php"); ?> |
corrígeme si me equivoco, en la base de datos creo las tres tablas y a cada una le creo los campos usuario y contraseña? o creo una tabla aparte para eso?
Hola, en el caso prático del ejemplo se crea el usuario y la contraseña en las tres tablas para los tres roles diferentes.
De todas maneras existen muchas formas de hacerlo dependiendo del diseño de tu base de datos y la funcionalidad de tu aplicación, otra forma interesante de hacerlo es crear una tabla llamada USUARIOS donde se almacenase todos los usuarios de la aplicación y en ella que existiera un campo llamado por ejemplo «tipo_rol» donde indicará su rol así la tabla tendría tres campos (usuario, contraseña, tipo_rol) siendo usuario clave primaria o incluyendo un identificador nuevo.
A la hora de redirigir a una parte de la intranet u a otra solo tendrías que preguntar cual es su rol.
Saludos!
Hola, soy nuevo en esto, como podria implementar lo de los roles de usuarios? tengo una tabla usuarios, donde tengo su usuario, contraseña y tipo de perfil, la cual tipo de perfil es una llave foranea hacia la tabla perfiles
La estructura de la base de datos depende de los requerimientos y funcionalidades de la aplicación, dependiendo de esto se puede hacer de una manera u otra, por lo que has dicho tienes una tabla llamada usuarios donde me imagino que el usuario será clave primaria, esta tabla tiene un campo que es tipo de perfil, este campo se alimenta de los valores de la tabla tipo de perfil donde me imagino que será una tabla con dos campos, el valor y la descripción donde el valor será la clave primaria.
El planteamiento me parece correcto, en el campo tipo_perfil de la tabla usuario se almacenará el valor del rol, no la descripción, si en algún momento deseas obtener la descripción del rol tendrás que hacer una SELECT con un LEFT JOIN comparando los identificadores de perfil de las dos tablas.
A partir de aquí si deseas más información tendrás que especificar un poco más que es lo que quieres.
Saludo!
Mi pregunta es, como aplico el tipo de rol en el segundo archivo para que me direcccione a una pagina especifica dependiendo el tipo de rol?
Hola de nuevo, pues de la siguiente forma:
Una vez recibas del formulario el usuario y la contraseña deberas hacer una SELECT sobre la tabla usuarios para ver si el usuario existe en dicha tabla como:
SELECT perfil_rol FROM usuariosbWHERE usuario= ‘$usuario’ AND password = ‘$password’
Esta consulta nos devolverá en el caso que exista el usuario y coincida la contraseña el tipo de rol que es mediante el campo perfil_rol, una vez tengamos el perfil_rol solo es comprobar de que tipo es poniendo if o switch, como por ejemplo:
if($perfil_rol ==1)
{ va a la página1}
if($perfil_rol ==2)
{ va a la página2}
Saludos!
Amigo, saludos y gracias por responder, lo hice ahora el problema que tengo es que me dice este error » mysql_num_rows() expects parameter 1 to be resource, boolean given in » en los tres if que crees tu que pueda hacer? y si sabes que quiere decir esto te agradecería si lo explicaras brevemente
Al hacer la consulta (SELECT…) la función mysql_num_rows() te devuelve el número de tuplas que ha devuelto la SELECT, para que funcione correctamente necesitas pasarle como parámetro el array que contiene la consulta, en el caso del artículo sería: mysql_num_rows($profesor)
También decirte que no necesitas obligatoriamente utilizar la función mysql_num_rows() para comprobar si ha encontrado algún resultado, para saber si un array está vacio siemplemente puedes usar la función de PHP empty como:
if(empty($profesor)) { }
Saludos!
No logro comprender el error y la solución que usted da, soy nuevo en esto y quisiera saber si existe otra forma de explicar el error: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
Lo que te está diciendo es que la función de MySQL «mysql_num_rows» necesita un parámetro, y este parámetro debe de ser el resultado de la consulta, por lo tanto comprueba primero si falla tu consulta SQL, un saludo.
Hola
Me sale perfecto, pero presento el siguiente problema:
Tengo 3 alumnos y cuando inicio sesión deseo que al alumno le aparezcan sus datos de inicio de sesión, el detalle es que siempre muestra la información del alumno de la primera fila, aunque haya iniciado sesión con el tercer alumno.
Como puedo solucionarlo?
Saludos
Ya lo solucioné.
Ahora como puedo validar esto en ajax? o en java para no ser redireccionado a manejadorsesiones.php y que ahi muestre el error, sino desde el mismo login, que valide los errores.
Hola, si quieres hacerlo mediante ajax o javascript es algo más complejo, te recomiendo que mires algún tutorial de internet ya que existen muchos donde te explican paso a paso lo que tienes que hacer.
Puedes mirar aquí:
http://www.desarrolloweb.com/articulos/procesar-formulario-ajax-validacion.html
Saludos y mucha suerte.
Hola esta excelente el tutorial tengo una consulta
Tengo una tabla que se llama
tblusuarios
En esta tengo varios campos entre ellos usuIdentificacion, usuTipoUsuario, usuContraseña
Tengo dos tipos de usuario Administrador y Cajero quiero autenticar al usuario si es Administrador lo envía a una página y si es Cajero lo envié a otra.
Ejemplo
$doc $tipousuario $pass
usuIdentificacion usuTipoUsuario usuContraseña
123456789 Administrador 1234
1234567 Cajero 3333
$sql = «SELECT * FROM tblusuarios WHERE usuIdentificacion = ‘$doc’ and usuTipoUsuario = ‘$tipousuario’ and usuPassword = ‘$pass’
Con eso autentico al usuario
Pero quiero saber si es Administrador o Cajero para poderlo redireccionar
Hola, por lo que veo ya lo tienes casi. Te pongo los pasos a seguir:
1-El usuario accede mediante un formulario introduciendo el usuario/contraseña.
2-Recogemos las variables del formulario y realizamos la consulta, en la consulta recogemos el contenido de los campos de la tabla en el caso de que traiga algún resultado sino el usuario o la contraseña serán incorrectas y se mostrará el mensaje de aviso al usuario.
La consulta que has puesto no es correcta ya que en la parte del WHERE solo tienes que comparar el usuario y la contraseña, no el tipo, quedaría de la siguiente manera:
$sql = “SELECT * FROM tblusuarios WHERE usuIdentificacion = ‘$doc’ and usuPassword = ‘$pass’»;
3-Una vez que sepamos que el usuario existe en nuestra tabla nos traemos las variables de usuIdentificacion y usuTipoUsuario.
4- Creamos una sesión con el nombre del usuario:
$_SESSION[‘usuario’]=»$usuario»;
5- En el último punto comprobamos el valor de usuTipoUsuario y hacemos un if, si es Administrador ves a una página sino ves a la otra usando:
header(«Location: tuRuta.php»);
Saludos!
excelente tengo un problema al tener mas de 10 usuarios no crearemos 10 paginas con datos de ese usuario. mi problema es como asignar un id para que cuando inicie abra con los datos solo de ese usuario
$alumnos = mysql_query(«SELECT * FROM alumnos WHERE alumno = ‘$usuario’ AND password = ‘$password'»);
if(mysql_num_rows($alumno) > 0)
{
session_start();
$_SESSION[‘alumno’]=»$usuario», $id;
header(«Location: alumnos/espacioalumno.php»);
exit();
}
Hola Edu, muy sencillo (en el caso que sea la misma página para los 10 usuarios y únicamente cambie la información a visualizar), en la página donde gestionamos el usuario que accede a la aplicación (login) creamos una sesión:
$_SESSION[‘alumno’]=”$usuario”;
Al crear la sesión nos guardamos información que después utilizaremos.
Después redireccionará a la página:
header(“Location: alumnos/espacioalumno.php”);
En este archivo comprobamos si existe una sesión y en ese caso afirmativo usamos la variable guardada en sesión: $_SESSION[‘alumno’]
Después que identifiquemos que usuario es entonces es cuando realizamos las correspondientes consultas SQL obteniendo los datos, (lógicamente tendrás que poner en la WHERE de la consulta al usuario conectado para que solo te salga un resultado).
Saludos!
Buenas Tardes,
En mi caso el id y la contraseña se encuentran en un tabla y el tipo de usuario se encuentra en otra tabla como podria hacer la validacion?
Gracias
Hola, usando la instrucción de SQL JOIN.
Muy bien explicado!!! voy a ponerlo en practica, tenia la idea pero no sabia como ejecutarla bien . Gracias!!!
Excelente aporte, una consulta, cómo les asigno a cada usuario permisos de lectura, escritura, agregar, eliminar?
Digamos Director: todos los permisos
Profesor: Ver y escribir
Alumno: ver
Gracias
Hola Ing de que manera se conecta a la base de datos de un servidor externo donde están las tablas del sql ? Como configuro los roles para que cada quien solo puedan acceder a una carpeta y negar permisos de acceder a otras ?
Amigo tengo un problema,tengo 2 roles uno es de usuario y el otro es de administrador,cuando inicio sesión como usuario ingresa normal,y abro otra pestaña para ingresar como administrador y ingresa correctamente pero cuando vuelvo a la pestaña de usuario la sesión del usuario se reemplaza por la del administrador,que podría hacer?
Cordial Saludo
Hola, quisiera consultarte lo siguiente, estoy pensando crear una pagina web donde los clientes ingresen con su numero de RUC y puedan ver sus facturas, soy nueva en esto, te agradecería que me respondas.
hola me ayudas las tablas
Gracias, con esto ya tengo la idea para implementarlo en un pequeño sistema que requiere mostrar diferentes páginas en función del tipo de usuario. Bien explicado el concepto base.
Hola, quería hacer una consulta. Tengo dos paginas : (administrador.php, usuario.php). si me logueo como administrador entro a la pagina «administrador» y si ingreso como usuario entro a la pagina «usuario» pero si ya he iniciado session con alguno de los dos tipos de usuario y voy al navegador y cambio el archivo me ingresa al otro usuario sin necesidad de loguearme como podría controlar esto. Por Ejemplo
1. ingreso como administrador
localhost/login/administrador.php, pero si cambio esta parte /usuario.php en el navegador me ingresa al otro archivo sin necesidad de loguearme como usuario. Gracias
Hola, tienes que crear una sesión diferente para cada rol, y cuando vayas a entrar a algún archivo primero comprobar si la sesión pertenece a dicho rol. En el artículo se explica. Saludos.
Hola, quiero hacer una consulta realice los pasos tal cual , solo que al momento e ingresar el usuario y password…me envia el siguente error:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\…
puede ayudarme…Gracias
Revisa que la consulta SQL devuelve datos. Saludos.
buen dia ingeniero IVAN
BUEN TUTORIAL muy claro
COMO PUEDO IMPLEMENTAR esta logo por roles en MYSQLI ya que como usted sabe ya la MSQL a la fecha ya se remplazo por MSQLI
gracias.
es muy importante para mi su respuesta
desde COLOMBIA
SIGUIENDO CON LO ANTERIOR
estoy estudiando tegnologia en analisis y desarrollo de sistemas de informacion.
ya termine la etapa lectiva en el SENA y ahora me encuentro diligenciando unas practicas pero solo me enseñaron a iniciar sesion con un solo usuario en php y MYSQLI ya lo he hecho pero hasta ahora no encontrado informacion en internet para inicio session start por roles me gustaria contar con su ayuda para lograr tan importante uso para el sistema de informacion por roles. gracias
Hola, aquí tienes toda la información que necesitas de la libreria PHP: MySQLi
http://php.net/manual/es/book.mysqli.php
Saludos.
exelente este ejemplo me sirvio muchooo necesitaba algo como esto , aunque lo estoy trabajando en postgres sql… igual gracias por este gran ejemplo.!
una pregunta si el usuario se encuentra repetido que mensaje debería mostrar? osea si los usuarios estan en ambas tablas no muestra ningun msj?… entra normal?…
Hola, en este caso práctico se entiende que no puede estar repetido ya que a la hora de inserción de usuarios se comprobaría antes de insertar algún usuario si ya existe en algunas de las tres tablas. Si en tu sistemas dejas que los nombres se repitan entonces una solución es que el usuario antes de loguearse escoja a que espacio quiere acceder.
El ejercicio esta hecho de esta manera pero también puedes usar una única tabla donde los diferentes roles pueden estar declarados en un campo de esa tabla. Por ejemplo campo rol donde tendrá tres estados (D, P, A)
y a través de este campo sabrás donde redireccionar.
Saludos.
Hola disculpa tengo una duda me podrías ayudar.
Tengo que una pagina de inicio donde tengo un login con un usuario y contraseña lo que quiero es extraer el valor del usuario y guardarlo en un campo de una tabla en una base de datos.
Hola Martín, una vez tengas el valor del usuario únicamente tienes que realizar un INSERT sobre la tabla de tu base de datos. Saludos.
Hola amigo soy nuevo en esto, tengo problemas porque me sale este mensaje Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C….
Serias tan amable de pasarme tus archivos completos para poder ver como haces la conexión y lo demás por favor.
No tengo ahora mismo los archivos pero el Warning que te da es porque el resultado de la SELECT no ha devuelto ninguna tupla. Saludos.
hola y si un alumno quiere entrar a un link de un profesor, me imagino que no le dejaria entrar por que no esta registrado el alumno a la tabla profesor o se tendria que hacer una condición, y otra duda si un usuario ya registrado y que ya inicio sesión digamos lo redirecciona a alumnos/espacioalumno.php… si el alumno trata de ingresar a la pagina de index.php… en este caso sale de la sesion. lo que yo quiero saber como hacer para que no pueda entrar a a index.php ya que tiene sesion quiero que me redirecciones a alumnos/espacioalumno.php ese es mi duda es que yo ando praticando ya pude hacer lo que me dijiste y pues quisiera saber como se procede gracias.
Hola Faustino, te voy contestando:
Pregunta 1: un usuario no podrá acceder al espacio del profesor porque en la clase manejadorsesiones.php se crea una sesión diferente por cada rol, en el caso del profesor será: $_SESSION[‘profesor’], por lo tanto un alumno nunca tendrá una sesión creada de rol profesor, así que no podrá acceder a ficheros de profesores siempre y cuando se tenga la restricción de: if (!isset($_SESSION[profesor]))…. al principio de los archivos del profesor.
Pregunta 2: realiza una condición que compruebe que la variable sesión no este vacía, y posteriormente ya realizas la redirección.
Saludos.
ivan he intentado hacerlo pero no se como hacer el login de dos usuarios un administrador y un usuario a un help desk pero no se que hacer y no se si me puedas ayudar gracias
hola buenas tarde
necesito ayuda para realizar una consulta de dos tablas usuario y rol ,desde el nombre del usuario dar clic y que me muestre los roles de cada uno de esos usuario hay con php incluido gracias.
Hola, no se muy bien lo que quieres decir pero si necesitas realizar una consulta que obtenga los datos de la tabla usuario y rol puedes usar la sentencia SQL «JOIN», de esta manera obtendrás por una parte los campos de un usuario en concreto y además la información de su rol. Pero siempre tendrás que tener relacionadas las tablas usuario ( con un id del rol) con la tabla del rol (descripción del rol). Saludos.
quisiera tener un rol de administrador el cual me permita asignar roles a cualquier usuario nuevo que agregue podría dar cualquier nombre
como haces que la session el usuario profesor enga acceso a la zona de estudiante pero estudiante no a la zona profesor ?
Hola, al entrar en el archivo php de la zona del estudiante debes comprobar si se ha abierto una sesión con el usuario o con el «profesor» y si es así lo dejas pasar, una vez dentro ya tienes que gestionar que puede hacer un rol y que puede hacer el otro.
En la zona del profesor solo se podrá entrar como antes, con una sesión abierta únicamente del profesor y no del estudiante.
Saludos.
como realizo sesiones para dos usuarios diferentes y que me redireccione a paginas diferentes con mysqli
Si te he entendido bien lo que quieres hacer se explica en el artículo.
Crea dos roles diferentes (cada uno con un nombre de sesión diferente) y con la siguiente función lo rediriges dependiente si es un rol u otro :
header(«Location: tupagina.php»);
Saludos.
Ayuda…
( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\inicio de varias sesiones\manejadorsesiones.php on line 18
Call Stack
# Time Memory Function Location
1 0.0034 377008 {main}( ) ..\manejadorsesiones.php:0
2 0.0118 383216 mysql_num_rows ( ) ..\manejadorsesiones.php:18
( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\inicio de varias sesiones\manejadorsesiones.php on line 36
Call Stack
# Time Memory Function Location
1 0.0034 377008 {main}( ) ..\manejadorsesiones.php:0
2 0.0123 383384 mysql_num_rows ( ) ..\manejadorsesiones.php:36
( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\inicio de varias sesiones\manejadorsesiones.php on line 45
Call Stack
# Time Memory Function Location
1 0.0034 377008 {main}( ) ..\manejadorsesiones.php:0
2 0.0127 383384 mysql_num_rows ( ) ..\manejadorsesiones.php:45
El usuario y la contraseña son incorrectos, por favor vuelva a introducirlos.
Hola, la función mysql_num_rows() está dando fallo porque el parámetro que le estás pasando está vacío, osea que existe algún error en la consulta que has realizado. Un saludo.
hola , en esta aparte del codigo : $_SESSION[‘alumno’]=»$usuario»;
que es lo que guarda?
use tu codigo y me funciona perfecto adaptado a mi proyecto pero quiero usar las sessiones para tomar los datos del usuario (nombre y numero de control) que se logea que en este caso es el alumno , me pordrias decir como podria hacerle ? , se que es con sessiones pero como lo adapto con tu codigo en esa parte
yo solamente cambie $_SESSION[‘alumno’]=»$usuario»; por $_SESSION[‘alumno’]=’$usuario’; y me funciono
Alguien puede explicarme como crear las tablas, no entiendo bien esa parte, el resto si esta facil.
necesitas primero crear una clase conexion.php
necesitas primero crear una clase conexion.php
$conexion=mysqli_connect(«localhost»,»root»,»contraseña»,»nombre_de_la_base_de_datos») or
die(«problemas con la conexion»);
despues en la clase manejadorsession.php llamas la conexión y procedes a realizar la consulta por ejemplo
require_once(‘conexion.php’);
$alumno = mysqli_query($conexion,»SELECT * FROM alumnos WHERE alumno = ‘$usuario’ AND password = ‘$password'»);
if(mysqli_num_rows($alumno) > 0)
{
session_start();
$_SESSION[‘alumno’]=»$usuario»;
header(«Location: alumnos/espacioalumno.php»);
exit();
}
Como puedo hacer para que cada rol tenga acceso a un menú particular.
La encargada de registrar un alumno sólo pueda registrar alumnos pero no editarlos por ejemplo.
La encargada de registrar un proveedor pueda registrar el proveedor pero también modificarlo.
Y como hacer que ninguno tenga acceso al otro rol al poner la ruta del archivo en la barra de dirección.
nesesito saber que privilegios se le asignan a un usauri para que solo pueda ver dos campos de una tabla???
ayuda xfavor
necesitas definir un campo estado en la tabla que estas relacionando del mysql, luego la extraes con php y lo comparas con lo que ingresa el usuario asi limitas lo que pueda ver los usuarios algo asi
Por ejemplo:
$usuario=$_POST[‘txtUsu’];
$sql=»SELECT * FROM usuario WHERE login=’$usuario'»;
$res=mysqli_query($conexion,$sql);
$row = mysqli_fetch_array($res);
$tipo = $row[‘tipo’];
if ($tipo==’A’){
echo «Aqui defines lo que puede hacer el usuario»;
}
hola, yo soy nuevo tambien, tengo una duda, esas lineas de codigo en las que se pregunta por las sesiones van en un archivo diferente?.
agradezco tu ayuda.
claro si quieres puedes crear 3 archivos separados 1 que sera el login.php 2 el manejadorsesiones quien te hace la verificacion de los datos en cada tabla dentro de mysql y 3 cierre de sesion este ultimo lo debes llamar desde un boton para que destruya la sesion y protejer los dato antes de salir de donde deseas implementar.
claro si quieres puedes crear 3 archivos separados 1 que sera el login.php 2 el manejadorsesiones quien te hace la verificacion de los datos en cada tabla dentro de mysql y 3 cierre de sesion este ultimo lo debes llamar desde un boton para que destruya la sesion y protejer los dato antes de salir de donde deseas implementar.
Hola amigo, me sale error, ¿podrías ayudarme?. Te lo agradecería mucho.
Este error:
Fatal error: Uncaught Error: Call to undefined function mysql_query() in C:\xampp\htdocs\organicasa\validologin.php:9 Stack trace: #0 {main} thrown in
Hola, me gustaría saber cómo se podría hacer esto mismo pero para el modo registro, este es el modo login, pero y el modo registro cómo lo harías para elegir el rol. Estaba pensando en un simple formulario, pero que no ponga el rol a elegir ya que eso sería un peligro en el sistema, pero pienso que a la hora de registrarse un usuario, me viene a la cabeza la acción de notificación de nuevo usuario registrado al administrador y que luego éste le asigne el rol de alumno o profesor dependiendo de qué usuario se ha registrado. Esto es lo que pienso y pregunto, ¿Cómo haría este procedimiento? Gracias
Hola buen dia … tengo el siguiente codigo donde ingreso con un usuario y contraseña, pero quiero asignar roles a cada usuario, que dependiendo el usuario me redireccione a distintas paginas al entrar, en el codigo no puedo encontrar mi error .. si me pueden ayudar s elos agradecesia mucho
public function loginUser($datos){
$c=new conectar();
$conexion=$c->conexion();
$password=sha1($datos[1]);
$_SESSION[‘usuario’]=$datos[0];
$_SESSION[‘iduser’]=self::traeID($datos);
$_SESSION[‘id_usuario’]=$id_usuario;
$sql=»SELECT *
from usuarios
where email=’$datos[0]’
and password=’$password'»;
$resultado=mysqli_query($conexion,$sql);
$filas=mysqli_fetch_array($resultado);
if($filas[‘id_usuario’]==1){ //administrador
header(«location: ../vistas/inicio.php»);
}else
if($filas[‘id_usuario’]==2){ //cliente
header(«location: ../../vistas/categorias.php»);
}
}
este es mi formulario, al momento de ingresar, necesito que me redireccione según el rol, pero se encuentra en una sola tabla, que es usuarios, ahi mismo le pido, el usuario y la clave
Nombre de Usuario
Contraseña
Ingresar
¿Olvido su contraseña?
la tabla es
usaurios
idUsuarios
docUsuario como el usuario que ingresara a la paltaforma segun el rol
clave con la clave que asigno
nombre
apellidos
etc etc
no tiene posibilidad de registrarse ya que es un usuario al que se le otorga clave y usuario segun su documento
como puedo implementar ahi??