¿Dónde debo usar isset () y! Empty ()


105

Leí en alguna parte que la isset()función trata una cadena vacía como TRUE, por isset()lo tanto, no es una forma efectiva de validar entradas de texto y cuadros de texto de un formulario HTML.

Entonces puede usar empty()para verificar que un usuario haya escrito algo.

  1. ¿Es cierto que la isset()función trata una cadena vacía como TRUE?

  2. Entonces, ¿en qué situaciones debería usar isset()? ¿Debería usar siempre !empty()para comprobar si hay algo?

Por ejemplo en lugar de

if(isset($_GET['gender']))...

Usando esto

if(!empty($_GET['gender']))...

Respuestas:


135

isset vs.! vacío

TLC:

"isset () comprueba si una variable tiene un valor que incluya (False, 0 o cadena vacía), pero no NULL. Devuelve VERDADERO si existe var; FALSO en caso contrario.

Por otro lado, la función empty () comprueba si la variable tiene un valor vacío cadena vacía, 0, NULL o False. Devuelve FALSE si var tiene un valor no vacío y distinto de cero. "


47
TLC: del artículo
Jianxin Gao

5
empty()también devuelve verdadero para una matriz vacía.
Mitya

Incluso aunque empty()devuelve VERDADERO para 0, no es una buena idea usar este operador para matemáticas en caso de que "0" sea accidentalmente una cadena. Esto puede resultar peligroso. En su lugar, utilizan básica >, <y ==los operadores y variables convierta usando intval()o floatval().
kaleazy

32

De la forma más general:

  • issetprueba si una variable (o un elemento de una matriz, o una propiedad de un objeto) existe (y no es nula)
  • empty prueba si una variable (...) contiene algunos datos no vacíos.


Para responder a la pregunta 1 :

$str = '';
var_dump(isset($str));

da

boolean true

Porque la variable $strexiste.


Y pregunta 2 :

Debe utilizar isset para determinar si existe una variable ; por ejemplo, si obtiene algunos datos como una matriz, es posible que deba verificar si hay una clave establecida en esa matriz.
Piense en $_GET/ $_POST, por ejemplo.

Ahora, trabajar en su valor, cuando sepa que existe tal valor: ese es el trabajo de empty.


11

Tampoco es una buena forma de verificar una entrada válida.

  • isset() no es suficiente porque, como ya se ha señalado, considera que una cadena vacía es un valor válido.
  • ! empty() tampoco es suficiente porque rechaza '0', que podría ser un valor válido.

El uso isset()combinado con una verificación de igualdad contra una cadena vacía es lo mínimo que necesita para verificar que un parámetro entrante tiene un valor sin crear falsos negativos:

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

Pero por "mínimo básico", me refiero exactamente a eso. Todo lo que hace el código anterior es determinar si hay algún valor para $_GET['gender']. No , no determinar si el valor $_GET['gender']es válido (por ejemplo, uno de ).("Male", "Female","FileNotFound")

Para eso, vea la respuesta de Josh Davis .


Debido a que está utilizando una comparación imprecisa, el fragmento sugerido dará falsos positivos al manejar un valor sin cadena de cero-ish / falsey. 3v4l.org/aIWqA
mickmackusa

11

issetestá destinado a ser utilizado solo para variables y no solo valores, por lo que isset("foobar")generará un error. A partir de PHP 5.5, emptyadmite tanto variables como expresiones.

Entonces, su primera pregunta debería ser si issetdevuelve verdadero para una variable que contiene una cadena vacía. Y la respuesta es:

$var = "";
var_dump(isset($var));

Las tablas de comparación de tipos en el manual de PHP son bastante útiles para tales preguntas.

issetbásicamente verifica si una variable tiene algún valor que no sea nulo, ya que las variables no existentes siempre tienen el valor nulo . emptyes una especie de contraparte, issetpero también trata el valor entero 0y el valor de la cadena "0"como vacíos. (Nuevamente, eche un vistazo a las tablas de comparación de tipos ).


1
Tenga en cuenta que empty()también "admite expresiones, en lugar de solo variables" a partir de PHP 5.5.0.
ComFreek

