Как скрывать элементы в специфических пользователях посредством сеансов в php?

в хороший день, я работаю с sessions в php и у меня есть два пользователя difententes в моем db, что мне хотелось бы осуществлять, состоит в том, чтобы в usuario2 от него скрылись элементы li (pagina1 и страница 2) мое меню, в то время как в пользователя 1 мог видеть все списки (pagina1 pagina2 pagina3).

   <nav>
        <ul>
            <li class="lista">
                <a href="pagina1.php">Registro</a>
            </li>
            <li>
                <a href="pagina2.php">Administrar</a>
            </li>
            <li>
                <a href="pagina3.php">Reportes</a>
            </li>
        </ul>
    </nav>

и мой код php просто сравнивает, если пользователи находятся в db, но у всех есть та же привилегия, как они могут видеть.

$statement = $conexion->prepare('SELECT * FROM usuarios WHERE user = :usuario AND pass = :password');
    $statement->execute(array(':usuario' => $usuario, ':password' => $password));
    $resultado = $statement->fetch();

    if ($resultado !== false) {
        $_SESSION['usuario'] = $usuario;
        header('Location: principal.php');
    }else{
        header('Location: index.php');

    }
5
задан 03.05.2016, 05:36
4 ответа

Если то, что ты хочешь, состоит в том, чтобы скрывать от пользователя некую часть кода в особенности, единственное, что ты должен делать, состоит в PHP в том, чтобы способствовать тому, чтобы этот код не был написан (ты не хочешь сделать это с языком сценариев JavaScript или CSS, потому что тогда пользователь мог бы хотеться ему в "видеть исходный код" и видел меню).

Имея в виду, что уже у тебя есть пользователь в переменной сеанса ($_SESSION['usuario']), тогда только ты нуждаешься в том, чтобы инициализировать сеанс в начале страницы и один if простой в части, которую ты хочешь скрыть:

<?php session_start(); ?>

...

<nav>
    <ul>
        <?php if ($_SESSION['usuario'] == "USUARIO_NO_ADMIN") { ?>
        <li class="lista">
            <a href="pagina1.php">Registro</a>
        </li>
        <li>
            <a href="pagina2.php">Administrar</a>
        </li>
        <?php } ?>
        <li>
            <a href="pagina3.php">Reportes</a>
        </li>
    </ul>
</nav>

Может быть, тебе было бы интересно использовать лучше поле / переменную, которое сохраняло бы список пользователя. Так, если он изменит список пользователей, которые могут видеть страницы, ты не будешь должен менять код твоей страницы.

1
ответ дан 24.11.2019, 14:30

Он не является очень различным, которого уже они поместили тебя, но в свое время работая с гостями, зарегистрированные и admins в упражнении класса, я сделал это таким. Будет более элегантный код, с меньшим количеством повторений и т.д., но оно функционировало. Я помещаю это тебе, если он подает тебя :)

<?php
session_start();


// Conectamos a la base de datos (conexión)

$conexion=mysql_connect("localhost","root","");
mysql_select_db("filmoteca",$conexion);

//Guardamos en la variable usuario la sesión que tenemos
//Para evitar los errores con la clave, guardamos en una variable de sesión la clave.

$usuario = $_SESSION ['usuario'];
$_SESSION['clave'] = sha1($_SESSION ['clave']);


//creamos una variable para saber si los usuarios están o no registrados
//y le asignamos false. esta variable la usaremos en un else y luego para validar.

$usuarioOK = FALSE;


//Si no se ha metido nada, hacemos un if. Este if se activará cuando los campos estén vacíos
//y como al estar vacíos son los datos del invitado, pues añadimos todo lo que pueden ver los invitados (y solo los invitados). Si se ha detectado algún usuario en la base de datos
//este if no se ejecutará.

if ($usuario == "") {

        /*
         *  Código que ven los invitados (pones las consultas sql etc que necesites). He cortado parte del código de mi ejercicio.
         * 
         */
/*
     * 
     * 
     * 
     * Ahora añadimos el "menú" con los enlaces, puesto que lo anterior ya está puesto y visualizado.
     * 
     * 
     * 
     * 
     */

    print"<br><br>";
    print "<a href='listado.php'><font color='blue'>Ir al listado de opiniones</font></a><br><br>";
    print "<a href='index.php'><font color='blue'>Cambiar de Usuario</font></a>";


    /*
     * 
     *  AHORA SI QUE VISUALIZAMOS LA SESIÓN.
     * 
     */


    print "<hr>Bienvenido: <b>" . $_SESSION['usuario'] . "</b> - Tipo de usuario: <b>" . $_SESSION['tipo'] . "</b>";

//Aqui termina el IF de los invitados. En el ELSE ponemos 
// $usuarioOK == TRUE para indicarle al programa que si no es invitado
//el usuario está bien.

} else {

//si no es invitado, cambiamos el valor a TRUE.
$usuarioOK = TRUE;

}// ***********************************************************************

//Una vez el usuario es TRUE (porque le hemos cambiado el valor en el ELSE anterior para indicar
//que hay usuarios) hacemos un if que valide los usuarios. 

