Login con diferentes niveles de usuarios

Me estoy atorando en este tema ya busque solución y todo pero no doy con alguna solución podrían ayudarme explico el código primero...

Tengo este validar.php donde me valida los datos ingresados y me tiene que dirigir si me logueo como admin a la página de administrador y si me logueo como usuario me tiene que direcionar a index2.php

¿

¿
<?php
session_start();
error_reporting(E_ALL ^ E_DEPRECATED);
    require("connect_db.php");
    $log = mysql_real_escape_string($_POST['usuario_nombre']);
    $cont = mysql_real_escape_string($_POST['usuario_clave']);
    $cont = md5($cont);
$sql=mysqli_query($mysqli,"SELECT * FROM usuarios WHERE usuario_nombre='$log' AND usuario_clave='$cont'");
    if($row=mysqli_fetch_assoc($sql)){
    $_SESSION['id']=$row['usuario_id']; 
    $_SESSION['nom']=$row['usuario_nombre']; 
    $ns=$row['estado']; 
            if($ns==1){ 
                header("admin.php");
            }else{
                header("index2.php"); 
                 }
            }else
                {
                echo"<script language='javascript'>alert('Error En el Usuario o Contraseña Intente de Nuevo'); </script>";
                header("index.php");
       }
?>

Pero el detalle es que al loguearme como administrador tanto como usuario me redirige a una página en blanco con el nombre validar.php.

Podrían ayudarme ya me ilie con este tema y no puedo resolverlo

Respuesta
1

Solo sustituye:

if($ns==1){
echo "admin";
header('Location: admin.php');
}else if($ns==2){
header('Location: index2.php');
}
else
{
echo"<script language='javascript'>alert('Error En el Usuario o Contraseña Intente de Nuevo'); </script>";
header("index.php");
}

Hola jaaaspk Gracias por tu respuesta.

¿Lo puse así tal cual me dices y no me direcciona a ninguna lado con cualquier estado nada más como que actualiza la página y me quedo en el index.php que pudiera ser?

¿

<?php
session_start();
error_reporting(E_ALL ^ E_DEPRECATED);
    require("connect_db.php");
    $log = mysql_real_escape_string($_POST['usuario_nombre']);
    $cont = mysql_real_escape_string($_POST['usuario_clave']);
    $cont = md5($cont);
$sql=mysqli_query($mysqli,"SELECT * FROM usuarios WHERE usuario_nombre='$log' AND usuario_clave='$cont'");
    if($row=mysqli_fetch_assoc($sql)){
    $_SESSION['id']=$row['usuario_id']; 
    $_SESSION['nom']=$row['usuario_nombre']; 
    $ns=$row['estado']; 
        if($ns==1){
        echo "admin";
        header('Location: admin.php');
        }else if($ns==0){
        header('Location: index2.php');
        }
        else
        {
        echo"<script language='javascript'>alert('Error En el Usuario o Contraseña Intente de Nuevo'); </script>";
        header("index.php");
    }
}
?>

Investigue este otro código y al ingresar datos de admin como user me dirrecciona al erro.php aquí que puede estar pasando ya corrobore los de atos de BD vs lo ingresado y en el estado y son exactamente los mismos

<?php

session_start();
error_reporting(E_ALL ^ E_DEPRECATED);
require("connect_db.php");


$usuario_nombre = mysql_real_escape_string($_POST['usuario_nombre']);
$usuario_clave = mysql_real_escape_string($_POST['usuario_clave']);
$usuario_clave = md5($usuario_clave);


$query=mysqli_query($mysqli,"SELECT * FROM usuarios WHERE usuario_nombre='$usuario_nombre' AND usuario_clave='$usuario_clave'");
//$query = "SELECT * FROM usuarios WHERE usuario_nombre='$usuario_nombre' AND usuario_clave='$usuario_clave'";
$result = mysql_query($query);

//echo $result;

//$result = mysql_query($query,$conn);
//mysql_query($query) or die(mysql_error());

$row = mysql_fetch_array($result);
if ($row["estado"] == 'ADMIN') {
header("Location:admin.php");
}
elseif
($row["estado"] == 'CRP') {
header("Location:index2.php");
}
else
{header("Location:error.php");
}

?>

Justo después de la línea

$ns=$row['estado'];

