Problema: Login por niveles con PHP y MySQL

ogdaghala

Bovino maduro
#1
Saludos a la comunidad. Vengo a pedir porfavor su ayuda para este problemita que me trae loco, ya he visto varios tutoriales y no he podido ajustar ninguno a mi proyecto.

El asunto es que necesito un sistema de logueo a una pagina con tres niveles diferentes, cada uno redirigiendo a una carpeta diferente de el sitio. Los niveles son: invitado, administrador y master y cada usuario tiene un nivel del 1 al 3 respectivamente.

Les presento mi codigo el cual causa conflicto en el ciclo de los niveles y la autenticacion de usuarios.

index.php
PHP:
<!DOCTYPE html>
<html lang="es">
<head>
	<link rel="stylesheet" type="text.css" href="/css/onco.css">
    <script type="text/javascript" src="/js/JQuery.js"></script>
	<script type="text/javascript" src="/js/est.js"></script>
	<title>INDEX</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<title>INDEX</title>
</head>

<body>
	<div class="container">
  		<div class="header"><a href="#"><img src="images/ini.jpg" name="Insert_logo" width="800" height="200" id="Insert_logo" style="background: #C6D580;" /></a> 
    <!-- end .header --></div>
  <div class="content">
    <h1>BIENVENIDO</h1>
    <article>      
    <?php
session_start();
include_once "conexion.php";
 
function verificar_login($user,$password,$nivel,&$result) {
    $sql = "SELECT * FROM usuarios WHERE usuario = '$user' and password = '$password'";
    $rec = mysql_query($sql);
    $count = 0;

    while($row = mysql_fetch_object($rec))
    {
        $count++;
        $result = $row;
    }
 
    if($count == 1)
    {
        return 1;
    }
 
    else
    {
        return 0;
    }
}
 
 function verificar_nivel($nivel,&$result2) {
    $sql = "SELECT * FROM usuarios WHERE nivel = '$nivel'";
    $rec2 = mysql_query($sql);
    $count2 = 0;

while($row = mysql_fetch_object($rec2))
    {
        $count2++;
        $result2 = $row;
    }
 
    if($count2 == 1)
    {
        return 1;
    }
 
    else
    {
        return 0;
    }
}
	
if(!isset($_SESSION['userid']))
{
    if(isset($_POST['login']))
    {
        if(verificar_login($_POST['user'],$_POST['password'],$result) == 1) #,$_POST['nivel']
        {
            $_SESSION['userid'] = $result->idusuario;
                
				if(verificar_nivel($_POST['nivel'],$result2) == 3)
            {
            header("location:/master/portada.php");
            }
            else
                if(verificar_nivel($_POST['nivel'],$result2) == 2)
            {
            header("location:/admin/portada.php");
            }
            else
                if(verificar_nivel($_POST['nivel'],$result2) == 1)
            {
            header("location:/invitado/portada.php");
            }

        }
        else
        {
            echo '<div class="error">Su usuario es incorrecto, intente nuevamente.</div>';
        }
    }
?>
 

<form action="" method="post" class="login">
  <p>
    <label>USUARIO<br>
      <br>
    </label>
    <input name="user" type="text" >
    <label><br>
      <br />
      CONTRASENA<br>
      <br>
    </label>
    <input name="password" type="password">
  </p>

  <p>
    <input name="login" type="submit" value="INGRESAR">
  </p>
</form>
<?php
} else 
	{
    echo 'Su usuario ingreso correctamente.';
    echo '<a href="logout.php">Logout</a>';
	}
?>
	<p id="cont"><a href="contacto.php">CONTACTO</a></p>
	<p></p>
   	</article></p>
    <!-- end .content --></div>
  <div class="footer">
    <p>Este sitio es unicamente para fines de consulta....</p>
    <!-- end .footer --></div>
  <!-- end .container --></div>
</body>
</html>
Yo se que es un index muy sencillo y con detalles faltantes como el CSS entre otras cosas por eso les agradeceria que me instruyeran solo en el acceso por niveles, gracias de antemano, saludos.
 

gnm_kos

Bovino de la familia
#2
primer error que detecte fue que el session_start(); siempre debe ser abierto en la primera linea de código.

2. $_POST['login'] ¿? es incongruente aunque este vacio, no hay ningun text llamado login.

3. tu envias 3 parametros: verificar_login($_POST['user'],$_POST['password'],$result) == 1) y tu funcion recibe 4
verificar_login($user,$password,$nivel,&$result), revisa & ademas técnicamente $nivel y $result no tienen valor.