if ($usuarioOK) {

/*
 * declaramos dos variables, una llamada $logeado a la que asignamos false y otra
 * llamada tipo y que asignamos el valor de "invitado". Tipo la usaremos para guardar
 * el tipo de usuario que es y logeado para saber si está o no conectado.
 * 
 * 
 */
$logeado = false;
$tipo = 'invitado';


//iniciamos la conexión a la base de datos
$conexion = @mysql_connect ( "localhost", "root", "" );

@mysql_select_db ( "filmoteca", $conexion ) or die ( "<p>No se ha podido establecer la conexión con la base de datos.</p>" );

/*
 * 
 * 
 * Realizamos la consulta para validar los usuarios. Como debemos comprobar si han
 * introducido bien la clave y el usuario, introducimos las dos en la consulta.
 * Después, guardamos en una variable llamada $res (de resultado)
 * todo el resultado de la consulta anterior.
 * 
 * 
 * 
 */
$sql = "select * from usuarios where usuario='" . $usuario . "' AND clave = '" . $_SESSION['clave'] . "';";
$res = mysql_query ( $sql, $conexion );


//realizamos un while que busque los usuarios en la base de datos, utilizando
//la variable de resultado ($res) que hemos creado antes y que también lleva la conexión
//por lo que si antes hicimos bien la conexión, no dará error.

while ( $row = mysql_fetch_array ( $res ) ) {
    // Si entra el el while() es que ha habido resultados por lo tanto es que los datos son correctos
    // Tambien en este while aprobechamos a coger el tipo de usuario, si no se va a quedar con invitado
    $tipo = $row['tipo'];
    $logeado = true;
}

// si esta bien logeado (logeado=true) cambiamos las variables de inicio de sesión
//la sesion de usuario le asignamos lo que tenga la variable usuario, que a su vez
//guarda el nombre del usuario recogido en el formulario.
//A la sesión tipo le asignamos el valor de la variable tipo que definimos antes en el while
//y que contiene el tipo del usuario.
if ($logeado) { 
    $_SESSION['usuario'] = $usuario;
    $_SESSION['tipo'] = $tipo;
} 


/*
 * 
 * Una vez tenemos esos datos, vamos a crear las secciones que puede ver uno y otro no.
 * 
 * 
 * 
 * Una vez hecho esto, introducimos el código que verán SOLO LOS REGISTRADOS.
 *  Tipo si no recuerdo mal era una opción de la base de datos en la que se especificaba si era admin o solo estaba registrado el usuario.
 */
if($_SESSION['tipo']=='registrado'){

    /*
         *  Código adicional que ven los registrados y no los visitantes (ten en cuenta que los visitantes verán todo el código que no tengas "cerrado" por sesiones).
         * 
         */
//Hemos terminado aquí lo de los registrados. Sin embargo, como no tenemos
    //mas usuarios registrados que administrador y registrado, y como YA HEMOS HECHO
    //LOS INVITADOS Y LOS REGISTRADOS, hacemos un else para los administradores,
    //puesto que no hay mas. Si hubiese mas, haríamos un 
    //else if($_SESSION['tipo']=='administrador') y así hasta terminar con todos
    //metiendo dentro de cada uno lo que verían.
} else { 

/*
         *
         *  código que solo verán los admins
         * 
         */
}
//para terminar, visualizamos el usuario y el tipo. esto lo hacemos fuera de los IF
//puesto que es idéntico para todos.
print "<hr>Bienvenido: <b>" . $_SESSION['usuario'] . "</b> - Tipo de usuario: <b>" . $_SESSION['tipo'] . "</b>";

}

?>
1
ответ дан 24.11.2019, 14:30

Хороший terde пытается с этим, я надеюсь помочь тебе.

<nav>
    <ul>
        <?php         
            if($_SESSION['usuario'] == 'usuario1'){
              echo '<li class="lista">
                        <a href="pagina1.php">Registro</a>
                    </li>
                    <li>
                        <a href="pagina2.php">Administrar</a>
                    </li>';
            }         
         ?>
         <li>
             <a href="pagina3.php">Reportes</a>
         </li>
   </ul>
</nav>
0
ответ дан 24.11.2019, 14:30

Ты могло бы быть полезным иметь колонну в DB так называемом "admin" типа tinyint (1), который функционировал бы как флаг booleana, если его 1, - admin, если его 0, он это не.

$statement = $conexion->prepare('SELECT * FROM usuarios WHERE user = :usuario AND pass = :password');
    $statement->execute(array(':usuario' => $usuario, ':password' => $password));
    $resultado = $statement->fetch();

    if ($resultado['admin'] === 1) {
        $_SESSION['usuario'] = "admin";
    }else{
        $_SESSION['usuario'] = "user";
    }


<nav>
    <ul>
        <?php if ($_SESSION['usuario'] === "admin") { ?>
        <li class="lista">
            <a href="pagina1.php">Registro</a>
        </li>
        <li>
            <a href="pagina2.php">Administrar</a>
        </li>
        <?php } ?>
        <li>
            <a href="pagina3.php">Reportes</a>
        </li>
    </ul>
</nav>
0
ответ дан 24.11.2019, 14:30