Notice: Undefined variable ou Undefined index
Nesse artigo irei explicar o que significa a mensagem do PHP “Notice: Undefined variable ou Undefined index” e como evitar esse tipo de erro.
Para entender esse tipo de mensagem, observe o exemplo abaixo:
Executando esse script, que valor deve conter a variável $x?
Você deve responder, impossível dizer, não sei qual é o valor da variável $y. Para o PHP a resposta é a mesma, para ele está sendo feito a seguinte operação internamente:
A maneira correta e fazer a seguinte operação:
ou
Toda vez que é feita uma operação com uma variável "valor indefinido" o PHP exibe a mensagem Notice: Undefined variable.
Muitas vezes os nossos problemas de programação são mais complexos, pois estamos trabalhando com variáveis passadas por SESSION, GET, POST e outros métodos, para trabalhar dessa forma e necessário avaliar a condição da variável, por exemplo:
Esse script verifica se a variável existe, se a variável não existir é atribuído zero.
Pode ocorrer o mesmo erro quanto estamos trabalhando com arrays e tentamos acessar uma posição que não existe, por exemplo:
No script acima estou tentando acessar o índice "email" no array, esse índice não existe e o PHP exibe a mensagem Notice: Undefined index email.
Você pode fazer a seguinte afirmação: "Já programei assim em PHP e nunca apareceu esse erro!".
O que acontece é que essas notificações de erros podem ser configuradas no PHP.INI, muitos programadores em ambiente de desenvolvimento deixam configurado para exibir todos os erros e em ambiente de produção deixam configurado para não exibir os erros de notificação.
Para configurar o PHP.INI para mostrar todos os erros, você deve deixar a cláusula error_reporting da seguinte forma:
Para configurar o PHP.INI para não exibir as mensagens de notificação você deve deixar da seguinte forma:
Em outras linguagens de programação uma variável não inicializada pode conter qualquer coisa, no PHP é considerado como nulo ou como 0 em uma operação aritmética.
Além disso, é mais rápido escrever:
do que
Em casos extremos você pode usar o @ para ocultar as mensagens de notificação.
Eu considero esse método muito rigoroso, então é melhor fazer o que você acha melhor. Essas notificações podem ajudar durante o desenvolvimento, para detectar determinados erros.
Referência:
http://frederic.bouchery.free.fr/?2004/10/12/22-Notice-Undefined-Variable-Ou-Index
Patrick Espake
Blog: www.patrickespake.com
Para entender esse tipo de mensagem, observe o exemplo abaixo:
<?php $x = $y + 10; ?>
Executando esse script, que valor deve conter a variável $x?
Você deve responder, impossível dizer, não sei qual é o valor da variável $y. Para o PHP a resposta é a mesma, para ele está sendo feito a seguinte operação internamente:
<?php $x = valor indefinido + 10; ?>
A maneira correta e fazer a seguinte operação:
<?php $y = 5; $x = $y + 10; ?>
ou
<?php $y = 0; $x = $y + 10; ?>
Toda vez que é feita uma operação com uma variável "valor indefinido" o PHP exibe a mensagem Notice: Undefined variable.
Muitas vezes os nossos problemas de programação são mais complexos, pois estamos trabalhando com variáveis passadas por SESSION, GET, POST e outros métodos, para trabalhar dessa forma e necessário avaliar a condição da variável, por exemplo:
<?php if (!isset($y)) { $y = 0; } ?>
Esse script verifica se a variável existe, se a variável não existir é atribuído zero.
Pode ocorrer o mesmo erro quanto estamos trabalhando com arrays e tentamos acessar uma posição que não existe, por exemplo:
<?php $info_funcionario = array( "nome" => "Patrick Espake", "profissao" => "Programador" ); echo $info_funcionario["email"]; ?>
No script acima estou tentando acessar o índice "email" no array, esse índice não existe e o PHP exibe a mensagem Notice: Undefined index email.
Você pode fazer a seguinte afirmação: "Já programei assim em PHP e nunca apareceu esse erro!".
O que acontece é que essas notificações de erros podem ser configuradas no PHP.INI, muitos programadores em ambiente de desenvolvimento deixam configurado para exibir todos os erros e em ambiente de produção deixam configurado para não exibir os erros de notificação.
Para configurar o PHP.INI para mostrar todos os erros, você deve deixar a cláusula error_reporting da seguinte forma:
error_reporting = E_ALL
Para configurar o PHP.INI para não exibir as mensagens de notificação você deve deixar da seguinte forma:
error_reporting = E_ALL & ~E_NOTICE
Em outras linguagens de programação uma variável não inicializada pode conter qualquer coisa, no PHP é considerado como nulo ou como 0 em uma operação aritmética.
Além disso, é mais rápido escrever:
<?php echo $_GET['id']; ?>
do que
<?php if isset($_GET['id'])) echo $_GET['id']; ?>
Em casos extremos você pode usar o @ para ocultar as mensagens de notificação.
<?php echo @$_GET['id']; ?>
Eu considero esse método muito rigoroso, então é melhor fazer o que você acha melhor. Essas notificações podem ajudar durante o desenvolvimento, para detectar determinados erros.
Referência:
http://frederic.bouchery.free.fr/?2004/10/12/22-Notice-Undefined-Variable-Ou-Index
Patrick Espake
Blog: www.patrickespake.com
po, legal!
é algo que uso a muito tempo nos meus scripts.
outra coisa que faço também é na hora que faço essa verificação, por exemplo
Eu aproveito o if e checo se a variável está vazia.
Como geralmente os gets e posts eu utilizo para algum tratamento importante, como formulários, assim detecto logo de cara campos não setados ou vazios, evitando muitas linhas de comando que seriam utilizadas para nada.
é algo que uso a muito tempo nos meus scripts.
outra coisa que faço também é na hora que faço essa verificação, por exemplo
<?php if isset($_GET['id'])) echo $_GET['id']; ?>
Como geralmente os gets e posts eu utilizo para algum tratamento importante, como formulários, assim detecto logo de cara campos não setados ou vazios, evitando muitas linhas de comando que seriam utilizadas para nada.
<?php if ( isset($_GET['id'])) && !empty($_GET['id']) ) echo $_GET['id']; ?>
06/07/2009 3:57pm
(~15 anos atrás)
for($h=1;$h<=count($horario);$h=$h + 1){
echo "<td width=25% class=textoGeral>";
if (($resultado[$n_res][0]==$equip[$n_eq])&&($resultado[$n_res][1]==$horario[$h])){
echo "Sala: ".$resultado[$n_res][2];
echo " : Professor: ".$resultado[$n_res][3];
echo "</td>";
$n_res++;
}else { //Caso ele não imprima nada, imprime um LINK com parametros.
$equ=urlencode($equip[$n_eq]);
$hor=urlencode($horario[$h]);
echo "<a href=cadastro.php?dt=$dtPlan&tr=$turno&nomeq=$equ&eq=$n_eq&hr=$hor>Reservar</a></td>";
} //Foi colocado na url Nomeq -> nome do equipamento e n_eq -> numero do equipamento
} //para distinguir equipamentos de mesmo nome.
echo "</tr>";
$n_eq++;
if ($n_eq>count($equip)) break;