Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con operadores lógicos

Estas en el tema de Problema con operadores lógicos en el foro de PHP en Foros del Web. Buenas tardes, tengo el siguiente problema: Tengo una variable de sesión llamada nivel que contiene dos posibles valores traídos desde mysql, "admin" o "editor". Admin ...
  #1 (permalink)  
Antiguo 14/01/2014, 12:46
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 10 meses
Puntos: 2
Problema con operadores lógicos

Buenas tardes, tengo el siguiente problema:

Tengo una variable de sesión llamada nivel que contiene dos posibles valores traídos desde mysql, "admin" o "editor". Admin tiene permisos para editar o borrar un articulo mientras que "editor" solo puede editar el articulo. Tengo el siguiente código que a mi parecer debería funcionar:

Código PHP:
Ver original
  1. <?php
  2.  
  3.                     $nivel = $_SESSION['nivel'];
  4.  
  5.                     if (isset($nivel) === 'editor' or 'admin') {
  6.                         echo '<small><a href="editar.php?id='.$id.'">Editar</a></small>';
  7.                     };
  8.  
  9.                     if (isset($nivel) === 'admin') {
  10.                         echo ' | <small><a href="borrar.php?id='.$id.'">Borrar</a></small>';
  11.                     };
  12.                    
  13.                 ?>

He intentado cambiar el "or" por "||", "and", "&&", "xOr" y nada, no funciona. ¿Alguna solución?

Última edición por MeDxEc; 14/01/2014 a las 12:47 Razón: Hacerle highlight al texto
  #2 (permalink)  
Antiguo 14/01/2014, 12:54
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años
Puntos: 336
Respuesta: Problema con operadores lógicos

Debes inicializar las sesiones:
Código PHP:
Ver original 

Para consultar por la igualdad de 2 variables debes poner la pregunta completa
Código PHP:
Ver original
  1. if (isset($nivel) and $nivel === 'editor' or $nivel === 'admin') {

Lo mismo para la segunda condición:
Código PHP:
Ver original
  1. if (isset($nivel) and $nivel === 'admin')
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 14/01/2014, 12:55
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 7 meses
Puntos: 55
Respuesta: Problema con operadores lógicos

Hola

La funcion "isset()" te regresa un valor booleano true/false dependiendo si la variable esta definida y no es null.

Lo correcto deberia ser.

if ($nivel === 'editor' or $nivel==='admin') {
//codigo
}

Saludos
  #4 (permalink)  
Antiguo 14/01/2014, 12:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Problema con operadores lógicos

Ya lo has dicho tú "a tu parecer", pero tú no eres la ley, la ley es lógica, no tú.

Para empezar isset() devuelve un booleano, por lo tanto tu comparación está mal

Ahora, observa esto:
Código PHP:
Ver original
  1. // MAL
  2. if (isset($nivel) === 'editor' or 'admin')
  3.  
  4. // BIEN
  5. if ($nivel === 'editor' || $nivel === 'admin')

¿Notas las diferencias?

Cita:
He intentado cambiar el "or" por "||", "and", "&&", "xOr" y nada, no funciona. ¿Alguna solución?
Te sugiero leer un manual de programación general pues la precedencia de operadores es importante, además un manual de PHP básico para que tengas opiniones fundamentadas, no solo a tu parecer.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/01/2014, 12:57
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años
Puntos: 336
Respuesta: Problema con operadores lógicos

Tiene toda la razón Erick_MD9, corrijo la primera condicion tal como la planteó:
Código PHP:
Ver original
  1. if ($nivel === 'editor' or $nivel === 'admin') {

y aprovecho de cambiar la segunda:
Código PHP:
Ver original
  1. if ($nivel === 'admin')
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #6 (permalink)  
Antiguo 14/01/2014, 13:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.551
Antigüedad: 12 años, 4 meses
Puntos: 977
Respuesta: Problema con operadores lógicos

También puede ser así:

Código PHP:
Ver original
  1. if (isset($nivel)){
  2.     echo '<a href="editar.php?id='.$id.'"><small>Editar</small></a>';
  3.  
  4.     if ($nivel === 'admin')      
  5.         echo '<a href="borrar.php?id='.$id.'"><small>Borrar</small></a>';
  6. }
  7. else
  8.     echo "La variable no está definida";

Como solamente hay dos valores posibles, si fuera 'admin', también se mostraría el botón "borrar", sino, solamente el de "editar".

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 14/01/2014, 14:04
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: Problema con operadores lógicos

Cita:
Iniciado por pateketrueke Ver Mensaje
Ya lo has dicho tú "a tu parecer", pero tú no eres la ley, la ley es lógica, no tú.

Para empezar isset() devuelve un booleano, por lo tanto tu comparación está mal

Ahora, observa esto:
Código PHP:
Ver original
  1. // MAL
  2. if (isset($nivel) === 'editor' or 'admin')
  3.  
  4. // BIEN
  5. if ($nivel === 'editor' || $nivel === 'admin')

¿Notas las diferencias?
Sí, la ley es lógica y si lees con lógica lo que estaba haciendo le verás el sentido a lo que estoy preguntando ;)


Cita:
Te sugiero leer un manual de programación general pues la precedencia de operadores es importante, además un manual de PHP básico para que tengas opiniones fundamentadas, no solo a tu parecer.
Consulté el manual de PHP, por eso dije que había intentado con los operadores. Mira un ejemplo de lo que te planteo:

$variable = $_POST['variable'];

Esta puede contener dos valores, o "editor" o "admin"

LEELO CON LOGICA, (un poco de pseudocódigo)

If $variable = 'admin' then -> mostrar('usted tiene permisos de editor más los permisos especiales').

If $variable = 'editor' then -> mostrar('usted solo puede editar')

Ahora la comparación:

If $variable es = a 'admin' o 'editor' -> acción

¿Lo leíste con lógica? Bueno, entonces verás que no está mal. Mi error está en la mal utilización del isset, no en la lógica. Coloqué los demás operadores simplemente porque también los estaba usando en el momento, error de despiste.

----

Gracias a los demás que respondieron. El uso que le dí a isset() era para verificar que el campo tuviese contenido y en caso de que no pues mostrara error. Lo pensé pero no era la forma correcta de ejecutarlo así que pido disculpas por mi error de novato.
  #8 (permalink)  
Antiguo 14/01/2014, 14:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Problema con operadores lógicos

Así es, tu explicación es lógica y se entendió desde el inicio, pero no había lógica en tu forma de hacerlo, pues no respeta la sintaxis misma de los operadores.

Es decir, para que lo siguiente sea posible:
Cita:
If $variable es = a 'admin' o 'editor' -> acción
Debería ser así:
Código PHP:
Ver original
  1. if (in_array($variable, array('admin', 'editor')))

Eso es bastante claro a comparación de lo que hacías inicialmente, que sea lógico no significa que debas hacerlo así.

Es decir, tu "seudo lógica" está bien para explicar tu problema, pero no está bien para expresar con programación el mismo.

No es igual pensarlo que plasmarlo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 14/01/2014, 14:23
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 2 meses
Puntos: 11
Respuesta: Problema con operadores lógicos

Cita:
Ya lo has dicho tú "a tu parecer", pero tú no eres la ley, la ley es lógica, no tú.
Pateketrueke, eso creo que sobraba, recuerda, tu tuviste un inicio como todo el mundo.

El hombre ha cometido un error y por eso recurre al foro, es de "novato", pues si, pero recuerdo aquellos tiempos donde los arrays me daban dolor de cabeza y los foreach no los entendia bien.

No te lo tomes a mal, pero a la gente, ese tipo de respuestas puede sentarles mal, sobre todo si el no ha faltado a nadie.

Cita:
No es igual pensarlo que plasmarlo.
Ahi tienes toda la razón

Con respecto al problema, los compañeros te han respondido, y ahi tienes los errores. Saludos.
  #10 (permalink)  
Antiguo 14/01/2014, 14:25
 
Fecha de Ingreso: mayo-2013
Ubicación: Cúcuta
Mensajes: 98
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: Problema con operadores lógicos

@pateketrueke Por eso mismo recurrí al foro, mi lógica estaba bien pero necesitaba ayuda en la forma de llevarla acabo :v

Gracias a todos los que respondieron, ya está funcionando perfectamente :)

Etiquetas: logicos, operadores, permisos, sintaxis
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 10:41.