8

Si tiene un $ _POST ['param'] y asume que es de tipo cadena, entonces

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

es idéntico a

!empty($_POST['param'])

4

isset () no es una forma eficaz de validar entradas de texto y cuadros de texto desde un formulario HTML

Puede reescribir eso como "isset () no es una forma de validar la entrada". Para validar la entrada, use la extensión de filtro de PHP . filter_has_var()le dirá si la variable existe mientras filter_input()que en realidad filtrará y / o desinfectará la entrada.

Tenga en cuenta que no tiene que usar filter_has_var()antes filter_input()y si solicita una variable que no está configurada, filter_input()simplemente regresará null.


3

Cuándo y cómo usarlo:

  1. Está establecido()

Verdadero para 0, 1, cadena vacía, una cadena que contiene un valor, verdadero, falso

Falso por nulo

p.ej

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. Vacío

Falso para 1, una cadena que contiene un valor, verdadero

Verdadero para nulo, cadena vacía, 0, falso, por ejemplo

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False

2

isset se utiliza para determinar si existe una instancia de algo, es decir, si se ha instanciado una variable ... no se refiere al valor del parámetro ...

Pascal MARTIN ... +1 ...

empty () no genera una advertencia si la variable no existe ... por lo tanto, se prefiere isset () cuando se prueba la existencia de una variable cuando se pretende modificarla ...


1

Usar emptyes suficiente:

if(!empty($variable)){
    // Do stuff
}

Además, si desea un valor entero, también puede valer la pena comprobarlo intval($variable) !== FALSE.


2
Además, intval () nunca devuelve FALSE.
Josh Davis

1
NO es suficiente ya que '0' es una cadena válida pero no para empty... isset/ filter_has_vardebe usarse para verificar si existe var.
Yousha Aleayoub

1
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)

1

Vine aquí buscando una forma rápida de verificar si una variable tiene algún contenido. Ninguna de las respuestas aquí proporcionó una solución completa, así que aquí está:


Basta con comprobar si la entrada es ''o null, porque:

Solicitar .../test.php?var=resultados de URL en$_GET['var'] = ''

Solicitar .../test.phpresultados de URL en$_GET['var'] = null


isset()devuelve falsesolo cuando la variable existe y no está configurada null, por lo que si la usa obtendrá truecadenas vacías ( '').

empty()considera ambos nully ''vacío, pero también se considera '0'vacío, lo cual es un problema en algunos casos de uso.

Si desea tratarlo '0'como vacío, utilice empty(). De lo contrario, utilice la siguiente verificación:

$var .'' !== ''evalúa falsesolo para las siguientes entradas:

  • ''
  • null
  • false

Utilizo la siguiente verificación para filtrar también cadenas con solo espacios y saltos de línea:

function hasContent($var){
    return trim($var .'') !== '';
}

0

Utilizo lo siguiente para evitar avisos, esto verifica si la var está declarada en GET o POST y con el prefijo @ puede verificar con seguridad si no está vacía y evitar el aviso si la var no está configurada:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}

El "operador stfu" ( @) no debería ser recomendado y no es necesario para su fragmento. Ésta no es una buena respuesta. Estás haciendo una comparación imprecisa. También puede usar !empty().
mickmackusa

1
Ooo man ... Esto es genial para el ejemplo de mala codificación. @le dará problemas con la depuración, el impacto de la página es más lento y aún puede tener error_logmás de 1 GB en un momento. Solo sea inteligente y use !empty(), !is_null()o algo así.
Ivijan Stefan Stipić

0

isset () se usa para verificar si la variable está configurada con el valor o no y Empty () se usa para verificar si una variable dada está vacía o no.

isset () devuelve verdadero cuando la variable no es nula, mientras que Empty () devuelve verdadero si la variable es una cadena vacía.


0
    $var = '';
// Evaluates to true because $var is empty
if ( empty($var) ) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if ( isset($var) ) {
 echo '$var is set even though it is empty';
    }

Fuente: Php.net




0

! empty hará el truco. si solo necesita verificar que los datos existan o no, use isset other empty puede manejar otras validaciones

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.