Foros del Web » Programando para Internet » PHP »

Como puedo hacer esto?

Estas en el tema de Como puedo hacer esto? en el foro de PHP en Foros del Web. Miren este código: Código PHP: <?php                $query  =  "SElECT * FROM modulos WHERE activo<>0" ;                             $result  =  mysql_query ( $query ) or die( "No se ha podido ejecutar la consulta: <strong>" . $query . "</strong>. MySQL ha devuelto el siguiente error: " . mysql_error ()); ...
  #1 (permalink)  
Antiguo 02/05/2004, 17:14
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Como puedo hacer esto?

Miren este código:
Código PHP:
<?php
               $query 
"SElECT * FROM modulos WHERE activo<>0";
                           
$result mysql_query($query) or die("No se ha podido ejecutar la consulta: <strong>".$query."</strong>. MySQL ha devuelto el siguiente error: ".mysql_error());
                           if(!isset(
$_SESSION['username'])){
                            while(
$row=mysql_fetch_assoc($result)){
                             echo 
"<a href='".$row['direccion']."'><span class='info' title='".$row['alt']."'>".$row['titulo']."</span></a> | </strong>";
                            }
                           }else{
                            while(
$row=mysql_fetch_assoc($result)){
                             echo 
"<a href='".$row['direccion']."&user=".$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."'><span class='info' title='".$row['alt']."'>".$row['titulo']."</span></a> | </strong>";
                            }
                             echo 
"<span class='info' title='Actualizar mis datos de usuario'><a href='utils.php?accion=updatedate&user=".$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."'>Mi cuenta</a></span> ";
                           }
                           if(isset(
$_SESSION['username'])){
                            echo 
"<a href='logoutses.php'><img src='img/exit.gif' alt='Cerrar sesi&oacute;n' width='17' height='17' border='0' align='absmiddle'></a>";
                           }
            
?>
Mi tabla es esta:
idmodulo titulo activo
=================================
1 Indice 1
2 Pagina1 1
3 Pagina2 1
4 Pagina3 1
5 Pagina4 1
6 Pagina5 1
7 Pagina6 1
8 Pagina7 1
9 Pagina8 1
10 Pagina9 1
11 Pagina10 1
12 Pagina11 1
13 Pagina12 1

eso me muestra todos los modulos que tengan el campo activo=1 como es natural ahora si de esos modulos quier o mostrar estos solamente. Mas o menos así:
Cita:
Inicio | Pagina1| Pagina2| Pagina3 | Pagina4 | Pagina5 | Pagina6 | Pagina7 | Pagina8 | Pagina9 | Pagina10 | Pagina11 | Pagina12 |
pero lo que quiero es que segun el tipo de usuario autentificado me salgan las opciones disponibles. Por ejemplo si el usuario no ha iniciado sesion todavía le salga esto:
Cita:
Inicio | Pagina1| Pagina2| Pagina3 | Pagina4 | Pagina5 | Pagina7 | Pagina9 | Pagina10 | Pagina11 |
pero si la inicio y es de un tipo, digamos 4 que es el que menos permisos tiene en el sitio le salga esto otro:
Cita:
Inicio | Pagina1| Pagina4| Pagina5 | Pagina7 | Pagina9 | Pagina11 |
como lo hago?? Me hago entender que es lo que quiero hacer?

Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 02/05/2004 a las 17:48
  #2 (permalink)  
Antiguo 03/05/2004, 10:33
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Ayuda please

Ya he probado de "n" formas y no logro hacer lo que quiero.

Salu2
__________________
Ing. Reynier Pérez Mira
  #3 (permalink)  
Antiguo 03/05/2004, 10:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si no obtienes respuestas .. tal vez es que no se entienda lo que pretendes hacer.

A veces el código "fuera de contexto" y más cuando forma parte de alguna aplicación medianamente grande .. no suele ser suficiente para "centrar" el problema y la forma que pretendes implementarlo. Ten presente que usas muchas variables que no sabemos ni que llevan cuando toman valor .. usas base de datos que no sabemos la estructura .. etc (esto es aplicable a todas las pregunta que puedas hacer ..)

Así a "groso modo" "parece" (ya estamos haciendo hipotesis de lo que logramos entender o nos pareció lo que vemos) que en nose que campo ni como de tu BD guardas (o deberías guardar):

Cita:
segun el tipo de usuario autentificado
Y .. así bajo un "nivel" o tipo de usuario .. tendras que componer tu condicional .. pero tu tabla que guardas tus páginas tendrías que guardar el dato de que "tipo de usuario" (o nivel) puede acceder a ella para contrastar ambos datos: el del "nivel" de tu usuario .. y el del nivel de la página que estás componiendo tus links.

