Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Problema: Login por niveles con PHP y MySQL

ogdaghala

Bovino maduro
Desde
2 Feb 2008
Mensajes
408
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.
 
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>
 
gracias por responder, ya veo mas claramente las locuras que estaba haciendo, voy a ponerlo a prueba y comento :D saludos
 
:llorar: la verdad no se como agradecerte funciono de maravilla :D sigue asi :vientos:
 
Volver
Arriba