Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1271
Sexo: Masculino

Conversão PHP4 para PHP5 - Notice: Undefined variable

18-01-2017 15:31

Olá! Estou convertendo meu código de PHP4 para PHP5, o PHP está habilitado para forçar a exibição de todos os erros, estão surgindo mensagens do tipo Notice: Undefined variable, que, pelo que li, não seriam erros, mas o sistema informando que as variáveis não foram iniciadas. Isso se pode resolver configurando o PHP para não exibir todos os erros, mas li que, se se fizer isso, outros erros podem não ser detectados, e estou resolvendo isso sanando o problema.

Encontrei a solução a partir deste link: http://www.portugal-a-programar.pt/foru ... -variable/, usando o código abaixo, informado ao final da página do link citado:

<?php $errlog1 = ""; // <- iniciar a variável if(isset($_GET['errolog'])) { if($_GET['errolog']==1) { $errlog1="O nome de utilizador ou a senha estão errados!"; } } ?>

Estou conseguindo resolver a maioria das situações com isso, mas, num código de validação de CNPJ, que postarei abaixo, há esta linha $RecebeCNPJ=${"Cnpj"};, com a variável Cnpj colocada de uma forma diferente, que não sei como adaptar.

Abaixo, segue o código, com a variável $RecebeCNPJ adaptada por mim. Como posso resolver isso em face de ${"Cnpj"}?

<?php $var_Cnpj = "";if(isset($Cnpj)){$var_Cnpj=$Cnpj;} //Função que calcula CNPJ CalculaCNPJ($var_Cnpj); //CalculaCNPJ($Cnpj); function CalculaCNPJ($var_Cnpj) //function CalculaCNPJ($Cnpj) { $RecebeCNPJ=${"Cnpj"}; $s=""; for ($x=1; $x<=strlen($RecebeCNPJ); $x=$x+1) { $ch=substr($RecebeCNPJ,$x-1,1); if (ord($ch)>=48 && ord($ch)<=57) { $s=$s.$ch; } } $RecebeCNPJ=$s; if (strlen($RecebeCNPJ)!=14) { return FALSE; } else if ($RecebeCNPJ=="00000000000000") { $then; return FALSE; } else { $Numero[1]=intval(substr($RecebeCNPJ,1-1,1)); $Numero[2]=intval(substr($RecebeCNPJ,2-1,1)); $Numero[3]=intval(substr($RecebeCNPJ,3-1,1)); $Numero[4]=intval(substr($RecebeCNPJ,4-1,1)); $Numero[5]=intval(substr($RecebeCNPJ,5-1,1)); $Numero[6]=intval(substr($RecebeCNPJ,6-1,1)); $Numero[7]=intval(substr($RecebeCNPJ,7-1,1)); $Numero[8]=intval(substr($RecebeCNPJ,8-1,1)); $Numero[9]=intval(substr($RecebeCNPJ,9-1,1)); $Numero[10]=intval(substr($RecebeCNPJ,10-1,1)); $Numero[11]=intval(substr($RecebeCNPJ,11-1,1)); $Numero[12]=intval(substr($RecebeCNPJ,12-1,1)); $Numero[13]=intval(substr($RecebeCNPJ,13-1,1)); $Numero[14]=intval(substr($RecebeCNPJ,14-1,1)); $soma=$Numero[1]*5+$Numero[2]*4+$Numero[3]*3+$Numero[4]*2+$Numero[5]*9+$Numero[6]*8+$Numero[7]*7+ $Numero[8]*6+$Numero[9]*5+$Numero[10]*4+$Numero[11]*3+$Numero[12]*2; $soma=$soma-(11*(intval($soma/11))); if ($soma==0 || $soma==1) { $resultado1=0; } else { $resultado1=11-$soma; } if ($resultado1==$Numero[13]) { $soma=$Numero[1]*6+$Numero[2]*5+$Numero[3]*4+$Numero[4]*3+$Numero[5]*2+$Numero[6]*9+ $Numero[7]*8+$Numero[8]*7+$Numero[9]*6+$Numero[10]*5+$Numero[11]*4+$Numero[12]*3+$Numero[13]*2; $soma=$soma-(11*(intval($soma/11))); if ($soma==0 || $soma==1) { $resultado2=0; } else { $resultado2=11-$soma; } if ($resultado2==$Numero[14]) { return TRUE; } else { return FALSE; } } else { return FALSE; } } } //Fim do Calcula CNPJ ?>

Grato.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17660
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Conversão PHP4 para PHP5 - Notice: Undefined variable

18-01-2017 15:55

Esse script de validação de CPNJ você mesmo postou em 2010 :)

Quanto ao erro o correto seria

$RecebeCNPJ=$Cnpj;

Para verificar se o CNPJ é válido ou não você tem que usar a seguinte linha:

//Função que calcula CNPJ if(CalculaCNPJ($var_Cnpj)=="1") { echo "CNPJ válido"; } else { echo "CNPJ inválido"; }

Isso porque quando o CNPJ é válido retorna 1

Você pode separar o bloco da função em um arquivo e chamar via include, tipo:

include("valida_CNPJ.php");

Segue o script de validação de CNPJ