comenta el bloque

 /*if($ns==1){
        echo "admin";
        header('Location: admin.php');
        }else if($ns==0){
        header('Location: index2.php');
        }
        else
        {
        echo"<script language='javascript'>alert('Error En el Usuario o Contraseña Intente de Nuevo'); </script>";
        header("index.php");
    }*/

y manda a continuación a imprimir las variables

 echo $row['usuario_id'].", ".$row['usuario_nombre'].", ".$row['estado'];

y me dices que tal... creo que la falla puede estar en la consulta.

Por cierto el echo "admin"; ¿Bajo el if se me fue por error de la prueba que hice lo puedes quitar y por último en la base de datos "estado" en que tipo de datos lo tienes declarado?

Hola jaaaspk

Que tal me comentas el tipo de datos en estado lo estuve cambiando a texto y con el echo que puse no me arrojaba el estado revisndo tienes razón el tipo de dato del estado...

if($ns==1) lo cambie a if($ns=='CRP')
Y
if($ns==0) lo cambie a if($ns=='ADMINISTRADOR')

Y ME FUNCIONO A LA PRIMERA...

Ahora otra consulta si no es mucha molestia amigo...

En esta parte....

if($ns=='CRP'){
        header('Location: index2.php');
        }else if($ns=='CRP'){
        header('Location: admin.php');
        }
        else
        {
        echo"<script language='javascript'>alert('Error En el Usuario o Contraseña Intente de Nuevo'); </script>";
        header("index.php");
    }

Como puedo hacerle para que si tengo varios usuarione ejemplo otros dos mas, me direccione a index3 y el otro a index4

Perdon ahora el detalle que sin ingreso un usuario que no existe tantocomo un usuario con contraseña mal me manda a una pagina en blanco no hace nada

asi es como quedo el codigo final

<?php
session_start();
error_reporting(E_ALL ^ E_DEPRECATED);
    require("connect_db.php");
    $log = mysql_real_escape_string($_POST['usuario_nombre']);
    $cont = mysql_real_escape_string($_POST['usuario_clave']);
    $cont = md5($cont);
$sql=mysqli_query($mysqli,"SELECT * FROM usuarios WHERE usuario_nombre='$log' AND usuario_clave='$cont'");
    if($row=mysqli_fetch_assoc($sql)){
    $_SESSION['id']=$row['usuario_id']; 
    $_SESSION['nom']=$row['usuario_nombre']; 
    $_SESSION['estado']=$row['estado'];
    $ns=$row['estado']; 
        if($ns=='ADMINISTRADOR')
        {
            header('Location: admin.php');
        }
        else if($ns=='CRPOLANCO')
        {
            header('Location: index2.php');
        }
        else
        {
            echo"<script language='javascript'>alert('Error En el Usuario o Contraseña Intente de Nuevo'); </script>";
            header("index.php");
        }
    }
?>

Una manera simple de hacer lo que me pides podría ser:

¿

¿
<?php
session_start();
error_reporting(E_ALL ^ E_DEPRECATED);
    require("connect_db.php");
    $log = mysql_real_escape_string($_POST['usuario_nombre']);
    $cont = mysql_real_escape_string($_POST['usuario_clave']);
    $cont = md5($cont);
$sql=mysqli_query($mysqli,"SELECT * FROM usuarios WHERE usuario_nombre='$log' AND usuario_clave='$cont'");
    if ($row=mysqli_fetch_assoc($sql)) {
        $_SESSION['id']=$row['usuario_id']; 
        $_SESSION['nom']=$row['usuario_nombre']; 
        $_SESSION['estado']=$row['estado'];
        $ns=$row['estado'];
        if($ns!='') { // si $ns (usuario y contraseña) existe lo que significa que seria distinto de 0 ó vacio 
            switch($ns) { // $ns toma el valor de $row['estado'] y a continuación el switch determina a que case pertenece y re-direcciona 
                case 'ADMINISTRADOR':
                    header('Location: admin.php');
                    break;
                case 'CRPOLANCO':
                    header('Location: index2.php');
                    break;
                case 'OTRO':
                    header('Location: index3.php');
                    break;
                case 'OTRO_MAS':
                    header('Location: index4.php');
                    break;
            }
        } else { // sino existe regresa a index.php
            echo"<script language='javascript'>alert('Error En el Usuario o Contraseña Intente de Nuevo'); </script>";
            header('Location: index.php');
        }
    }
?>

Más sin embargo quedaría mejor si validas el usuario y contraseña antes de enviar el formulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas