Foros del Web » Programando para Internet » PHP »

Comprobar varios ISSET en una sola sentencia

Estas en el tema de Comprobar varios ISSET en una sola sentencia en el foro de PHP en Foros del Web. Lo que quiero es mostrar un contenido cuando no se encuentra en la página principal Código PHP: if ( (!isset( $_GET [ "op" ])) or (!isset( $_GET [ "option" ...
  #1 (permalink)  
Antiguo 20/11/2008, 14:05
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Comprobar varios ISSET en una sola sentencia

Lo que quiero es mostrar un contenido cuando no se encuentra en la página principal

Código PHP:
if ( (!isset($_GET["op"])) or (!isset($_GET["option"]))  ){
echo 
"Muestra contenido";
}else{echo 
"Estas en la página principal";}


// y Al hacer eso si que funciona
if ( (!isset($_GET["op"]))  ){
echo 
"Muestra contenido";
}else{echo 
"Estas en la página principal";} 
Pero por que no acepta 2 condiciones?
  #2 (permalink)  
Antiguo 20/11/2008, 14:13
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Comprobar varios ISSET en una sola sentencia

utiliza || en vez de or

http://es2.php.net/manual/en/languag...rs.logical.php
  #3 (permalink)  
Antiguo 20/11/2008, 14:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Comprobar varios ISSET en una sola sentencia

pienso que debes ser de otro modo... ya que es idéntico || a OR (pienso que es mas de análisis y lógica, que de sintaxis)

Código PHP:
if ( ! isset($foo) && ! isset($bar))
{
  
// OK (nada de nada)
}
elseif ( ! isset(
$candy))
{
 
// OK (nada de algo)
}
else
{
  
// OK (algo?)

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 20/11/2008, 14:30
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Comprobar varios ISSET en una sola sentencia

Realmente no es idéntico. No sé si en éste caso en concreto aplicará, pero hay pequeñas variaciones a la hora de interpretar una condición con esos dos operadores.

De todos modos, no entendí muy bien lo que pretendía..
  #5 (permalink)  
Antiguo 20/11/2008, 14:41
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Comprobar varios ISSET en una sola sentencia

Si Keysher, son diferentes, mismo el and y el &&, pero a la pregunta no aplica (a simple vista al menos no), hay un tema de lógica en sus condiciones...

Pero obviamente, si saber que quiere en base a que datos no podemos ayudarlo mucho.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 20/11/2008, 14:54
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Comprobar varios ISSET en una sola sentencia

La idea es poner un boton de votos sólo en la página principal.

Pero tengo modulos que se abren con get (index.php?op=opcion1) y tambien tengo otros con (index.php?opt=opcion1)
Y quiero mostrar el contenido solo en la página principal, osea estoy usando isset para ver si esta definido el get, si no está es por que el usuario se encuentra en la página principal y es ahi donde quiero mostar el contenido.
  #7 (permalink)  
Antiguo 20/11/2008, 15:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Comprobar varios ISSET en una sola sentencia

si quieres que compruebe que GET viene vacío... usa empty

Código PHP:
if (empty($_GET))
{
  
// OK (portada?)
}
else 
{
  
// ... ???

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 20/11/2008, 15:20
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Comprobar varios ISSET en una sola sentencia

if (!isset($_GET['op']) && !isset($_GET['op1']))

Yo creo que sería asi, no? Si no se especifica ninguno de los dos, entonces es la pagina principal.

PD. yo tenia entendido que || se diferenciaba de or en que or evalua las dos expresiones, y || solo evalua la segunda si la primera no se cumple. Igual con && y and
__________________
Sin Ideas
  #9 (permalink)  
Antiguo 20/11/2008, 18:33
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Comprobar varios ISSET en una sola sentencia

Cita:
Iniciado por oso96_2000 Ver Mensaje
PD. yo tenia entendido que || se diferenciaba de or en que or evalua las dos expresiones, y || solo evalua la segunda si la primera no se cumple. Igual con && y and
oso96_2000 , eso mismo hace (Si, sentite especial, son pocos las personas que lo saben) !, pueden hacer las pruebas haciendo asignaciones en vez de comparaciones en el segundo lugar, ejemplote:


Código php:
Ver original
  1. <?php
  2.  
  3. $var = 'NADA';
  4.  
  5. if( 1==2 && $var = 'Hola' ) {}
  6.  
  7. echo $var; #Dará un "NADA"
  8.  
  9.  
  10. $var = 'NADA';
  11.  
  12. if( 1==1 && $var = 'Hola' ) {}
  13.  
  14. echo $var; #Dará un "Hola"
  15.  
  16.  
  17. ?>
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 20/11/2008, 18:38
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Comprobar varios ISSET en una sola sentencia

Pues nada yo no quierobreak; aplicar una sola condicion, sino 3 a la vez, lo eh probado con isset, empty, &&, y no resulta.
&& por lo que tengo entendido comprueba estrictamente las 2 condiciones y || comprueba una o la otra.
  #11 (permalink)  
Antiguo 20/11/2008, 18:45
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Comprobar varios ISSET en una sola sentencia

Cita:
Iniciado por Alejo18 Ver Mensaje
Pues nada yo no quierobreak; aplicar una sola condicion, sino 3 a la vez, lo eh probado con isset, empty, &&, y no resulta.
¿Pero que 3 condiciones? Según entendí era solo que no estuviera ni op ni op1.

Cita:
Iniciado por Alejo18 Ver Mensaje
&& por lo que tengo entendido comprueba estrictamente las 2 condiciones y || comprueba una o la otra.
Con &&, si la primera condicion no se cumple ya no revisa la segunda (revisa el ejemplo de nicolaspar). Con ||, si la primera condicion se cumple, no revisa la segunda.
__________________
Sin Ideas
  #12 (permalink)  
Antiguo 20/11/2008, 18:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Comprobar varios ISSET en una sola sentencia

bien, he visto... igual, cierto ... || y OR no son iguales... pero && y AND parece que si...

Código PHP:
$foo null;
$bar 'candy';
$baz $bar;

$foo && $baz 'ooka';
echo 
"buzz: $baz<br />";

$foo AND $baz 'buzz';
echo 
"buzz: $baz<br />";


$baz $foo || $bar;
echo 
"buzz: $baz<br />";

$baz $foo OR $bar;
echo 
"buzz: $baz<br />";


/*
buzz: candy
buzz: candy
buzz: 1
buzz: 
*/ 
entonces, por lógica

Código PHP:
if (isset($_GET['foo']) OR isset($_GET['bar']) OR isset($_GET['candy']))
{
  
// alguna de las tres
}
else if (isset(
$_GET['baz']) OR isset($_GET['buzz']))
{
  
// etc, etc...

no entiendo, de verdad no te sale?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 20/11/2008, 18:54
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Comprobar varios ISSET en una sola sentencia

pateketrueke: la diferencia de && y AND es que usando && si la primera condicion no se cumple, ya no se revisa la segunda, lo cual es un incremento (minimo, supongo) de velocidad xD
__________________
Sin Ideas
  #14 (permalink)  
Antiguo 20/11/2008, 19:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Comprobar varios ISSET en una sola sentencia

cierto, ahora ya lo probé tal cual.. eso es cierto!

pero, entonces... ¿que forma es la recomendable??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 20/11/2008, 19:22
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Comprobar varios ISSET en una sola sentencia

Cita:
Iniciado por pateketrueke Ver Mensaje
cierto, ahora ya lo probé tal cual.. eso es cierto!

pero, entonces... ¿que forma es la recomendable??
Depende que necesites...yo en muy pocos casos uso and u or ya que comparan menos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #16 (permalink)  
Antiguo 20/11/2008, 19:37
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Comprobar varios ISSET en una sola sentencia

Bueno bueno...hay algo raro acá.

Este fundamento juro que no lo inventé, en su momento lo probé y era así (no sé si hay alteraciones en las versiones actuales, hablo del viejo PHP4, pero dudo que sea eso). En si, si cambiamos el && por and se comporta exactamente igual...:

Código php:
Ver original
  1. <?php
  2.  
  3. $var = 'NADA';
  4.  
  5. if( 1==2 and $var = 'Hola' ) {}
  6.  
  7. echo 'primer caso: ', $var ,'<br>'; #Dará un ""
  8.  
  9.  
  10. $var = 'NADA';
  11.  
  12. if( 1==1 and $var = 'Hola' ) {}
  13.  
  14. echo 'segundo caso: ', $var ,'<br>'; #Dará un ""
  15.  
  16. ?>

Es lo mismo que:


Código php:
Ver original
  1. <?php
  2.  
  3. $var = 'NADA';
  4.  
  5. if( 1==2 && $var = 'Hola' ) {}
  6.  
  7. echo 'primer caso: ', $var ,'<br>'; #Dará un ""
  8.  
  9.  
  10. $var = 'NADA';
  11.  
  12. if( 1==1 && $var = 'Hola' ) {}
  13.  
  14. echo 'segundo caso: ', $var ,'<br>'; #Dará un ""
  15.  
  16. ?>

WTF?


Mañana voy a investigar un poco más el tema, si alguien aporta algo bienvenido sea...realmente no recuerdo si este es un buen ejemplo.

Nota: Si se invierte el orden hace asignaciones "raras" a no ser que se separen las condiciones con un (), eso me dejo en "Orsai" mal!! :S


Y Alejo18, disculpas por el offtopic!
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #17 (permalink)  
Antiguo 20/11/2008, 20:07
 
Fecha de Ingreso: abril-2008
Mensajes: 122
Antigüedad: 16 años
Puntos: 1
Respuesta: Comprobar varios ISSET en una sola sentencia

Ya ahora me a funcionado con esto la condición del ! por delante de todos
Código PHP:
if (!(isset($_GET['op']) OR isset($_GET['opt']) OR isset($_GET['opt2'])))
{
echo 
"Página principal";

Antes lo hacia así
Código PHP:
if ((!isset($_GET['op']) OR (!isset($_GET['opt']) OR (!isset($_GET['opt2'])) 
Q cojones con lo del OR, siempre pienso que || es OR y && es AND
PD:Gracias a todos
  #18 (permalink)  
Antiguo 21/11/2008, 01:53
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Comprobar varios ISSET en una sola sentencia

Los operadores or y || no son completamente equivalentes. || tiene más prioridad que or, por lo que hay situaciones en las que no se comportan de igual forma.

Se ve más claro con asignaciones. El operador = tiene preferencia sobre or pero no sobre || por lo que:

Código php:
Ver original
  1. $prueba = FALSE || TRUE; // El valor de $prueba será: TRUE
  2. $prueba = FALSE or TRUE; // El valor de $prueba será: FALSE. Esto es porque se hace primero la asignación de $prueba = FALSE y después el or.
  3. $prueba = (FALSE or TRUE); // El valor de $prueba será: TRUE. Con los parentesis forzamos a realizar primero el or y después la asignación.

Orden de precedencia de operadores en PHP:
http://es.php.net/manual/es/language...ors.precedence

En esta sitación concreta entiendo que no debería influir mucho el operador que se utilice. No veo del todo la lógica de la condición, yo creo que sería con and, es decir, quieres que entren en la "página principal" si no existe NINGUNA de esas variables, ¿no?
  #19 (permalink)  
Antiguo 21/11/2008, 02:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Comprobar varios ISSET en una sola sentencia

Keysher, de verdad... que genial!!

ahora entiendo completamente... gracias por la aclaración
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #20 (permalink)  
Antiguo 21/11/2008, 06:45
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Comprobar varios ISSET en una sola sentencia

Cita:
Iniciado por Keysher Ver Mensaje
Los operadores or y || no son completamente equivalentes. || tiene más prioridad que or, por lo que hay situaciones en las que no se comportan de igual forma.

Se ve más claro con asignaciones. El operador = tiene preferencia sobre or pero no sobre || por lo que:

Código php:
Ver original
  1. $prueba = FALSE || TRUE; // El valor de $prueba será: TRUE
  2. $prueba = FALSE or TRUE; // El valor de $prueba será: FALSE. Esto es porque se hace primero la asignación de $prueba = FALSE y después el or.
  3. $prueba = (FALSE or TRUE); // El valor de $prueba será: TRUE. Con los parentesis forzamos a realizar primero el or y después la asignación.

Orden de precedencia de operadores en PHP:
http://es.php.net/manual/es/language...ors.precedence

En esta sitación concreta entiendo que no debería influir mucho el operador que se utilice. No veo del todo la lógica de la condición, yo creo que sería con and, es decir, quieres que entren en la "página principal" si no existe NINGUNA de esas variables, ¿no?

Perfecto!!, es eso mismo, un simple tema de prioridades!, otro ejemplo de esto con comparaciones sería:
Código php:
Ver original
  1. <?
  2. $var = 'NADA';
  3. if( $var = 'Hola' && 1==1 ){}
  4. echo $var ,'<br />'; #1, porque evalua primero 'Hola' && 1==1 lo que da true y lo asigna a $var, ya que && tiene prioridad sobre =
  5. $var = 'NADA';
  6. if( $var = 'Hola' and 1==1 ){}
  7. echo $var ,'<br />'; #Da hola, = tiene prioridad sobre and
  8. ?>


Acá tienen la tabla de prioridad: http://docs.php.net/manual/kr/langua...precedence.php

Gracias Keysher!
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #21 (permalink)  
Antiguo 21/11/2008, 09:16
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Comprobar varios ISSET en una sola sentencia

Wow, excelente! Es verdad, había olvidado la presedencia de operadores.. gracias Keysher! yo tambien estoy de acuerdo contigo en que la condición que necesita es and para saber cuando esta en su página principal.
__________________
Sin Ideas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:30.