Blog da Softblue


Este artigo foi criado por Andre Milani.
Conheça o currículo completo do instrutor clicando aqui.

Tratando “variable is not defined” no PHP

Publicado em 15/10/2012 às 14:46:43 horas.

Compartilhe:    

A mensagem de erro variable is not defined é uma antiga conhecida de programadores PHP e está relacionada diretamente ao acesso a uma variável que não tenha sido inicializada com algum valor anteriormente. Ao receber dúvidas de vários alunos, resolvi comentar os casos recebidos e apresentar soluções.

Falta de definição de valor (caso simples)
Em um dos códigos que observei, um comando for era montado da seguinte forma para realizar uma somatória:

for($i=0; $i<10; $i++)
{
	$total += $i;
}

echo $total;

Este código resultará no erro variable is not defined pois a variável $total não foi inicializada antes de ser utilizada. Como a variável não foi inicializada, na primeira execução do bloco de código do comando for o compilador tentará atribuir para $total o resultado da operação nada + 0. Observe que para o compilador nada é diferente de 0, o que acarretará na inviabilidade de realizar a soma. Para solucionar este problema, basta atribuir um valor para a variável $total antes do comando for, da seguinte forma:

$total = 0;

for($i=0; $i<10; $i++)
{
	$total += $i;
}

echo $total;

Falta de definição de valor (caso register_globals)
O PHP possui um recurso conhecido como register globals, uma configuração no arquivo php.ini que permite que algumas variáveis sejam inicializadas pelo PHP. Vale a pena citar que este recurso tornou-se obsoleto a partir do PHP 5.3.0 e seu uso não é mais encorajado.

Alguns programadores que utilizam o register_globals tem o costume de acessar diretamente suas variáveis, da seguinte forma:

if($_REQUEST["minhaVar"] == "valor")
{
     ...
}

Até aí, tudo certo. Contudo, quando o programador migra seu código para outro servidor PHP, ou obtém um código deste tipo na web e o seu servidor não está configurado para utilizar o register_globals, o erro variable is not defined é exibido nas situações onde o código apresentado é executado e não há a variável minhaVar na requisição da página. Nestes casos, como o programador pegou o código de outro servidor onde o código já estava funcionando, ele tem dificuldades em entender o motivo que o código não executa em seu servidor. O motivo é: um dos servidores está com a register_globals habilitada, o outro não. Mas tem solução!

Solução 1: habilitar a register_globals

A solução mais simples para a maioria dos casos é habilitar o recurso de register_globals no PHP. Isto é fácil de ser feito e existe bastante documentação no site do PHP e no Google sobre este procedimento. Contudo, pode não ser viável, dependendo da versão do seu PHP. Neste caso, outra solução deve ser adotada.

Solução 2: tratando o código

É possível tratar no código o acesso das variáveis para que o acesso a elas quando não definidas seja realizado. Basta realizar um comando que verifica se a variável em questão foi setada ou não. O comando isset faz isso: ele verifica se determinada variável existe e pode ser acessada ou não. O mesmo código apresentado anteriormente poderia ser alterado para o seguinte formato:

if(isset($_REQUEST["minhaVar"]))
{
     if($_REQUEST["minhaVar"] == "valor")
     {
          ...
     }
}

Desta forma, somente se a variável $_REQUEST["minhaVar"] possuir algum valor é que o acesso a mesma será realizada dentro do bloco de código do primeiro if. Caso contrário, o acesso não será realizado, e a mensagem de erro não surgirá.

Vale a dica: é possível otimizar o comando if para escrevê-lo da seguinte forma:

if(isset($_REQUEST["minhaVar"]) && $_REQUEST["minhaVar"] == "valor")
{
     ...
}

O que ocorre nesta forma de comando if é que a segunda condição (a de acesso a variável) somente é realizada se a primeira condição do if for verdadeira. Ou seja, a variável somente será acessada se possuir algum valor.

Comentários

Amigo, utilize as técnicas apresentadas neste artigo para sua variável pg_id não apresentar mais a mensagem citada. Você pode utilizar o comando if(isset.... para isso!

Enviado em 29/10/2012 às 14:28:55 horas, por André Milani



Erro 404 - Página não encontrada!'; } ?>

Como Arruma Isso pode mim ajuda?
tbm fica mostrando no site Notice: Undefined index: pg_id in E:\Arquivos de Programas\EasyPHP 2.0b1\www\index.php on line

Enviado em 28/10/2012 às 18:25:15 horas, por www.l2falkun.com


Douglas, o PHP não possui um sistema muito parecido com as outras linguagens sobre declaração de variável ou variáveis tipadas. Basicamente, nós atribuímos um valor a uma variável, que se não estiver disponibilizada em memória, é criada automaticamente no momento da atribuição de algum valor. Por isso ela não pode ser acessada caso ainda não exista (não possua nenhum valor, ou esteja com o valor nulo).

Enviado em 16/10/2012 às 23:27:07 horas, por André Milani


beleza amigo foi de grande valia sua ajuda e resolveu meu problema, agora me explica so mais uma coisinha se não for abusa da vossa bondade, so para eu compreender melhor, aprendi uma vez que no PHP não era necessario declarar a variavel, neste caso o que fizemos não foi declarar e sim dar a ela um valor, estou certo?

Enviado em 15/10/2012 às 16:28:35 horas, por Douglas lundy santos


Douglas, a variável não ter sido definida é diferente da variável ter sido definida e estar com um outro valor para cair na opção default. Antes do seu switch você pode fazer o seguinte:

if(!isset($_GET['pg'])) {
    $_GET['pg'] = "";
}

Isto irá fazer com que a variável pg seja definida com o valor em branco (vazio) caso não tenha sido definida anteriormente, caindo no bloco default.

Enviado em 15/10/2012 às 16:12:04 horas, por André Milani


certo, mais no caso a minha variavel pg não atender nenhum case ela não deveria assumir o valor default? lembrando que esta mensagem do aparece quando entro no site, pois quando navego pelas opções ela some, pode me da alguma dica pra resolver esta mensagem de erro? abraços

Enviado em 15/10/2012 às 15:36:02 horas, por Douglas lundy santos


Douglas, aparentemente não foi definido nenhum valor para a posição pg em sua super-variável $_GET, ou seja, esta posição no array não existe.

Enviado em 15/10/2012 às 15:01:40 horas, por André Milani


no meu codigo abaixo demosntrado aparece a seguinte mensagen ( Notice: Undefined index: pg in C:\wamp\www\projeto_telemensagem\paginas.php on line 2 ) pode me ajudar me informando o que esta errado?
switch ($_GET['pg']){

case 'inicio':
include "inicio.php";
break;

case 'sobre':
include "sobre.php";
break;

default:
include ("inicio.php");
break;

}
?>

Enviado em 15/10/2012 às 14:57:48 horas, por Douglas lundy santos

Mailing List

Cadastre o seu e-mail para receber notícias e informações sobre novos cursos, atualizações e outras novidades da Softblue!

Diferenciais

Liberdade total
Estude quando e como quiser. Disponibilidade do conteúdo 24h por dia, 7 dias por semana.
Matrícula não expira
Pagamento único, sem mensalidades, e acesso vitalício a todo o conteúdo, mesmo após a conclusão do curso.
Cursos sempre atualizados
Acesso às atualizações dos cursos de forma automática.
Tire suas dúvidas
Suporte eficiente para esclarecer suas dúvidas no decorrer do curso.
Padrão de qualidade
Atendimento diferenciado e material de alta qualidade, feito por quem entende do assunto.

Certificado

Insira o código do certificado que deseja consultar:

Pagamento





Conheça todas as nossas formas de pagamento.


             Cursos  |   Perguntas  |   Sobre nós  |   Sorteios  |   Blog  |   Política de Privacidade  |   Contato Desde 2003.    
Todos os direitos reservados ®    
CNPJ 06.860.085/0001-64