<?php function CalculaCNPJ($Cnpj) { $RecebeCNPJ=$Cnpj; $s=""; for ($x=1; $x<=strlen($RecebeCNPJ); $x=$x+1) { $ch=substr($RecebeCNPJ,$x-1,1); if (ord($ch)>=48 && ord($ch)<=57) { $s=$s.$ch; } } $RecebeCNPJ=$s; if (strlen($RecebeCNPJ)!=14) { return FALSE; } else if ($RecebeCNPJ=="00000000000000") { $then; return FALSE; } else { $Numero[1]=intval(substr($RecebeCNPJ,1-1,1)); $Numero[2]=intval(substr($RecebeCNPJ,2-1,1)); $Numero[3]=intval(substr($RecebeCNPJ,3-1,1)); $Numero[4]=intval(substr($RecebeCNPJ,4-1,1)); $Numero[5]=intval(substr($RecebeCNPJ,5-1,1)); $Numero[6]=intval(substr($RecebeCNPJ,6-1,1)); $Numero[7]=intval(substr($RecebeCNPJ,7-1,1)); $Numero[8]=intval(substr($RecebeCNPJ,8-1,1)); $Numero[9]=intval(substr($RecebeCNPJ,9-1,1)); $Numero[10]=intval(substr($RecebeCNPJ,10-1,1)); $Numero[11]=intval(substr($RecebeCNPJ,11-1,1)); $Numero[12]=intval(substr($RecebeCNPJ,12-1,1)); $Numero[13]=intval(substr($RecebeCNPJ,13-1,1)); $Numero[14]=intval(substr($RecebeCNPJ,14-1,1)); $soma=$Numero[1]*5+$Numero[2]*4+$Numero[3]*3+$Numero[4]*2+$Numero[5]*9+$Numero[6]*8+$Numero[7]*7+ $Numero[8]*6+$Numero[9]*5+$Numero[10]*4+$Numero[11]*3+$Numero[12]*2; $soma=$soma-(11*(intval($soma/11))); if ($soma==0 || $soma==1) { $resultado1=0; } else { $resultado1=11-$soma; } if ($resultado1==$Numero[13]) { $soma=$Numero[1]*6+$Numero[2]*5+$Numero[3]*4+$Numero[4]*3+$Numero[5]*2+$Numero[6]*9+ $Numero[7]*8+$Numero[8]*7+$Numero[9]*6+$Numero[10]*5+$Numero[11]*4+$Numero[12]*3+$Numero[13]*2; $soma=$soma-(11*(intval($soma/11))); if ($soma==0 || $soma==1) { $resultado2=0; } else { $resultado2=11-$soma; } if ($resultado2==$Numero[14]) { return TRUE; } else { return FALSE; } } else { return FALSE; } } } //Fim do Calcula CNPJ $var_Cnpj = ""; if(isset($Cnpj)){ $var_Cnpj=$Cnpj; } //Função que calcula CNPJ if(CalculaCNPJ($var_Cnpj)=="1") { echo "CNPJ válido"; } else { echo "CNPJ inválido"; } ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1271
Sexo: Masculino

Re: Conversão PHP4 para PHP5 - Notice: Undefined variable

19-01-2017 10:19

Entendi. Obrigado. O código é antigo. Eu vi que já o havia postado. Detectei esse problema somente agora por estar, antes, com o PHP desatualizado. Vou ver o que você disse.

Sobre iniciar a variável, evitando as informações de Undefined variable e Undefined index, estou me baseando no código
que citei no princípio do tópico, e fiz assim:

<?php $var_pst_valor = ""; if(isset($_POST['valor'])){ $var_pst_valor=$_POST['valor']; } ?> <div><?php echo $var_pst_valor; ?></div>

Mas notei que isto também funciona:

<?php $_POST['valor'] = ""; if(isset($_POST['valor'])){ $_POST['valor']=$_POST['valor']; } ?> <div><?php echo $_POST['valor']; ?></div>

As duas formas estão corretas? As duas estão erradas? Se corretas parcialmente, há algo necessário ou desnecessário nelas?

Como estou convertendo de PHP4 para PHP5, desejo fazê-lo corretamente agora, para não ter de reescrever o código adiante.

Você pode esclarecer isso?

Grato.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17660
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Conversão PHP4 para PHP5 - Notice: Undefined variable

19-01-2017 10:32

Quando você faz isso

$var_pst_valor = "";

Você está definindo a variável com o valor vazio.

Já o seguinte trecho

if(isset($_GET['valor'])){ $var_pst_valor=$_GET['valor']; }

Faz com que se o valor enviado por GET for setado, atribua o valor a variável já criada antes.
Com isso, se não for enviado valor por GET $var_pst_valor será vazia. E se for enviado $var_pst_valor receberá o valor do GET.

Isso irá evitar o erro de undefined para $var_pst_valor
0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1271
Sexo: Masculino

Re: Conversão PHP4 para PHP5 - Notice: Undefined variable

19-01-2017 11:03

Entendi. Mas tem ocorrido de eu enviar um valor por $_POST (já aconteceu com $_GET e até $_SESSION), e, ao recebê-lo numa página que contém um formulário, ser exibida essa mensagem de erro quando a página é exibida, antes de ser dado o submit. E há outras situações que ocorre após o envio do formulário.

Achei interessante o conteúdo deste link: https://secure.php.net/manual/pt_BR/lan ... basics.php, que diz ser desnecessário inicializar a variável PHP, mas que seria uma ótima prática, justificando os motivos.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17660
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Conversão PHP4 para PHP5 - Notice: Undefined variable

19-01-2017 14:00

O melhor é sempre definir a variável. E você também pode usar o operador ternário onde você resolve tudo em uma só linha.

<?php isset($_GET['valor']) ? $valor = $_GET['valor'] : $valor = ""; echo $valor; ?>

0
A melhor hospedagem para o seu site HostGator!
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1271
Sexo: Masculino

Re: Conversão PHP4 para PHP5 - Notice: Undefined variable

25-01-2017 12:24

Entendi. Obrigado. Eu vou concluir o que tem de ser concluído no PHP4 e depois farei a conversão para o PHP5 com o meu código pronto. Vou voltar a este tópico depois. Pode ser?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17660
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Conversão PHP4 para PHP5 - Notice: Undefined variable

25-01-2017 12:31

Sem problema.
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado