php - example - ¿Mejor forma de verificar la variable para una cadena vacía o nula?
test_input php (9)
Acepto humildemente si me equivoco, pero probé por mi cuenta y descubrí que lo siguiente funciona para probar tanto cadenas (0) "" como variables con valores NULL:
if ( $question ) {
// Handle success here
}
Lo cual también podría revertirse para probar el éxito como tal:
if ( !$question ) {
// Handle error here
}
Como PHP es un lenguaje dinámico, ¿cuál es la mejor manera de verificar si un campo provisto está vacío?
Quiero asegurarme de que:
- null se considera una cadena vacía
- una cadena de espacio en blanco solo se considera vacía
- ese "0" no se considera vacío
Esto es lo que tengo hasta ahora:
$question = trim($_POST[''question'']);
if ("" === "$question") {
// Handle error here
}
Debe haber una manera más simple de hacer esto?
Cuando desee verificar si se proporciona un valor para un campo, ese campo puede ser una string
, una array
o no. Entonces, lo siguiente es suficiente
function isSet($param)
{
return (is_array($param) && count($param)) || trim($param) !== '''';
}
Este comprueba matrices y cadenas:
function is_set($val) {
if(is_array($val)) return !empty($val);
return strlen(trim($val)) ? true : false;
}
No hay mejor manera, pero como se trata de una operación que generalmente se realiza con frecuencia, es mejor automatizar el proceso.
La mayoría de los marcos ofrecen una manera de hacer que los argumentos analicen una tarea fácil. Puedes construir tu propio objeto para eso. Ejemplo rápido y sucio:
class Request
{
// This is the spirit but you may want to make that cleaner :-)
function get($key, $default=null, $from=null)
{
if ($from) :
if (isset(${''_''.$from}[$key]));
return sanitize(${''_''.strtoupper($from)}[$key]); // didn''t test that but it should work
else
if isset($_REQUEST[$key])
return sanitize($_REQUEST[$key]);
return $default;
}
// basics. Enforce it with filters according to your needs
function sanitize($data)
{
return addslashes(trim($data));
}
// your rules here
function isEmptyString($data)
{
return (trim($data) === "" or $data === null);
}
function exists($key) {}
function setFlash($name, $value) {}
[...]
}
$request = new Request();
$question= $request->get(''question'', '''', ''post'');
print $request->isEmptyString($question);
Symfony usa ese tipo de azúcar masivamente.
Pero está hablando de más que eso, con su "// Error de manejo aquí". Está mezclando 2 trabajos: obteniendo los datos y procesándolos. Esto no es lo mismo en absoluto.
Existen otros mecanismos que puede usar para validar datos. Una vez más, los marcos pueden mostrarle las mejores prácticas.
Cree objetos que representen los datos de su formulario, luego adjunte procesos y vuelva a utilizarlos. Suena mucho más trabajo piratear un script PHP rápido (y es la primera vez), pero es reutilizable, flexible y mucho menos propenso a errores ya que la validación de formularios con PHP habitual tiende a convertirse rápidamente en código de spaguetti.
Publicación anterior, pero alguien podría necesitarla como yo lo hice;)
if (strlen($str) == 0){
do what ever
}
reemplace $str
con su variable. NULL
y ""
devuelven 0 al usar strlen
.
Tenga cuidado con los falsos negativos de la función trim()
- realiza un cast-to-string antes de recortar, y por lo tanto devolverá, por ejemplo, "Array" si lo pasa una matriz vacía. Eso puede no ser un problema, dependiendo de cómo procesa sus datos, pero con el código que proporciona, un campo llamado question[]
podría suministrar en los datos POST y parecer ser una cadena no vacía. En cambio, sugeriría:
$question = $_POST[''question''];
if (!is_string || ($question = trim($question))) {
// Handle error here
}
// If $question was a string, it will have been trimmed by this point
Use la función de PHP vacía (). Las siguientes cosas se consideran vacías
"" (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)
Para más detalles verifique la función vacía
empty () solía funcionar para esto, pero el comportamiento de empty () ha cambiado varias veces. Como siempre, los documentos php son siempre la mejor fuente para el comportamiento exacto y los comentarios en esas páginas suelen proporcionar una buena historia de los cambios a lo largo del tiempo. Si desea verificar la falta de propiedades de objeto, un método muy defensivo en este momento es:
if (is_object($theObject) && (count(get_object_vars($theObject)) > 0)) {
// Function for basic field validation (present and neither empty nor only white space
function IsNullOrEmptyString($question){
return (!isset($question) || trim($question)==='''');
}