(lo que mas lia de tu pregunta (o por lo menos a mi) es que ya pones algo de código .. cuando lo que te hace falta o parece que es el problema es de "estructura" de tu "modelo de datos" para ver como controlar ese tema de "permisos/niveles de acceso" como para asociar ambos datos (el que tenga otorgado tu usuario y el que tenga otorgado esa página/sección).)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 03/05/2004, 11:27
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Es cierto

Cluster tienes toda la razón. No expliqué muy bien que es lo que quiero en realidad. Bueno para empezar te pongo parte de la estructuración de la tabla donde guardo los módulos. Más o menos es esto:
Código PHP:
  Tabla Módulos
 
=============================================
 
idmod  titulo                 direccion                           activo
 1      Indice                 index
.php?accion=entrar                1      
 2      Asignaturas            asignaturas
.php?accion=mostrar               1        
 3      Postgrados             postgrados
.php?accion=mostrar                    1
 4      Estrategias            estrategias
.php?accion=mostrar                    1    
 5      Claustro               claustro
.php?accion=mostrar                        1
 6      Libro de Visitas       lvisitas
.php?accion=mostrar                        1
 7      Sitios                 directorio
.php?accion=mostrar                     1
 8      Búsqueda               buscar
.php?accion=mostrar                          1
 9      Chat                   chat
.php?accion=mostrar                                0
 10     Forum                  forum
.php?accion=mostrar                                0
 11     Noticias               noticias
.php?accion=mostrar                        1
 12     Registro de Usuarios   registro
.php?accion=mostrar                        1
 13     Mapa del Sitio         msitio
.php?accion=mostrar                            0
 14     Correo                 correo
.php?accion=mostrar                            0
 15     Libros                 libros
.php?accion=mostrar                             0
 16     Administración         administrador
