validar - isset y empty en php
En donde debo usar isset() y! Empty() (13)
Leí en alguna parte que la función isset()
es que una cadena vacía se prueba como TRUE
, ya que isset()
no es una forma efectiva de validar entradas de texto y cuadros de texto desde un formulario HTML.
Entonces puede usar empty()
para verificar que un usuario haya escrito algo.
¿Es cierto que la función
isset()
trata una cadena vacía comoTRUE
?Entonces, ¿en qué situación debería usar
isset()
? ¿Debería usar siempre!empty()
para verificar si hay algo?
Por ejemplo, en lugar de
if(isset($_GET[''gender'']))...
Usando esto
if(!empty($_GET[''gender'']))...
isset () no es una forma efectiva de validar entradas de texto y cuadros de texto desde un formulario HTML
Puede volver a escribir 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 que filter_input()
realmente filtrará y / o desinfectará la entrada.
Tenga en cuenta que no tiene que usar filter_has_var()
antes de filter_input()
y si solicita una variable que no está establecida, filter_input()
simplemente devolverá null
.
Cuándo y cómo usar:
- Está establecido()
True para 0, 1, cadena vacía, una cadena que contiene un valor, verdadero, falso
Falso para nulo
p.ej
$status = 0
if (isset($status)) // True
$status = null
if (isset($status)) // False
- Vacío
Falso para 1, una cadena que contiene un valor, verdadero
True para cadena vacía nula, 0, falso, por ejemplo
$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
De la manera más general:
-
isset
prueba siisset
una variable (o un elemento de una matriz, o una propiedad de un objeto) (y no es nulo) - pruebas
empty
si una variable (...) contiene algunos datos no vacíos.
Para responder la pregunta 1 :
$str = '''';
var_dump(isset($str));
da
boolean true
Porque la variable $str
existe.
Y pregunta 2 :
Debe usar isset para determinar si existe una variable; por ejemplo, si obtiene algunos datos como una matriz, es posible que deba verificar si una clave está en esa matriz.
Piense en $_GET
/ $_POST
, por ejemplo.
Ahora, para trabajar en su valor, cuando sepa que hay tal valor: ese es el trabajo de empty
.
Si tiene $ _POST [''param''] y asume que es tipo de cadena, entonces
isset($_POST[''param'']) && $_POST[''param''] != '''' && $_POST[''param''] != ''0''
es idéntico a
!empty($_POST[''param''])
Tampoco es una buena forma de verificar si hay una entrada válida.
-
isset()
no es suficiente porque, como ya se señaló, considera que una cadena vacía es un valor válido. -
! empty()
! empty()
tampoco es suficiente porque rechaza ''0'', que podría ser un valor válido.
El uso de isset()
combinado con una comprobación de igualdad con una cadena vacía es lo mínimo que necesita para verificar que un parámetro entrante tenga 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 determina si el valor de $_GET[''gender'']
es válido (p. Ej., Uno de ("Male", "Female",
"FileNotFound"
)
).
Para eso, vea la respuesta de Josh Davis .
Usar empty
es suficiente:
if(!empty($variable)){
// Do stuff
}
Además, si quieres un valor entero, también vale la pena verificar que intval($variable) !== FALSE
.
Utilizo lo siguiente para evitar avisos, esto comprueba si la var está declarada en GET o POST y con el prefijo @ puede verificar de forma segura si no está vacía y evitar el aviso si la var no está establecida:
if( isset($_GET[''var'']) && @$_GET[''var'']!='''' ){
//Is not empty, do something
}
isset () se usa para verificar si la variable se establece con el valor o no y Empty () se usa para verificar si una variable determinada 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.
isset se usa para determinar si existe una instancia de algo, es decir, si se ha instanciado una variable ... no se trata del 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 intenta modificarla ...
isset
está destinado a ser utilizado solo para variables y no solo para valores, por lo que isset("foobar")
generará un error. A partir de PHP 5.5, el empty
admite tanto variables como expresiones.
Por lo tanto, su primera pregunta debería ser si isset
devuelve 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.
isset
básicamente verifica si una variable tiene un valor distinto de nulo, ya que las variables no existentes siempre tienen el valor nulo . empty
es una especie de contraparte de isset
pero también trata el valor entero 0
y el valor de cadena "0"
como vacío. (De nuevo, eche un vistazo a las tablas de comparación de tipos ).
FTA:
"isset () comprueba si una variable tiene un valor que incluye (False, 0 o cadena vacía), pero no NULL. Devuelve TRUE si var existe; FALSE de lo contrario.
Por otro lado, la función empty () comprueba si la variable tiene un valor vacío string vacío, 0, NULL o False. Devuelve FALSE si var tiene un valor no vacío y distinto de cero. "
// 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
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)