Quando trabalhamos com as variáveis $_POST ou $_GET, acontece que muitas vezes enviamos valores 0 (zero).
Por exemplo: É muito provável que na variável $_POST['preco'], possa conter um valor 0 (zero), já que se trata de de uma variável que vai armazenar o preço de um determinado produto.
No entanto, quando se trata de um campo obrigatório, temos de efectuar uma validação de protecção. De este modo evitamos que alguém envie um valor vazio.
Mas… Que passará caso o valor enviado seja um 0 (zero)? Será que a validação será bem efectuada? Será que vai permitir que o valor 0 (zero) seja considerado valido?
Vamos analisar o seguinte código e os 3 métodos de detecção:
$error = '';
if(!$_POST['preco']) $error .= '1- Campo "Preço" é obrigatório<br />';
if(empty($_POST['preco'])) $error .= '2- Campo "Preço" é obrigatório<br />';
if(!isset($_POST['preco'])) $error .= '3- Campo "Preço" é obrigatório<br />';
if(empty($error)) $error = 'Valor detectado: ' . $_POST['preco'];
?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Demo</title>
</head>
<body>
<form method="post">
<div>Preço: <input type="text" id="preco" name="preco" /></div>
<div><input type="submit" /></div>
</form>
<div><?php echo $error; ?></div>
</body>
</html>
Executamos o seguinte código, inserimos como valor um 0 (zero) e enviamos.
Resultado:
2- Campo "Preço" é obrigatório
O método 1 – if(!$_POST['preco']) – não detecta nenhum valor…
O método 2 – if(empty($_POST['preco'])) – também não detecta nenhum valor…
O método 3 – if(!isset($_POST['preco'])) – de facto detectou um valor, mas será fiável?
Executamos novamente o seguinte código, mas agora inserimos como valor um espaço em branco (” “) e enviamos.
Resultado:
Todos os métodos detectaram como valido um espaço em branco. Isto significa que todos os métodos falharam, porque realmente um espaço em branco não é um valor aceitável
Que método efectivo podemos utilizar para que os valores:
- 0 (zero – integer)
- “0″ (zero – string)
- true (bool)
- ‘texto’ (string)
sejam detectados como não vazios e que os valores:
- variavel nao definida
- null
- false
- ‘ ‘ (espaço(s) em branco)
- array()
- ” (vazio)
sejam detectados como valores vazios?
Fácil!!! Com uma função de PHP bastante simples.
Analisemos o código da função e o respectivo código:
function is_empty($var, $allow_false = false, $allow_ws = false)
{
if(!isset($var) || is_null($var) || ($allow_ws == false && trim($var) == "" && !is_bool($var)) ||
($allow_false === false && is_bool($var) && $var === false) || (is_array($var) && empty($var)))
{
return true;
}
return false;
}
if(is_empty($_POST['preco'])){ $error = '1- Campo "Preço" é obrigatório'; }
else
{ $error = 'Valor detectado: ' . $_POST['preco']; }
?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Demo</title>
</head>
<body>
<form method="post">
<div>Preço: <input type="text" id="preco" name="preco" /></div>
<div><input type="submit" /></div>
</form>
<div><?php echo $error; ?></div>
</body>
</html>
Executamos o seguinte código, inserimos como valor um 0 (zero) e enviamos.
Resultado:
Executamos novamente o seguinte código, mas agora inserimos como valor um espaço em branco (” “) e enviamos.
Resultado:
Agora sim, o resultado foi o esperado.
Analisem bem esta função, porque se pode aplicar em muitas situações diferentes do exemplo que vos referi.
Até um próximo artículo.
Mais informação:
http://php.net/manual/en/function.empty.php