Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Login con niveles de usuarios con php y mysql

Estas en el tema de Login con niveles de usuarios con php y mysql en el foro de PHP en Foros del Web. Hola a todos,Recurro a ustedes porque son los MEJORES, como dice el Titulo, Estoy haciendo un Sistema Login con Niveles de Usuarios para mi proyecto ...
  #1 (permalink)  
Antiguo 04/03/2015, 20:49
Avatar de tercerared  
Fecha de Ingreso: marzo-2015
Mensajes: 8
Antigüedad: 2 años, 9 meses
Puntos: 1
Login con niveles de usuarios con php y mysql

Hola a todos,Recurro a ustedes porque son los MEJORES, como dice el Titulo, Estoy haciendo un Sistema Login con Niveles de Usuarios para mi proyecto (COLEGIO) y me quede estancado. Los archivos que estoy utilizando son los siguientes:
Base de datos:
Código PHP:
Ver original
  1. -- Estructura de tabla para la tabla `login_admin`
  2. --
  3.  
  4. CREATE TABLE IF NOT EXISTS `login_admin` (
  5.   `id` int(11) NOT NULL AUTO_INCREMENT,
  6.   `nick` varchar(20) NOT NULL,
  7.   `apellido` varchar(30) NOT NULL,
  8.   `nombre` varchar(50) NOT NULL,
  9.   `contrasenia` varchar(200) NOT NULL,
  10.   `cargo` varchar(20) NOT NULL,
  11.   `ci` varchar(15) NOT NULL,
  12.   `rda` varchar(20) NOT NULL,
  13.   PRIMARY KEY (`id`)
  14. ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
  15.  
  16. --
  17. -- Volcado de datos para la tabla `login_admin`
  18. --
  19.  
  20. INSERT INTO `login_admin` (`id`, `nick`, `apellido`, `nombre`, `contrasenia`, `cargo`, `ci`, `rda`) VALUES
  21. (1, '1234567', 'Perez', 'Juan', 'casa', '4', '1234567', '010203'),
  22. (2, '12345', 'Gonzales', 'Mandachin', 'casas', '3', '12345', '54321'),
  23. (3, '123456', 'Wilson', 'Perez', 'casi', '2', '5063511', '6023563'),
  24. (4, '112233', 'Sanchez', 'Willian', 'caza', '4', '112233', '6050402');
conexion.php
Código PHP:
Ver original
  1. <?php
  2. $link = new mysqli("localhost","root","root","login") or die("Error " . mysqli_error($link));
  3. ?>
login.php
Código PHP:
Ver original
  1. <?php
  2.     require_once("sesion.class.php");
  3.   include("config.php");
  4.  
  5.     $sesion = new sesion();
  6.    
  7.     if( isset($_POST["iniciar"]) )
  8.     {
  9.        
  10.         $usuario = $_POST["usuario"];
  11.         $password = $_POST["password"];
  12.     $cargo    = $_POST['cargo'];
  13.        
  14.         if(validarUsuario($usuario,$password,$cargo) == true){         
  15.            
  16.      
  17.       $sesion->set("usuario",$usuario);
  18.            
  19.       if ($cargo=='4') {
  20.         header("location: http://localhost/entrar/director.php");//index del director
  21.  
  22.       }
  23.       if ($cargo=='3') {//index de los docente
  24.         header("location: http://localhost/entrar/docente.php");
  25.  
  26.       }
  27.       if ($cargo=='2') {//index de estudiantes
  28.         header("location: http://localhost/entrar/estudiante.php");
  29.  
  30.       }
  31.            
  32.         }
  33.         else
  34.         {
  35.             echo "<div class='row-fluid'>"."<div class='col-md-4 col-md-offset-4'>";
  36.       echo "<p class='error'>"."Estimado Usuario "."<br>"."<stron>"."Verifica tu nombre de usuario, contrase&ntilde;a y el Cargo"."</strong>"."</p>";
  37.       echo "</div>"."</div";
  38.         }
  39.     }
  40.    
  41.     function validarUsuario($usuario, $password, $cargo)
  42.     {
  43.         $conexion = new mysqli("localhost","root","root","login");
  44.         $consulta = "SELECT contrasenia FROM login_admin WHERE nick = '$usuario' AND cargo='$cargo';";
  45.        
  46.         $result = $conexion->query($consulta);
  47.        
  48.         if($result->num_rows > 0)
  49.         {
  50.             $fila = $result->fetch_assoc();
  51.             if( strcmp($password,$fila["contrasenia"]) == 0 )
  52.                 return true;                       
  53.             else                   
  54.                 return false;
  55.         }
  56.         else
  57.                 return false;
  58.     }
  59.  
  60. ?>
  61. <!DOCTYPE html>
  62. <html lang="es">
  63.   <head>
  64.     <meta charset="utf-8">
  65.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  66.     <meta name="viewport" content="width=device-width, initial-scale=1">
  67.     <title>::PANEL ADMINISTRATIVO::</title>
  68.  
  69.     <!-- Bootstrap -->
  70.     <link href="css/bootstrap.css" rel="stylesheet">
  71.     <link href="css/bootstrap-theme.css" rel="stylesheet">
  72.  <!-- Bootstrap -->
  73.   </head>
  74.   <body>
  75.  
  76.  
  77.     </tr>
  78.   </tbody>
  79. </table>
  80. <div class="row-fluid">
  81.     <div class="col-md-4 col-md-offset-4">
  82.     <table class="table table-striped table-bordered table-condensed table-hover">
  83.  
  84.   <thead>
  85.     <tr>
  86.       <th colspan="2" class="ingreso"><H2>INGRESO SOLO ADMINISTRADORES</H2></th>
  87.     </tr>
  88.   </thead>
  89.     <tbody>
  90.       <form name="frmLogin" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
  91.             <div class="form-group">
  92.            
  93.                 <tr>
  94.                   <td><label for="exampleInputEmail1">C&oacute;digo de Usuario:</label></td>
  95.                    <td>   <input type="text" class="form-control" id="exampleInputEmail1" name="usuario" placeholder="Ej. 5232120"/ autofocus></td>
  96.                 </tr>
  97.             </div>
  98.                <div class="form-group">
  99.                <tr>
  100.                      <td> <label for="exampleInputPassword1">Contrase&ntilde;a:</label></td>
  101.                       <td><input type="password" class="form-control" id="exampleInputPassword1" name="password"/></td>
  102.               </tr>
  103.               <tr>
  104.                      <td> <label for="exampleInputPassword1">Cargo:</label></td>
  105.                       <td><select name="cargo" class="form-control">
  106.                         <option value="">Seleccionar</option>
  107.                         <option value="4">Director</option>
  108.                         <option value="3">Docente</option>
  109.                         <option value="2">Estudiante</option>                      
  110.                       </td>
  111.               </tr>
  112.              </div>
  113.              <tr>
  114.              <td><a href="http://localhost/colegio/index.php"><button class="btn btn-success btn-lg"type="button">REGRESAR</button></a></td>
  115.               <td ><input type="submit" class="btn btn-primary btn-lg"name ="iniciar" value="INGRESAR"/> </td>
  116.               </tr>
  117.         </form>
  118.       </tbody>   
  119.       </div>
  120. </div>
  121.     <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
  122.     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  123.     <!-- Include all compiled plugins (below), or include individual files as needed -->
  124.     <script src="js/bootstrap.min.js"></script>
  125.  
  126.   </body>
  127. </html>
Este Archivo login.php reconoce los niveles de usuario lo hace todo bien, pero lo que me falta es que cuando redireccione a los usuarios( con diferentes privilegios)
a las paginas, director.php , docente.php , estudiante.php, no sea visible para los demas. Me Explico.

Juan Perez es director y se logea a director.php y juanita Perez es Docente y se logea a docente.php, pero juanita con solo cambiar la URL puede ingresar a la pagina director.php etc.
Es ahi donde no se que mas hacerle para dichas paginas, pense ponerle (IF) pero no me ilumino, bueno de antemano GRACIAS


sesion_class.php
Código PHP:
Ver original
  1. ?>
  2.     <?php
  3.     class session_class{
  4.         function __construct(){
  5.             session_start();
  6.         }
  7.         public function set($nombre, $valor){
  8.             $_SESSION[$nombre] = $valor;
  9.         }
  10.         public function get($nombre){
  11.             if (isset ($_SESSION[$nombre])) {
  12.                 return $_SESSION[$nombre];
  13.             }else{
  14.                 return "No existe la variable";
  15.             }
  16.         }
  17.         public function borrar_variable($nombre){
  18.             unset ($_SESSION[$nombre]);
  19.         }
  20.         public function borrar_variables_sesion(){
  21.             $_SESSION = array();
  22.         }
  23.         public function borrarsesion(){
  24.             borrar_variables_sesion();
  25.             session_destroy();
  26.         }
  27.     }
  28. ?>
cerrarsesion.php
Código PHP:
Ver original
  1. <?php
  2.     require_once("sesion.class.php");
  3.    
  4.     $sesion = new sesion();
  5.     $usuario = $sesion->get("usuario");
  6.     if( $usuario == false )
  7.     {  
  8.         header("Location: login.php");
  9.     }
  10.     else
  11.     {
  12.         $usuario = $sesion->get("usuario");
  13.         $sesion->borrarsesion();   
  14.         header("location: login.php");
  15.     }
  16. ?>
y los archivos que faltan estan en BLANCO:
director.php , docente.php , estudiante.php
  #2 (permalink)  
Antiguo 04/03/2015, 21:59
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 9 años, 8 meses
Puntos: 2526
Respuesta: Login con niveles de usuarios con php y mysql

Cita:
Recurro a ustedes porque son los MEJORES
Por favor, evita ser condescendiente, estamos en un foro técnico muy serio y alabar a nadie ayuda ni tampoco hará que te ayuden más rápido.

Ahora, volviendo al tema.

¿Podrías explicar exactamente a qué te refieres con esto?
Cita:
no sea visible para los demas
¿Visible?

¿En qué sentido?

Es decir, es una URL, es visible.

Además representa al script de destino.

¿Por qué habría que hacer invisible algo así?

No se entiende a que te refieres con esa parte en términos técnicos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/03/2015, 23:10
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 14 años, 7 meses
Puntos: 23
Respuesta: Login con niveles de usuarios con php y mysql

Buenas...

por lo que entiendo quieres que cada quien que se haya logueado no sea accesible a otro con solo poner directo el nombre del archivo director.php docente.php o estudiante.php
¿es correcto?

Si ese es el caso lo unico que tienes que hacer es que en los archivos correspondientes poner la limitacion que si no tienen el nivel correspondiente los saca....

Código PHP:
if ($cargo=='4') {
    
// Visualizas el contenido

}else{    

header("location: http://localhost/entrar/index.php");//index del director
 
      

o le das un mensaje o no se... lo que se te ocurra... el punto es que al limitar en cada archivo el nivel de acceso controlas que no se cuele alquien no deseado...

Saludos!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #4 (permalink)  
Antiguo 05/03/2015, 08:30
Avatar de tercerared  
Fecha de Ingreso: marzo-2015
Mensajes: 8
Antigüedad: 2 años, 9 meses
Puntos: 1
De acuerdo Respuesta: Login con niveles de usuarios con php y mysql

Cita:
Iniciado por pateketrueke Ver Mensaje
Por favor, evita ser condescendiente, estamos en un foro técnico muy serio y alabar a nadie ayuda ni tampoco hará que te ayuden más rápido.
No es mi intencion molestar a nadie en el foro.Siento recurrir a ustedes con este problemilla talvez no fui muy claro . (pateketrueke).

HalconVigia: Gracias por tu pronta respuesta. el siguiente codigo que pusiste
Código PHP:
Ver original
  1. if ($cargo=='4') {
  2.     // Visualizas el contenido
  3.  
  4. }else{    
  5.  
  6. header("location: http://localhost/entrar/index.php");//index del director
  7.  
  8.       }
Lo implemente en la pagina directores.php de la siguiente forma:
Código PHP:
Ver original
  1. <?php
  2. if ($cargo=='4') {
  3.     // Visualizas el contenido
  4. include("config.php");
  5. echo "Directores ";
  6. echo "<a href =".$url."login.php"."> REGRESAR </a>";
  7. }else{    
  8. header("location: http://localhost/entrar/login.php");//index del directo
  9.  }  
  10.  
  11. ?>
Pero no me funciona, el problema que tiene es que me Redirecciona a login.php, estube pensando que talvez le falta session star? no se la verdad. de antemano gracias.
  #5 (permalink)  
Antiguo 05/03/2015, 09:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 9 años, 8 meses
Puntos: 2526
Respuesta: Login con niveles de usuarios con php y mysql

Cita:
Iniciado por tercerared Ver Mensaje
Pero no me funciona, el problema que tiene es que me Redirecciona a login.php, estube pensando que talvez le falta session star? no se la verdad. de antemano gracias.
La pregunta sería ¿dónde has definido la variable $cargo o de dónde crees que viene?

Porque las variables no se crear por arte de magia, y si la variable es de sesión entonces es requerido usar session_start() ¿no crees?

Por favor, consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 05/03/2015, 15:01
Avatar de tercerared  
Fecha de Ingreso: marzo-2015
Mensajes: 8
Antigüedad: 2 años, 9 meses
Puntos: 1
De acuerdo Respuesta: Login con niveles de usuarios con php y mysql

Bueno luego de Revisar el manual y Recontra revisar el codigo logre solucionar este sistema de login con niveles: lo pongo a continuacion por si a alguien le sirve:
lo primero que hice fue modifcar el archivo login.php
Código PHP:
Ver original
  1. $sesion->set("usuario",$usuario); // en esta parte
Aumente esta otra variable de cargo
Código PHP:
Ver original
  1. $sesion->set("cargo",$cargo);
y en las paginas director.php , docente.php , estudiante.php , puse lo siguiente:
director.php
Código PHP:
Ver original
  1. <?php
  2. include("sesion.class.php");//incluimos el sesion_start que sta dentro de esta
  3. include("config.php");//inclui esta para lo del $url -No es necesario
  4. $sesion=new sesion();
  5.  
  6.  
  7. $cargo=$sesion->get("cargo"); //cargamos la variable cargo de login.php
  8. $usuario=$sesion->get("usuario");//Esto sirve para trabajar con el usuario en la pagina
  9. if ($cargo=='4') {  //y la condicional IF que es lo que le hace funcional al sistema
  10.   echo "Bienvenido Director";
  11. // aqui insertamos todo lo que queremos que aparesca en la WEB del DIRECTOR
  12. }else{
  13.   echo "No eres Director y No tienes Permiso para ver esta pagina ";
  14.   echo "<a href =".$url."login.php"."> REGRESAR </a>";
  15. }
  16. ?>
docente.php
Código PHP:
Ver original
  1. <?php
  2. include("sesion.class.php");
  3. include("config.php");
  4. $sesion=new sesion();
  5.  
  6. $cargo=$sesion->get("cargo");
  7. if ($cargo=='3') {//solo cambias el numero del cargo de docentes lo puse 3 en la BD
  8.   echo "Bienvenido Profesor";
  9. //Insertamos todo el contenido que queremos que apresca al logearnos en la web de DOCENTE
  10. }else{
  11.   echo "No eres Docente y No tienes Permiso para ver esta pagina ";
  12.   echo "<a href =".$url."login.php"."> REGRESAR </a>";
  13.  
  14. }
  15. ?>

Espero les sirva esta solucion saludos.
ahora solo hayque meterle seguridad al sistema MD5, Captha, etc.

Última edición por tercerared; 05/03/2015 a las 16:29
  #7 (permalink)  
Antiguo 21/11/2015, 16:30
 
Fecha de Ingreso: noviembre-2015
Ubicación: Villarrica del guaira (Temporal)
Mensajes: 2
Antigüedad: 2 años
Puntos: 0
Respuesta: Login con niveles de usuarios con php y mysql

Buenas,
Soy nuevo en esto y se me presenta el siguiente error cuando empieza a correr el codigo.

Fatal error: Class 'sesion' not found in /home/cuatrog/public_html/login.php on line 76

Lo tengo igual a lo que esta con la diferencia de las conexiones a la base de datos

Saludos!
  #8 (permalink)  
Antiguo 22/11/2015, 00:55
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 621
Antigüedad: 13 años, 10 meses
Puntos: 69
Respuesta: Login con niveles de usuarios con php y mysql

Si observas el código del usuario tercerared te darás cuenta que usa un archivo php llamado sesion.class.php tienes que buscar ese archivo (no sé si sea de dominio público o si tercerared lo creó) o usar las sesiones de forma tradicional, lee el manual.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #9 (permalink)  
Antiguo 22/11/2015, 14:09
 
Fecha de Ingreso: noviembre-2015
Ubicación: Villarrica del guaira (Temporal)
Mensajes: 2
Antigüedad: 2 años
Puntos: 0
Respuesta: Login con niveles de usuarios con php y mysql

Buenas,
Luego de ver lo que me indicas solucione el problema cambiando la sesion.class.php por lo siguiente:

Cita:
<?php

class sesion{

public function __construct(){ }

public function init(){
@session_start();
}

public function set($varname, $value){

$_SESSION[$varname] = $value;

}

public function destroy(){

session_unset();
session_destroy();

}

}

?>
Gracias, Chronos682!

Etiquetas: html, login, mysql, niveles, select, tabla, usuarios, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:00.