Foros del Web » Programando para Internet » PHP »

problemas isset/empty $_GET

Estas en el tema de problemas isset/empty $_GET en el foro de PHP en Foros del Web. Tengo un problema que no se resolver sin ofuscar mucho código cómo expresaría lo siguiente? if (!isset($_GET['accion']) or $_GET['accion']!='login') o lo que es lo mismo... ...
  #1 (permalink)  
Antiguo 23/05/2005, 01:58
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
problemas isset/empty $_GET

Tengo un problema que no se resolver sin ofuscar mucho código

cómo expresaría lo siguiente?

if (!isset($_GET['accion']) or $_GET['accion']!='login')

o lo que es lo mismo... si la variable accion no existe o no es = login hacer x

el problema es que si $_GET['accion'] no existe me da error de que la variable no existe pero qué alternativa me queda para expresar esto?

porque crear dos

if (!isset($_GET['accion'])
if ($_SESSION('autentificado'=false)
......
elseif ($_GET['accion']!=login)
if ($_SESSION('autentificado'=false))
......

repitiendo código? Puedo sustituirlo por una función para no repetir pero necesito hacer esto con varias variables... no hay otra manera?.

necesito un isset que me devuelva el valor si existe la variable... existe? o tendría que crear yo la función

Última edición por elmasvital; 23/05/2005 a las 02:12
  #2 (permalink)  
Antiguo 23/05/2005, 02:07
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
En primer lugar, ese código debería funcionarte porque está bien, y porque lo he probado yo mismo en casa
Eso mismo te funcionaría así:
Código PHP:
if ($_GET['accion']!='login'
ya que el caso de que no existe es igual que si es distinto de 'login'.
Mira a ver, suerte.
__________________
Mi página personal: Julián Urbano
  #3 (permalink)  
Antiguo 23/05/2005, 02:10
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 7 meses
Puntos: 102
pero si $_GET['accion'] no existe?? ... yo lo haría con un AND pués debe cumplir ambas condiciones...
http://www.php.net/manual/es/languag...rs.logical.php

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 23/05/2005, 02:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
Vereis si funcionar funciona... pero lanza un error. Incluso si pones AND u OR porque comprueba ambas. Todo lo que no sea concatenar if... lo que es engorroso y ofusca el codigo.

Necesito saber si es posible "predeclarar" las variables que puedan venirme por $_GET o $_POST igual que lohago con una sessión sin usar las Register_globals=ON

Es que si no es un coñazo....

creo que al final terminaré creando una función que me devuelva un valor de la variable si esta existe y tiene contenido y un -1 en caso contrario no se. Voy a mirar cómo pasar por referencia una variable a una función.
  #5 (permalink)  
Antiguo 23/05/2005, 03:05
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
elmasvital, no debería darte error. Al evaluar cond1 or cond2, no se evalúa cond2 si cond1 ya es cierto, porque da igual el valor que tenga, esa expresión será verdadera. De la misma forma, cond1 and cond2, será false en cuando una de las condiciones sea falsa. Si lo es la primera, no se evaluará la segunda.
Te importaría decirnos el código que tienes y el error exacto que te da?
__________________
Mi página personal: Julián Urbano
  #6 (permalink)  
Antiguo 23/05/2005, 03:07
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
¿y por qué no lo haces así?

if (isset($_GET['accion']) and $_GET['accion']!='login')
  #7 (permalink)  
Antiguo 23/05/2005, 03:12
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
Aplicar deMorgan que se llama eso no? Es otra idea..
__________________
Mi página personal: Julián Urbano
  #8 (permalink)  
Antiguo 23/05/2005, 03:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 7 meses
Puntos: 102
es lo que yo digo Tunait

Tienes que cumplirse ambas condiciones... que $_GET['accion'] esté definida Y que sea diferente de loguin...

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #9 (permalink)  
Antiguo 23/05/2005, 03:16
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
Cita:
Iniciado por caerolus
elmasvital, no debería darte error. Al evaluar cond1 or cond2, no se evalúa cond2 si cond1 ya es cierto, porque da igual el valor que tenga, esa expresión será verdadera. De la misma forma, cond1 and cond2, será false en cuando una de las condiciones sea falsa. Si lo es la primera, no se evaluará la segunda.
Te importaría decirnos el código que tienes y el error exacto que te da?
Es que site fijas tal como lo tiene la primera condición pregunta si no existe, y no si existe.

Así si no existe devuelve true
  #10 (permalink)  
Antiguo 23/05/2005, 03:27
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
Tienes razón en lo que dices si se evalua la primera no tiene pq evaluar la segunda PERO al evaluar la segunda porque la primera no sea correcta da error cuando $_GET['accion'] no está definida...

En fin he resuelto el problema como menciono en una respuesta anterior... he creado una función, por llamarlo de alguna manera, que hace lo que necesito.


Código PHP:
function empty2(&$variable)
{
    if (empty(
$variable))
        
$retornar=&$variable;
    else
        
$retornar=-1;
    return 
$retornar;

Devuelve -1 si la variable está vacía o no existe sin dar error... cuando la variable no está definida en caso contrario devuelve su contenido.

Así con hacer lo siguiente

if (empty2($_GET['accion']!='login')) Pues eso devuelve -1 si está vacío o no existe SIN DAR ERROR.

No puedo mostraros el codigo original porque ya modifiqué para que funcione de esta manera.

A todos gracias por las molestias.

Última edición por elmasvital; 23/05/2005 a las 18:29
  #11 (permalink)  
Antiguo 23/05/2005, 03:28
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
Cita:
Iniciado por tunait
Es que site fijas tal como lo tiene la primera condición pregunta si no existe, y no si existe.

Así si no existe devuelve true
Pues a eso me refiero, esa condición devuelve true, por lo que la condición dos no es necesario evaluarla.
En cuanto a lo dicho por tunait, creo que ninguno nos hemos dado cuenta jeje:
if (isset($_GET['accion']) and $_GET['accion']!='login')
no vale, sería esto:
if (isset($_GET['accion']) and $_GET['accion']=='login')
Creo yo, según lo que había puesto elmasvital al principio.
deMorgan:
1. !(a and b) = !a or !b
2. !(a or b) = !a and !b
__________________
Mi página personal: Julián Urbano
  #12 (permalink)  
Antiguo 23/05/2005, 04:03
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
(sigamos )

Sí y no a lo que propones... me da la impresiónd de que lo que pretende elmasvital es detectar si no existe o si es distinta de login, en cuyo caso "supongo" lanzaría una acción o mensaje de "acción no definida o incorrecta" (no error de php, si no un aviso al usuario de que puso algo mal.

if (!isset($_GET['accion']) or $_GET['accion']!='login')

Osea, si no está o si es distinta de login (osea, si el usuario lo está haciendo mal)

en cambio lo que propones

if (isset($_GET['accion']) and $_GET['accion']=='login')

indicaría que el usuario lo ha hecho correcto

vamos, al menos eso es lo que entendí al principio
  #13 (permalink)  
Antiguo 23/05/2005, 04:19
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
Jejje sí tunait, a eso me refiero. Que ya por probar, que cambie el then por el else. No sé si me explico. Que en vez de poner
if(cond_inicial)
s1
else
s2
Pues ponga esto:
if(condicion_caerolus) // Jejeje
s2
else
s1

Viene a ser lo mismo. Que insisto, debería funcionar de todas formas, pero no sé...

Tunait, tú que eres moderadora, podrías mirarme este post y decirme algo? gracias! http://www.forosdelweb.com/showthread.php?p=1106928
__________________
Mi página personal: Julián Urbano
  #14 (permalink)  
Antiguo 23/05/2005, 04:23
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
sisisí ahora pillé lo del Morgan ese

No mabía enterao de lo de darle la vuelta a la condición

Bueno, ha estado entretenido!

Un saludo
  #15 (permalink)  
Antiguo 23/05/2005, 04:29
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
Cita:
Iniciado por caerolus
Tunait, tú que eres moderadora, podrías mirarme este post y decirme algo? gracias! http://www.forosdelweb.com/showthread.php?p=1106928
Ups esto no lo había visto, yá te respondo allá
  #16 (permalink)  
Antiguo 23/05/2005, 05:03
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
Venga voy a intentar aclararlo un poquitin más....

si yo hago directamente $_GET['accion']==login y no se ha pasado ninguna accion en el url PHP devuelve error que accion no está definida. ¿qué solución nos queda? comprobar previamente que existe por lo que, y era lo que preguntaba, cada vez que quiero consultar el valor de una variable tipo $_GET tengo que comprobar que exista previamente... pero no en el mismo if

osea no puedo hacer esto

if (isset($_GET['accion`]) AND $_GET['accion']=='login') porque si no se ha definido accion en el url me suelta error de que no está definido

la unica solución es anidarlos

if (isset($_GET['accion']))
if ($_GET['accion'])

por lo que me resulta muy engorroso hacer esto para cada variable... anida mucho (aunque soy consciente de que funcionalmente es más rápido para el ordenador hacerlo así), así que he creado una función que no lanza error si la variable no existe que la teneis arriba con lo que ahora puedo hacer

if (empty2($_GET['accion'])=='login') -->si no existe devuelve -1 sin más pero no obliga a trazarlo.

Se que los ejemplos que he puesto ahora son diferentes a los que preguntaba inicialmente pero es para explicarlo mejor... es que en la web que estoy haciendo todas las páginas se cargan a partir del index de la forma index.php?page=login&accion=logout y por tanto debo controlar varias cosas.
  #17 (permalink)  
Antiguo 23/05/2005, 05:11
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
Bueno, aunque sigo pensando en llamar a Mulder y Scully para que investiguen este expediente X, simplemente aconsejarte que en lugar de devolver -1 en esa función, devuelvas null. Imagina que la variable que quieres comprobar sea un entero y pueda valer -1....ya no te vale.
__________________
Mi página personal: Julián Urbano
  #18 (permalink)  
Antiguo 23/05/2005, 05:12
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
... pero si la primera condición devuelve false no evalúa la segunda

acabo de probarlo sin enviar la variable por url y no da error

if(variable existe and variable distinta de)

si no existe se detiene ahí sin dar error
  #19 (permalink)  
Antiguo 23/05/2005, 05:22
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
Jjeje sí
Creo que ya sé lo que te pasa elmasvital, y es que debes sacar ya al gnomo que tienes dando pedales en la CPU jeje, que ya no sabe lo que hace
En serio, me estoy quedando a cuadros
__________________
Mi página personal: Julián Urbano
  #20 (permalink)  
Antiguo 23/05/2005, 05:36
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
Joer... pos ahora lo acabo de probar aislando el código y no me da el error... Voy a suicidarme y ahora vuelvo (aunq este ordenador es distinto al de esta mañana) A saber donde cojo·$"·es estaba metiendo la pata.

weno cosas de novato no? Queden mis palabras como no dichas... como diría algun político por ahí (y se queda tan ancho)
  #21 (permalink)  
Antiguo 23/05/2005, 05:38
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
Jajjaaj, ves como era el gnomo??
Pues si no te importa, podrías ponernos el código entero para ver que pasaba?? A mí esque estas cosas ya me pican y hasta que no las vea no paro. Por tu culpa ya no duermo esta noche
__________________
Mi página personal: Julián Urbano
  #22 (permalink)  
Antiguo 23/05/2005, 05:42
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
Cita:
Iniciado por elmasvital
... Voy a suicidarme y ahora vuelvo
con esa frase sí me he reído un rato
  #23 (permalink)  
Antiguo 23/05/2005, 05:47
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
Bueno ya que se habeis tomado tantas molestias pegaré el código pero se que seguramente será lo peor que habeis visto nunca... soy tan enrevesado programando como en mi vida personal jejejeje asi que no extrañaros...

como he dicho todas las páginas se cargan a través del index.php de esta forma

localhost/index.php?page=login&accion=logout

por poner un ejemplo y en el index ya se hace un include de este código.

Código PHP:
<?
//si se está intentando identificar el usuario (botón de enviar del formulario pulsado)
if (isset2($_GET['page'])!='login')
{
    
//El caso general 
    //si no estamos identificados presentamos el formulario de login
    
if ($_SESSION["autentificado"]==false)
    {
        echo 
"Bienvenido a la web corporativa de Electrincas del SUR S.L.";    
        
form_login();
    }
    else 
//si estamos identificados saludamos al usuario y colocamos botón cerrar sesión.
    
{
        echo 
"Bienvenido "$_SESSION['nick'];
        
?>
        <form action="\index.php?page=login&accion=logout" method="post">
        <input name="submit" type="submit" value="cerrar sesión">
        </form>
        <?
    
}
}
else
{
    switch (
isset2($_GET['accion']))
    {
        case 
'login'//si se ha pusado el botón de enviar del formulario.
            
validar_user();
            break;
        case 
'logout'//si se ha pulsado el botón de desconexión.
            
$_SESSION['autentificado']=false;
            
session_destroy();
            
cerrar_conexion();
            
ir_index(1);
            break;        
        default :
    }
//switch
}

function 
validar_user()
{
    
$sql="SELECT id, password  FROM usuario WHERE nick='".$_POST['f_nick'] . "' AND password='".$_POST['f_password'] . "';";
//    echo $sql;
    
$result mysql_query($sql); 
    echo 
$result;
    if(
$row mysql_fetch_array($result)) 
    { 
            
//dejamos autentificado al usuario
            
$_SESSION["autentificado"]=true;
            
$_SESSION['nick']=$_POST['f_nick'];
            
//dirigimos la página principal al login
            
$_GET['page']='validar_user_ok';
    }
    else
    {
        echo 
"Usuario o contraseña incorrecta";
    }
}

function 
form_login ()
{
?>
    <form action='\index.php?page=login&accion=login' method='post' name='form_login'>
        usuario<input name='f_nick' type='text' value='' size='15'>
        contraseña<input name='f_password' type='password' value='' size='15'>
        <input type='submit' name='Submit' value='Enviar'>
    </form>
<?
}

?>
  #24 (permalink)  
Antiguo 23/05/2005, 09:24
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
weno algun comentario?
  #25 (permalink)  
Antiguo 23/05/2005, 15:32
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 7 meses
Puntos: 1
Pues no sé, tanto con tu isset2 como con los isset del propio php me funciona bien. De verdad, ni idea de qué puede pasar.
__________________
Mi página personal: Julián Urbano
  #26 (permalink)  
Antiguo 23/05/2005, 15:56
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 18 años, 11 meses
Puntos: 2
Hola!

Hace poco tratamos algo parecido a esto entre NicolarPar y yo en otro tema, que no encuentro por lo cierto, lo que recomendaria seria que hicieras una funcion donde te haga todo el trabajo y asi tu siempre estas seguro de lo que estas recibiendo, como esto:

Código PHP:

function recogerGET($nombre)
{
     
$valor "";

     if isset(
$_GET[$nombre])
     {
          
$valor $_GET[$nombre];
     }
    return 
$valor;


Esa funcion la llamas cuando la necesites y evitaras cualquier problema con el $GET

Por otra parte para validarla puedes agregar esto:

Código PHP:

function recogerGET($nombre)
{
     
$valor "";

     if isset(
$_GET[$nombre])
     {
          
$valor $_GET[$nombre];
          
$valor trim($valor);

          if 
isEmpty($valor
          {
              
$valor "";
          }
     }
    return 
$valor;


Parece grande la función, pero con ese método aseguras que nunca estás recibiendo valores erroneos por la URL y ademas lo limpias de todo caracter extraño, aplica también para POST.

Bueno, esa seria la idea.

Suerte!!

Lo aplicas así:

if (recogerGET("accion")!="login")
echo "Error"

Espero te sirva
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com

Última edición por Neuron_376; 23/05/2005 a las 16:04 Razón: ANEXO:
  #27 (permalink)  
Antiguo 23/05/2005, 18:26
 
Fecha de Ingreso: mayo-2005
Mensajes: 44
Antigüedad: 18 años, 10 meses
Puntos: 0
Por fin alguien que me comprende Mi siquiatra se alegrará de saberlo.


Si lees algún post arriba mio en la primera página verás una función bastante parecida a la que propones Desde luego asi no tengo problemas y me queda el código algo más bonito

1 saludo
  #28 (permalink)  
Antiguo 23/05/2005, 18:33
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 18 años, 11 meses
Puntos: 2
Hola!

Si, creo que la vi, pero creo que lei que aun tenias problemas, por eso te puse esta que me parece que es adecuada.

Suerte!! y que bueno que te ahorre terapia... jajajaja
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
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 02:56.