.php?accion=mostrar              1 
ahora esa es mi tabla modulos con el contenido y todo. Lo que hago en este código es poner en el top de mi pagina todos los vinculos disponibles en la tabla modulo es decir donde activo=1
Código PHP:
$query "SElECT * FROM modulos WHERE activo<>0";
$result mysql_query($query) or die("No se ha podido ejecutar la consulta: <strong>".$query."</strong>. MySQL ha devuelto el siguiente error: ".mysql_error());
 if(!isset(
$_SESSION['username'])){
  while(
$row=mysql_fetch_assoc($result)){
   echo 
"<a href='".$row['direccion']."'><span class='info' title='".$row['alt']."'>".$row['titulo']."</span></a> | </strong>";
  }
 }else{
  while(
$row=mysql_fetch_assoc($result)){
   echo 
"<a href='".$row['direccion']."&user=".$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."'><span class='info' title='".$row['alt']."'>".$row['titulo']."</span></a> | </strong>";
  }
   echo 
"<span class='info' title='Actualizar mis datos de usuario'><a href='utils.php?accion=updatedata&user=".$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."'>Mi cuenta</a></span> ";
 }
 if(isset(
$_SESSION['username'])){
  echo 
"<a href='logoutses.php'><img src='img/exit.gif' alt='Cerrar sesi&oacute;n' width='17' height='17' border='0' align='absmiddle'></a>";

todo bien hasta ahí ¿no? Ahora, supongo que si el usuario esta logeado en el sitio no debería salirme en el menú "Registro de Usuarios" porque ya ese está registrado y además logeado ¿!!?
Y eso es lo que quiero hacer, además si notan el vínculo de "Administración" es este "administrador.php?accion=mostrar" ahora si el usuario está logeado y pertenece al grupo de administradores debía cambiar el link de Administración de "administrador.php?accion=mostrar" a "indexadmin.php?accion=entrar&user=".$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."" porque ya el usuario ha sido identificado en el grupo de los administradores ¿o no?. Pues eso es lo que quiero hacer y no tengo ni idea de como hacerlo. A otra cosa, los niveles de permisos de usuarios en el sitio son los siguientes:
Código PHP:
 Niveles de Seguridad del Sistema de Administración del Sitio
    Nivel       Nombre                  Adicionar Editar  Eliminar Observar Acceso  Area
    0           Administrador Máximo         x      x        x         x      x     Nivel 1
    1           Administrador Medio          x      x                  x      x     Nivel 2
    2           Webmaster                    x                         x      x     Nivel 3
    3           Profesor                     x      x        x         x      x     Nivel 4
    4           Estudiante                                             x            Ninguna 
Salu2
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 03/05/2004 a las 11:54
  #5 (permalink)  
Antiguo 03/05/2004, 11:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. eso,

Te haría falta un campo más extra a tu BD .. un tal "nivel_acceso" o similar que se corresponda con otro "nivel_autorizado" para tu usuario .. así podrías hacer el "condicional" bajo la variable de sesión que guardes de ese usuario "nivel_autorizado" y el dato que extraeras de la consulta SQL de tu tabla "modulos".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 03/05/2004, 12:17
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Cluster ??

Cluster viste el mensaje anterior. A lo mejor mientras lo editaba tu estabas respondiendo. Mira y dime si entiendes lo que trato de hacer

Salu2
__________________
Ing. Reynier Pérez Mira
  #7 (permalink)  
Antiguo 03/05/2004, 12:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, .. lo leí recien.

Si entendí bien . .sigo opinando que el nivel de acceso debería estar por aplicación y comparar con el nivel del usuario. que supongo que tendras una tabla de usuarios tipo:

nombre -> nivel -> otros datos

Ahora .. que "a su vez" ese nivel defina otras acciones como las que tienes de "editar", "accionar", "eliminar" .. tendrías que desglosar esos items por separado como para poder hacer en tus aplicaciones a la hora de hacer una acción .. poder ver si está autorizado .. Es decir, si el "código de la acción" es:

1 -> accionar
2 -> editar
3 -> borrar
N -> cualquier cosa ..

tengo que hacer la consulta pertinente para obtener que es lo que se peude hacer o no .. El "nivel" del usuario por si sólo como dato no sirve para un proceso "automático" de otorgar permisos de "acciones" al usuario creado con ciertas propiedades. En tal caso "sabiendo" que tal "nivel" puede hacer tales acciones .. ahí tendrías que componer tus condicionales en la -aplicación-. (código)

-------

(Disculpa que me salga del tema ..pero .. ¿para que propagas por el URL variables de sesión que ya están en tu sesion? ..:

Código PHP:
administrador.php?accion=mostrar" ahora si el usuario está logeado y pertenece al grupo de administradores debía cambiar el link de Administración de "administrador.php?accion=mostrar" a "indexadmin.php?accion=entrar&user=".$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."" 
)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 03/05/2004, 12:59
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues ya eso lo he hecho

Por supuesto que esos niveles los tengo en BD. Por ejemplo cuando un usuario se registra en la web lo inserto a la BD con nivel 4, en este caso, estudiante, que es el que no tiene ningún privilegio a la hora de entrar al sistema de administración. De hecho en una parte del index.php está este pedazo de código:
Código PHP:
if((isset($_GET['type']))&&(($_GET['type']==0)||($_GET['type']==1)||($_GET['type']==2)||($_GET['type']==3))){
         echo 
"<table width='225' border='0' align='center'>
               <tr>
               <td><a href='indexadmin.php?accion=entrar&user="
.$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."'><img src='img/adminimg/adminenter.gif' alt='Sistema de Administraci&oacute;n del Sitio' width='40' height='40' border='0' align='absmiddle' class='hand'></a> <span class='menutop'><a href='indexadmin.php?accion=entrar&user=".$_SESSION['username']."&pass=".$_SESSION['userpass']."&type=".$_SESSION['usertype']."&sid=".$_SESSION['usersid']."'>Entrar al Sistema de Administraci&oacute;n</a> </span></td>
               </tr>
               </table>"
;
        } 
ya ahi compruebo el tipo de usuario que es y le doy acceso al sistema de administración. Lo de los permisos de acceso en el sistema de administración también lo tengo solucionado. Esto es un ejemplo de lo que hago para verificar si el usuario tiene o no permisos a acceder a esa parte del sitio:
Código PHP:
 if(($_GET['option']=="edit")&&(($_SESSION['usertype']==0)||($_SESSION['usertype']==1)||($_SESSION['usertype']==3))){
 
//acciones
 
}else{
 echo 
"El usuario actual no tiene permisos para realizar la acción solicitada";

lo que me preocupa es lo otro. Deja ver que creo que no me expliqué bien ahorita. Si el usuario no está logeado quiero que salgan solo algunas cosas de las que estan activas en los modulos. Por ejemplo:
Activos: Indice, Chat, Forum, Asignaturas, Administracion
Usuario no logeado: Indice, Asignaturas, Administracion
Usuario logeado: Indice, Chat, Forum, Asignaturas, Administracion
eso es lo que quiero lograr. Y lo otro es que si te diste cuenta las URL las tengo en la Base de Datos. Por defecto Administracion tiene por URL: administrador.php?accion=mostrar que es la pagina que me permite logearme desde fuera (si antes no he hecho login por otra via, pues en la pagina principal index.php tengo un form de acceso para usuarios registrados) entonces no tendría sentido que si el usuario se logeo y es administrador el vinculo siga siendo el mismo, sino que cambie por : indexadmin.php?blblblblblbl y si el usuario se logeo y no es administrador simplemente deshabilitar ese modulo temporalmente, hasta que el usuario haga logout. Lo de la sesión propagada no lo entendí muy bien.

Salu2
__________________
Ing. Reynier Pérez Mira
  #9 (permalink)  
Antiguo 03/05/2004, 15:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. que problema tienes entonces?

Si ya has hecho validaciones con esos datos? haz más validaciones por esos datos de usuario activo o logeado o no .. La verdad . no sé donde tienes el problema exactamente o que no sabes hacer .. ¿no sabes hacer X consulta a tu BD (SQL)? .. no sabes como devesa hacer el condicional if()? .. o que exactamente?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 03/05/2004, 15:18
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Mira ...

Cluster no se si me he explicado bien. Supón que mi web sea PHP Nuke. Sabes que ese sistema tiene acceso restringido a algunas secciones del sitio. Ahora yo tengo dentro de mi sitio lo que hago es con el código que puse arriba sacar todos los modulos que tienen activo con valor 1. Ahora de esos que ya he sacado de mi BD quiero mostrar uno digamos los 3 primeros a los usuarios que no han iniciado sesión en el sitio, por lo contrario si el usuario inicio sesion entonces muestro esos 3 que mostre anteriormente mas otros 4 o 5 mas. Ahora me entendes?

Salu2
__________________
Ing. Reynier Pérez Mira
  #11 (permalink)  
Antiguo 03/05/2004, 16:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Resumiendo ..

Donde guardas el dato de que registros (modulos) debes mostrar a los usuarios "autentificados" y los que no lo són? .. o sólo quieres hacerlo por Nº de resultados de tu consulta: 3 primeros para los "autenticados" y los N restantes para todo usuario autentificado?

(Si no lo usas ya me perdí con tanto código y tablas ..) deberías usar un campo extra en tu BD en la tabla que gestiona los módulos tipo flag de "ver" para guardar ahí un "1-> será visto por usuario autentificado y 0 -> cualquier usuario podrá verlo".

Para hacer tu if() bajo ese dato:
if ($row['ver']==1){
// haces el link
}

Y si sólo quieres que sea por Nº de registros (no me parece nada "versatil" el sistema si lo haces así .. ..) usa una variabel contador en tu bucle while() y compara por si es <= a ese $contador

$contador=0;
while(....){
if ($contador <= 5){
// echo del link ...
}
$contador++;
}

Un saludo,

PD: ¿Será eso?
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 03/05/2004, 16:20
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Ahora sip

Cluster hermano !! No se que sería de este sin tu ayuda. Ya entendí perfectamente lo que me explicas. Lo voy a hacer con la BD que es más fácil y mejor (creo jeje :) ). Ahora la duda que me queda es la de cambiar la direccion del enlace. Por ejemplo por defecto el enlace Administración tiene esta dirección:
Cita:
administrador.php?accion=mostrar
ahora lo que quiero hacer es que si el usuario logeado puede acceder al sistema de administración, es decir, es de tipo 0,1,2 o 3 entonces el vinculo me cambiaria por este:
Cita:
indexadmin.php?accion=entrar&asdfdfsdf
y si el usuario que entro es de tipo 4 entonces no mostrar ese vinculo aunque este activo y pueda ser visualizado por los usuarios logeados en el sitio. Ya teniendo en cuenta esta ultima parte que me explicas en el POST.

Salu2
__________________
Ing. Reynier Pérez Mira
  #13 (permalink)  
Antiguo 03/05/2004, 16:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. compón tu enlace .. si piensas que todo eso no es más que una "cadena" (string) hasta que lo procese tu navegador y lo interprete como "link" . .podrias hacer algo tipo

Código PHP:
if ($row['ver']==1){
$resto_link="&nose=$bla";
}

echo 
"<a href=\"indexadmin.php?accion=entrar$resto_link\">nose</a>"
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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




La zona horaria es GMT -6. Ahora son las 17:48.