Pregunta: Comprobar si un valor $ _POST es vacío.
Traducción: Compruebe si una matriz clave/índice tiene un valor asociado.
Respuesta: Depende de su énfasis en la seguridad. Depende de lo que está permitido como entrada válida.
1. Some people say use empty().
Desde el Manual de PHP: "[vacío] determina si una variable es considerada como vacía Una variable se considera vacía si no existe o si su valor es igual a FALSO.". Los siguientes se consideran vacíos.
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
Si ninguno de estos valores son válidos para el control de entrada y, a continuación empty()
funcionaría. El problema aquí es que empty()
podría ser demasiado amplio para ser utilizado de manera consistente (de la misma manera, por la misma razón, en diferentes envíos de control de entrada a $_POST
o $_GET
). Un buen uso de empty()
es comprobar si una matriz completa está vacía (no tiene elementos).
2. Some people say use isset().
isset()
(una construcción del lenguaje) no pueden funcionar en matrices de enteros, como en isset($myArray)
. Solo puede operar en variables y elementos de matriz (mediante el índice/clave): isset($var)
y isset($_POST['username'])
. El constructo de lenguaje isset()
hace dos cosas. Primero comprueba si una variable o matriz índice/clave tiene un valor asociado. En segundo lugar, verifica para asegurarse de que el valor no sea igual al valor PHP NULL.
En resumen, la comprobación más precisa se puede realizar mejor con isset()
, ya que algunos controles de entrada ni siquiera se registran con $ _POST cuando no están seleccionados o marcados. Nunca he conocido un formulario que envió el valor PHP NULL. Ninguno de los míos lo hace, entonces uso isset()
para verificar si una clave $_POST
no tiene ningún valor asociado (y eso no es NULO). isset()
es un prueba mucho más estricta de vacío (en el sentido de su pregunta) que empty()
.
3. Some people say just do if($var), if($myArray), or if($myArray['userName']) to determine emptiness.
usted puede probar todo lo que se evalúa como verdadera o falsa en una sentencia if. Las matrices vacías evalúan a falso y también lo hacen las variables que no están establecidas. Las variables que contienen el valor PHP NULL también evalúan a falso. Desafortunadamente en este caso, como con empty()
, muchas cosas más también se evalúan como falsas: 1. la cadena vacía '', cero (0), cero.zero (0.0), la cadena cero '0', booleano falso y cierto vacío Objetos XML
--Doyle, a partir de PHP 5.3
En conclusión, el uso isset()
y considerar la combinación con otras pruebas. Ejemplo:
Puede que no funcione debido a la atornilladura superglobal, pero funcionaría para otras matrices sin dudarlo.
if(is_array($_POST) && !empty($_POST))
{
//Now test for your successful controls in $_POST with isset()
}
Esto debería funcionar también.
if(is_array($_POST) && $_POST)
{
//Now test for your successful controls in $_POST with isset()
//Always validate your input.
}
Por lo tanto, ¿por qué buscar un valor asociado a una clave incluso antes de saber con certeza que $_POST
representa una matriz y ha cualquier valor almacenado en ella en absoluto (algo que muchas personas no tienen en cuenta)? Recuerde, las personas pueden enviar datos a su formulario sin usar un navegador web. Es posible que algún día llegues al punto de probar que $_POST
solo tiene las teclas permitidas, pero esa conversación es para otro día.
Referencia útil:
PHP Manual: Type Testing Comparison Tables
isset value comprueba si la variable ya se ha establecido. sin embargo, cuando envía un formulario, una variable será una cadena vacía. – miki725