elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST  (Leído 22,787 veces)
Graphixx


Desconectado Desconectado

Mensajes: 1.336


Full Stack Developer


Ver Perfil WWW
Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« en: 19 Abril 2012, 19:10 pm »

La funcion empty() de PHP toma como vacia la variable si esta contiene el numero 0 o el caracter '0'.

Pero a veces supongamos que tenemos un array() con respuestas desde una base de datos, los array todos comienzan desde 0, por lo que si paso el id 0 de un array por POST y despues necesito verificar que la variable no venga vacia no funciona.

en el formulario listo de forma dinamica los campos encontrados:
Código
  1. //$resp -> contiene el array devuelto por la consulta mysql
  2. <?php for($i=0;$i<count($resp);$i++){
  3. $campo = $resp[$i];
  4. ?>
  5. <td width="69" align="center" valign="middle"><input type="radio" name="opcion" id="opcion" value="<?php echo $i; ?>"></td>
  6. <?php } ?>
  7.  

Cuando no se selecciona ningun radio de la lista, la variable llega vacia: " ".
Pero cuando se selecciona el primer radio con el id 0, efetivamente la variable por POST llega el cero: 0.
como hago para comparar cuando llegue vacia, pero que no me tome el 0 como vacio ?

toca hacer el cambio de empty por >=0:
Código
  1. //cambiar
  2. if(empty($_POST["opcion"])){}
  3. //por
  4. if($_POST["opcion"]>=0){}
  5.  

Paginas con temas al respecto:
http://www.codigomanso.com/es/2009/01/la-funcion-empty-de-php-esta-mal/


« Última modificación: 19 Abril 2012, 19:38 pm por Graphixx » En línea

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx Rōninnovation
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #1 en: 20 Abril 2012, 05:22 am »

Código
  1. <?php
  2. function emptyy($var){if(strlen(trim($var))>=1){return true;} else {return false;}}
  3.  
  4. $array[] = 'omg';
  5. $array[] = '';
  6. $array[] = '        ';
  7. $array[] = 0;
  8. $array[] = '123';
  9.  
  10. foreach($array as $valor){
  11. var_dump(emptyy($valor));
  12. }
  13. ?>

Debería retornar:
Código
  1. boolean true
  2.  
  3. boolean false
  4.  
  5. boolean false
  6.  
  7. boolean true
  8.  
  9. boolean true
  10.  

Saludos


En línea

dimitrix


Desconectado Desconectado

Mensajes: 4.847



Ver Perfil WWW
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #2 en: 6 Mayo 2012, 22:02 pm »

Citar
La funcion empty() de PHP toma como vacia la variable si esta contiene el numero 0 o el caracter '0'.
También miran que no tengan FALSE o que estén vacios (creo).

Yo cuando uso empty() para saber si existe algo en la db le paso una valor por ejemplo $valor['ID'] que no empieza por 0 xD

También puedes hacer:

Código
  1. if(mysql_num_rows($valor)){
  2. //Existe registro/s
  3.  
  4. }else{
  5. //No existe registros :-(
  6.  
  7. };
En línea




pwnz

Desconectado Desconectado

Mensajes: 14



Ver Perfil
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #3 en: 6 Mayo 2012, 23:35 pm »

Quizá pueda servirte la función strlen().
Por ejemplo con algo así...
Código
  1. function checkEmpty($var) {
  2.    if (strlen($var) >= 1) {
  3.        return False; // No esta vacia
  4.    } else {
  5.        return True; // Esta Vacia
  6.    }
  7. }
  8.  

Quedaría algo así...

