+1

Os Erros de PHP que Você Não Viu Ainda

criado por Éder Baum em 19/08/2005 9:19am
Notice: Undefined variable: teste in C:\Web\index.php on line 19

O mais popular de todos. É quando você usa uma variável que não foi definida tipo:

<?php
echo $teste;
?>

É como se você conversa-se com joão sem ele existir. Este erro é potencialmente perigoso, pois algum engraçadinho pode aproveitar-se e inserir valores de váriaveis no seu script através dom modos $_GET ou $_POST. Então simples, antes usar uma variável ela deve existir tipo:

<?php
$teste = “Olá Mundo”;
echo $teste;
?>

Notice: Use of undefined constant CONSTANTE - assumed 'CONSTANTE' in C:\Web\index.php on line 19

Igual ao 1º erro descrito, porém aqui ao invés de uma variável usamos uma constante que não foi definida.

Notice: Use of undefined constant one - assumed 'one' in C:\Web\index.php on line 19

É quando você chama um array elemento de um array assoociativo e não põem aspas no seu indexador, do tipo:

<?php
$array = array('one' => 1, 'two' => 2);
echo $array[one];
?>

Isto ocorre pois o PHP pensa que one seria uma constante que existe em seu script, então o correto seria assim:

<?php
$array = array('one' => 1, 'two' => 2);
echo $array[‘one’];
?>

Percebeu as aspas no final?

Notice: Undefined index: pages in C:\Web\index.php on line 19

É quando você chama um index que não existe em um array, tipo:

<?php
$array = array('one' => 1, 'two' => 2);
echo $array[‘four’];
?>

Notice: Undefined offset: 3 in C:\Web\index.php on line 19

Isto é porque você chamou um membro de um array que não foi definido, tipo:

<?php
$array = array('one' , 'two');
echo $array[3];
?>

Percebeu? Ahhh em caso de arrays onde a chave é numérica não presisa aspas :+D


Uhhhh, mas existem muitos outros que você vai ver no decorrer da coisa. Mas pra finalizar:

- Não se desespere pelo menos 90% dos scripts disponíveis pela net tem esses erros, então não estamos sozinhos neste barco.
- Dê uma olhada nesta página do PHP, que fala um pouco sobre a função error_reporting: http://br.php.net/manual/en/function.error-reporting.php
- Pra deixar você mais desesperado ainda caso use a classe Smarty, insira esta linha de código: $smarty->debugging = 1;
- Use em todos seus scripts de agora em diante a linha de código error_reporting(E_ALL), ou sete isto no php.ini, assim seus scripts de agora em diante sairão com menos erros


Espero que tenha ajudado!

Comentários:

Mostrando 1 - 10 de 16 comentários
Valeu pela dica, agora toda vez que eu tiver um escipt ele não fucniconar, vou abilitar essa função, provavelmemte ela me ajudar.
10/11/2005 7:50am (~18 anos atrás)

Coloquei nos meus script e nada apareceu mas foi bom saber valeu ai!!!!
12/10/2005 3:25pm (~18 anos atrás)

Cara mto bom voce ter posto isso, sempre achei muito desleixo nao receber os dados dos formularios com _POST ou _REQUEST, para mim isso eh coisa de subprogramadores, pois deixa o codigo muito instavel e muito inseguro! alias, onde estavam com a cabeca ao fazer variaveis globais!!!
15/09/2005 9:47am (~18 anos atrás)

Esse artigo é realmente ótimo!
Eu só queria aqui deixar uma minha opinião, muito pessoal: particularmente não me esquento muito com alguns tipos de notices, principalmente pelas notices de variáveis indefinidas. Se quizer usar isset() para checar se uma variável está definida tudo bem, qual o problema? ... E às vezes em alguns sistemas eu preciso mesmo checar isso, então algumas notices dessas eu costumo ignorar.
Uma outra coisa, que eu penso e que "o manual do php também pensa", é que nunca, nunca deixem o report de erros ligado no servidor de produção! Sertifiquem-se de que não há erros e depois desliguem o error reporting, não podemos prever quando o php irá reportar um erro, às vezes testamos tudo o que o sistema tem, entramos em todas as páginas, testamos tudo mas ... esquecemos de ver uma coisinha, uma paginasinha, uma opçãozinha, e vamos embora todos feliizes até que alguém entra lá onde esquecemos de testar e então o php reporta maravilhoisamente o erro, o tipo do erro, a linha do erro, talvez o nome de uma variável ... e zaz! Alguém de fora ficou sabendo várias coisas sobre nosso script!
Então eu sempre deixo o error report ligado, testo, corrijo erros, e depois quando coloco em produção deixo desligado. Se der um bug alguém vai me contar, me apontar o nome do arquivo php que não foi exibido, ou que tá com o bug, aí eu ligo o error reporting, corrijo e torno a desligar, dessa forma o erro foi detectado mas não mostrou ao mundo nenhuma informação do meu script.
Valeu
Marlon
09/09/2005 12:20pm (~18 anos atrás)

Diego Hellas disse:
Legal, pequero, simples, legalmesmo.
05/09/2005 3:39pm (~18 anos atrás)

João Seabra disse:
Éder,

Fiquei bolado agora, mas valeu pela dica!!

Abraços de seu colega de Barreiras!
Seabra
04/09/2005 2:46pm (~18 anos atrás)

Muito bom esse toque para os desenvolvedores. É de pessoas como vc´s que enviam artigos, tutoriais e outros, que o mundo do software livre precisa para se expandir ainda mais.

Valeu!!!
02/09/2005 8:25pm (~18 anos atrás)

Éder Baum disse:
leojurema, isto provavelmente ocorre pela diferença dos "HEADERS" enviados pela solicitação do navegador.
23/08/2005 12:51pm (~18 anos atrás)

Cara eu sempre uso e recomendo
o uso de error_reporting(E_ALL) por padrão em todos os casos pois recebendo os erros qdo vc está desenv é mais facil corrigir....
23/08/2005 9:31am (~18 anos atrás)

BOZO disse:
reparei que no IE aparecem mais erros que no FireFox. existe alguma diferençar por causa do navegador?
23/08/2005 8:47am (~18 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)