4. en esa funcion verificar_login haces un return 0 o 1 segun sea el caso, por lo tanto $result no regresa nada y $resulto siempre sera = "" por lo tanto no puedes hacer $result->idusuario, esto se usa dentro del mysql_fetch_object

5. en verificar_nivel($_POST['nivel'],$result2) por consiguiente no existe $_POST['nivel'] y cobn eso regresar al punto 2 de incongruencia, por lo tanto $_POST['nivel']="" y no envia ni retorna nada en tus return

En conclusion envias y retornas de las funciones valores que no existen, asi mismo usas variables que no tienen ningún valor.

Edito: En serio que esta algo confuso los códigos, solo hacen pensar el porque de usarlos, quizas tu sepas como, yo lo modifique un poco sin perder la esencia y quedo así funcionando bien aunque ese código podría simplificarse a la mitad quizás.

PHP:
<?php session_start();  ?>
<!DOCTYPE html> 
<html lang="es"> 
<head> 
    <link rel="stylesheet" type="text.css" href="/css/onco.css"> 
    <script type="text/javascript" src="/js/JQuery.js"></script> 
    <script type="text/javascript" src="/js/est.js"></script> 
    <title>INDEX</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<title>INDEX</title> 
</head> 

<body> 
    <div class="container"> 
          <div class="header"><a href="#"><img src="images/ini.jpg" name="Insert_logo" width="800" height="200" id="Insert_logo" style="background: #C6D580;" /></a>  
    <!-- end .header --></div> 
  <div class="content"> 
    <h1>BIENVENIDO</h1> 
    <article>       
    <?php 
include_once "conexion.php"; 
  
function verificar_login($user,$password) { 
    $sql = "SELECT * FROM usuarios WHERE usuario = '$user' and password = '$password'"; 
    $rec = mysql_query($sql); 
    $count = 0; 
    while($row = mysql_fetch_object($rec)){ 
        $count++; 
        $result[0] = $row->id_usuario;} 
    if($count == 1) { 
	$_SESSION['userid'] = $result[0];
	return 1; } 
    else { return 0;} 
} 
  
 function verificar_nivel($user,$password) { 
    $sql = "SELECT nivel FROM usuarios WHERE usuario = '$user' and password = '$password'"; 
    $rec2 = mysql_query($sql); 
    $count2 = 0; 

while($row = mysql_fetch_object($rec2)) 
    { 
        $count2++; 
        $result2[0] = $row->nivel; 
		echo $result2[0];
    } 
  
    if($count2 == 1) {	return $result2[0]; } 
    else 
    { 
        return 0; 
    } 
} 
     
if(!isset($_SESSION['userid'])) 
{ 
    if(isset($_POST['login'])) 
    { 
        if(verificar_login($_POST['user'],$_POST['password']) == 1) #,$_POST['nivel'] 
        { 
		   if(verificar_nivel($_POST['user'],$_POST['password']) == "3") 
            { 
			echo "<script>
			window.location='master/portada.php'
			</script>";
            //header("location: master/portada.php"); 
            } 
            else 
                if(verificar_nivel($_POST['user'],$_POST['password']) == "2") 
            { 
			echo "<script>
			window.location='admin/portada.php'
			</script>";
            //header("location: admin/portada.php"); 
            } 
            else 
                if(verificar_nivel($_POST['user'],$_POST['password']) == "1") 
            { 
			echo "<script>
			window.location='invitado/portada.php'
			</script>";
            //header("location: invitado/portada.php"); 
            } 

        } 
        else 
        { 
            echo '<div class="error">Su usuario es incorrecto, intente nuevamente.</div>'; 
        } 
    } 
?> 
  

<form action="" method="post" class="login"> 
  <p> 
    <label>USUARIO<br> 
      <br> 
    </label> 
    <input name="user" type="text" > 
    <label><br> 
      <br /> 
      CONTRASENA<br> 
      <br> 
    </label> 
    <input name="password" type="password"> 
  </p> 

  <p> 
    <input name="login" type="submit" value="INGRESAR"> 
  </p> 
</form> 
<?php 
} else  
    { 
    echo 'Su usuario ingreso correctamente.'; 
    echo '<a href="logout.php">Logout</a>'; 
    } 
?> 
    <p id="cont"><a href="contacto.php">CONTACTO</a></p> 
    <p></p> 
       </article></p> 
    <!-- end .content --></div> 
  <div class="footer"> 
    <p>Este sitio es unicamente para fines de consulta....</p> 
    <!-- end .footer --></div> 
  <!-- end .container --></div> 
</body> 
</html>
 
Arriba