Código
  1. $arr = array("0", "", "1", "False", "hola", 0, False, True);
  2. foreach ($arr as $valor) {
  3.    echo "<pre>";
  4.    var_dump(empty($valor))."-".var_dump(checkEmpty($valor));
  5.    /*
  6.      *              TRUE                        FALSE       => "0"
  7.      *              TRUE                        TRUE        => ""
  8.      *              FALSE                       FALSE       => "1"
  9.      *              FALSE                       FALSE       => "False"
  10.      *              FALSE                       FALSE       => "hola"
  11.      *              TRUE                        FALSE       => 0
  12.      *              TRUE                        TRUE        => False
  13.      *              FALSE                       FALSE       => True
  14.      */
  15.    echo "</pre>";
  16.  

Si no entendí mal con esto en teoría no tendrías ese problema. Saludos.
Pd: No me fijé que drvy | BSM puso algo similar aunque combinado con trim para eliminar los espacios.
« Última modificación: 6 Mayo 2012, 23:52 pm por pwnz » En línea

it3r

Desconectado Desconectado

Mensajes: 101



Ver Perfil
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #4 en: 11 Mayo 2012, 21:05 pm »

podrías probar con esto:

Código:
if (isset($_POST["opcion"]) AND $_POST["opcion"]!==''){

}
ó

Código:
if (isset($_POST["opcion"]) AND $_POST["opcion"]!==null){

}

Saludos
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #5 en: 12 Mayo 2012, 00:17 am »

Claro, ocupa la funciona isset().
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #6 en: 12 Mayo 2012, 04:52 am »

El problema de isset es que aunque la variable este vacía puede retornar true por simplemente estar definida... si yo hago index.php?var=, isset devolvería true..
Código
  1. <?php
  2. $var = '';
  3. $var2 = ' ';
  4. var_dump(isset($var));  // True
  5. var_dump(isset($var2)); // True
  6. ?>


Saludos
En línea

it3r

Desconectado Desconectado

Mensajes: 101



Ver Perfil
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #7 en: 12 Mayo 2012, 05:14 am »

El problema de isset es que aunque la variable este vacía puede retornar true por simplemente estar definida... si yo hago index.php?var=, isset devolvería true..
Código
  1. <?php
  2. $var = '';
  3. $var2 = ' ';
  4. var_dump(isset($var));  // True
  5. var_dump(isset($var2)); // True
  6. ?>


Saludos

El isset es para verificar si la variable ha sido creada, no para validar, la validación se hace en

Código:
$_POST["opcion"]!==''

el isset es por que si pones solo el codigo anterior y no se envia la variable te saldria un error de undefined key "opcion".

saludos
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #8 en: 12 Mayo 2012, 13:57 pm »

Citar
El isset es para verificar si la variable ha sido creada, no para validar, la validación se hace en

Código:

$_POST["opcion"]!==''

Basicamente, ese metodo de comprobar si esta vacia o no se salta con un nullbyte en seguida.

Un ejemplo:
Código
  1. <?php
  2. // Null byte.
  3. $var = "\x00";
  4.  
  5. // Isset devuelve TRUE.
  6. var_dump(isset($var));
  7.  
  8. // Esta funcion devuelve False.
  9. function emptyy($var){if(strlen(trim($var))>=1){return true;} else {return false;}}
  10. var_dump(emptyy($var));
  11.  
  12. // Tu metodo devuelve TRUE tambien.
  13. if (isset($var) AND $var!==null){echo 'Variable aceptada';} else {echo 'Variable no aceptada';}
  14.  
  15.  
  16. // Imprimir variable (vacia)
  17. echo '<br />Variable: '.$var;
  18. ?>

Devolveria
Código
  1. boolean true
  2.  
  3. boolean false
  4.  
  5. Variable aceptada
  6. Variable:


PD: Obviamente un nullbyte es nada.. esta vació.. entonces todas deberían retornar false...

Saludos
En línea

it3r

Desconectado Desconectado

Mensajes: 101



Ver Perfil
Re: Si variable PHP vacia(no empty(),is_null,isset) que no tome 0 como vacia en POST
« Respuesta #9 en: 12 Mayo 2012, 18:58 pm »

Basicamente, ese metodo de comprobar si esta vacia o no se salta con un nullbyte en seguida.

Un ejemplo:
Código
  1. <?php
  2. // Null byte.
  3. $var = "\x00";
  4.  
  5. // Isset devuelve TRUE.
  6. var_dump(isset($var));
  7.  
  8. // Esta funcion devuelve False.
  9. function emptyy($var){if(strlen(trim($var))>=1){return true;} else {return false;}}
  10. var_dump(emptyy($var));
  11.  
  12. // Tu metodo devuelve TRUE tambien.
  13. if (isset($var) AND $var!==null){echo 'Variable aceptada';} else {echo 'Variable no aceptada';}
  14.  
  15.  
  16. // Imprimir variable (vacia)
  17. echo '<br />Variable: '.$var;
  18. ?>

Devolveria
Código
  1. boolean true
  2.  
  3. boolean false
  4.  
  5. Variable aceptada
  6. Variable:


PD: Obviamente un nullbyte es nada.. esta vació.. entonces todas deberían retornar false...

Saludos


Tienes razón no habia tomado en cuenta el null byte, mm esto seria nuevo para mi xD!,, veamos encontre que si lo paso a ascci con la funcion ord, el nullbyte queda en 0 entonces:

Código
  1. <?
  2. $nums=array("\x00","","   ","0",0,3);
  3. foreach($nums AS $n) var_dump(test($n));
  4. function test($var){
  5. if(isset($var) AND ord(trim($var))>0) return true;
  6. else return false;
  7. }
  8. ?>

Resultado:

Código
  1. boolean false
  2.  
  3. boolean false
  4.  
  5. boolean false
  6.  
  7. boolean true
  8.  
  9. boolean true
  10.  
  11. boolean true
  12.  
  13.  

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines