UNDEFINED VARIABLE ERROR

Asked

Viewed 180 times

0

I have the following code snippet in a function and I get returned indefinite variable error. Does anyone know how to end this error? I’m initiating her with null, still appears the error.

Notice: Undefined variable: stringMascaraBin in C: xampp htdocs calculator-ip calculator-ip.php on line 284

When returning the variable $stringMascaraBin.

function exibe_mascara() { //função pra exibir informações da máscara original da rede
        $mascara_bin = array("", "", "", ""); //array pra máscara em binário

        $conta_octeto = 0; //variável para contar os octetos da máscara
        $conta_bit = 0; // variável pra contar os bits da máscara
        if ($_POST["mascara"] >= 8 && $_POST["mascara"] <= 30 || valida_mascara_decimal()) { //condição pra validar o que o cara digitou
            if ($_POST["mascara"] >= 8 && $_POST["mascara"] <= 30) { //condição p testar se a máscara está em notação CIDR 
                for ($j = 0; $j < $_POST["mascara"]; $j++) { //laço para acrescentar "1" na máscara de acordo com a máscara CIDR
                    $mascara_bin[$conta_octeto] = $mascara_bin[$conta_octeto] . "1";
                    $conta_bit++; 
                    if ($conta_bit == 8 || $conta_bit == 16 || $conta_bit == 24) {//condição pra incrementar o octeto
                        $conta_octeto++;
                    }
                }

                $limite = 32 - $_POST["mascara"]; //conta pra saber quantos bits sobraram pra host
                for ($i = 0; $i < $limite; $i++) { //laço para acrescentar os bits de host, os zero's.
                    $mascara_bin[$conta_octeto] = $mascara_bin[$conta_octeto] . "0";
                    $conta_bit++;
                    if ($conta_bit == 8 || $conta_bit == 16 || $conta_bit == 24) {//condição pra incrementar o octeto
                        $conta_octeto++;
                    }
                }
                echo"<br>";
                echo"Máscara em binário: &nbsp;";

                for ($i = 0; $i < count($mascara_bin); $i++) {//exibir a máscara em binário
                    echo $mascara_bin[$i];
                }


                echo"<br>";
                echo"Máscara em notação CIDR: &nbsp;/".$_POST["mascara"]."<br>";
                echo"Máscara em decimal: &nbsp;";
                $mascara_decimal = array("", "", "", "");//array pra máscara em decimal
                for ($i = 0; $i < 4; $i++) {//laço pra exibir a máscara em decimal
                    echo bindec($mascara_bin[$i]);
                    $mascara_decimal[$i] = bindec($mascara_bin[$i]);
                    if ($i < 3) {
                        echo".";
                    }
                }
                //separa os octetos em arrays 
                $octeto1 = str_split($mascara_bin[0]);
                $octeto2 = str_split($mascara_bin[1]);
                $octeto3 = str_split($mascara_bin[2]);
                $octeto4 = str_split($mascara_bin[3]);


                //chamada da função wildcard
                echo "<br> Wildcard binário: &nbsp;";
                $octeto1_wil = wildcard($octeto1);
                echo ".";
                $octeto2_wil = wildcard($octeto2);
                echo ".";
                $octeto3_wil = wildcard($octeto3);
                echo ".";
                $octeto4_wil = wildcard($octeto4);
                echo "<br>";

                //inicializando as strings para os octetos
                $stringArrayF1 = null;
                $stringArrayF2 = null;
                $stringArrayF3 = null;
                $stringArrayF4 = null;

                //transformando os arrays de octetos wildcard em strings
                foreach ($octeto1_wil as $stringArray1) {
                    $stringArrayF1 = $stringArrayF1 . $stringArray1;
                }


                foreach ($octeto2_wil as $stringArray2) {
                    $stringArrayF2 = $stringArrayF2 . $stringArray2;
                }


                foreach ($octeto3_wil as $stringArray3) {
                    $stringArrayF3 = $stringArrayF3 . $stringArray3;
                }


                foreach ($octeto4_wil as $stringArray4) {
                    $stringArrayF4 = $stringArrayF4 . $stringArray4;
                }

                $aux = 0; //variável pra mudar a posição do vetor endereço
                $endereco_ip = explode(".", $_POST["endereco"]); //tirar os pontos do endereço digitado
                echo "Endereço de Broadcast: &nbsp;";
                //chamada da função de broadcast
                broadcast($stringArrayF1, $endereco_ip, $aux);
                $aux++;
                broadcast($stringArrayF2, $endereco_ip, $aux);
                $aux++;
                broadcast($stringArrayF3, $endereco_ip, $aux);
                $aux++;
                $ultimo_octeto = broadcast($stringArrayF4, $endereco_ip, $aux); //armazena o ultimo octeto de broadcast numa variavel


                echo "<br>Último IP válido: &nbsp;";
                $aux = 0;

                //chamada da função de ultimo ip valido
                UltimoIpValido($stringArrayF1, $endereco_ip, $aux, $ultimo_octeto);
                $aux++;
                UltimoIpValido($stringArrayF2, $endereco_ip, $aux, $ultimo_octeto);
                $aux++;
                UltimoIpValido($stringArrayF3, $endereco_ip, $aux, $ultimo_octeto);
                $aux++;
                UltimoIpValido($stringArrayF4, $endereco_ip, $aux, $ultimo_octeto);
            }



            if (valida_mascara_decimal()) { //chama a função de validar pra saber se está no formato correto
                $mascara_decimal = array("", "", "", ""); //array pra mascara em decimal
                $mascara_decimal = explode(".", $_POST["mascara"]); //adicionando a máscara digitada ao array de mascara decimal sem os pontos
                $mascara_binario = array("", "", "", "");//cria array pra mascara em binario
                echo "Máscara em decimal:&nbsp;";
                echo $_POST["mascara"]."<br>";//exibe a mascara em decimal
                echo "Máscara em binário:&nbsp;";
                for ($i = 0; $i < 4; $i++) {//laço pra transformar de decimal pra binario e armazenar no array mascara binario
                    $mascara_binario[$i] = str_pad(decbin($mascara_decimal[$i]), 8, "0", STR_PAD_LEFT); //transforma a posição i da mascara em decimal em binario e armazena na posição i da mascara em binário e adiciona 0 a esquerda caso o numero em binario n tenha preenchido  bits
                    if ($i < 4 && $i > 0) {
                        echo"."; //coloca os pontos nos octetos
                    }
                    echo $mascara_binario[$i]; //exibe a mascara binario
                }


                //separa os octetos em arrays
                $octeto1 = str_split($mascara_binario[0]);
                $octeto2 = str_split($mascara_binario[1]);
                $octeto3 = str_split($mascara_binario[2]);
                $octeto4 = str_split($mascara_binario[3]);


                //chama função pra saber quais bits estão setados
                $bit_setado_octeto1 = verificarBit($octeto1);
                $bit_setado_octeto2 = verificarBit($octeto2);
                $bit_setado_octeto3 = verificarBit($octeto3);
                $bit_setado_octeto4 = verificarBit($octeto4);

                //chama a função wildcard e adiciona o retorno numa variável
                echo "<br> Wildcard binário: &nbsp;";
                $octeto1_wil = wildcard($octeto1);
                echo ".";
                $octeto2_wil = wildcard($octeto2);
                echo ".";
                $octeto3_wil = wildcard($octeto3);
                echo ".";
                $octeto4_wil = wildcard($octeto4);


                //inicializa as strings com null
                $stringArrayF1 = null;
                $stringArrayF2 = null;
                $stringArrayF3 = null;
                $stringArrayF4 = null;

                //transforma os arrays dos octetos em strings
                foreach ($octeto1_wil as $stringArray1) {
                    $stringArrayF1 = $stringArrayF1 . $stringArray1;
                }


                foreach ($octeto2_wil as $stringArray2) {
                    $stringArrayF2 = $stringArrayF2 . $stringArray2;
                }


                foreach ($octeto3_wil as $stringArray3) {
                    $stringArrayF3 = $stringArrayF3 . $stringArray3;
                }


                foreach ($octeto4_wil as $stringArray4) {
                    $stringArrayF4 = $stringArrayF4 . $stringArray4;
                }


                echo "<br>";
                $aux = 0;
                $endereco_ip = explode(".", $_POST["endereco"]); //armazena na variavel endereço ip o que foi digitado pra usar na função broadcast
                echo "Endereço de Broadcast: &nbsp;";

                //chama a função broadcast passando os parâmetros pedidos
                broadcast($stringArrayF1, $endereco_ip, $aux);
                $aux++;
                broadcast($stringArrayF2, $endereco_ip, $aux);
                $aux++;
                broadcast($stringArrayF3, $endereco_ip, $aux);
                $aux++;
                $ultimo_octeto = broadcast($stringArrayF4, $endereco_ip, $aux); //armazena o último octeto em broadcast numa variavel ultimo octeto

                echo "<br>Último IP válido: &nbsp;";

                //chama a função de ultimo ip valido
                $aux = 0;
                UltimoIpValido($stringArrayF1, $endereco_ip, $aux, $ultimo_octeto);
                $aux++;
                UltimoIpValido($stringArrayF2, $endereco_ip, $aux, $ultimo_octeto);
                $aux++;
                UltimoIpValido($stringArrayF3, $endereco_ip, $aux, $ultimo_octeto);
                $aux++;
                UltimoIpValido($stringArrayF4, $endereco_ip, $aux, $ultimo_octeto);

                //soma a quantidade de bit setado de cada octeto pra mostrar a mascara em notação CIDR
                $cidr = $bit_setado_octeto1 + $bit_setado_octeto2 + $bit_setado_octeto3 + $bit_setado_octeto4;
                echo "<br>Máscara em notação CIDR: &nbsp;" . $cidr;

                $stringMascaraBin = null; //inicializa a variavel de string da mascara binario

                foreach ($mascara_binario as $stringMascara) { //transforma em string o array de mascara binario
                    $stringMascaraBin = $stringMascaraBin . $stringMascara;
                }
            }
        } else {
            echo "Formato de máscara inválido!";
        }

        return $stringMascaraBin; //retorna a string da mascara em binario
    }
  • 1

    What exactly is the error and on which line it occurs?

  • Error message "Notice: Undefined variable: stringMascaraBin in C: xampp htdocs calculator-ip calculator-ip.php on line 284" When returning the $stringMascaraBin variable.

  • 1

    So now put the whole code of the function, please.

  • Enter the full function code, also enter the variable content $mascara_binario.

  • The error happens because you are entering the ELSE and displaying the message echo "Formato de máscara inválido!"; and then you still want to return a variable that does not exist. Please review your code.

  • I put the commented code.. I don’t know if it’s clear enough, I’m new to programming and within this function I call several others. It is not entering ELSE because I put the valid mask format and if I entered Else, when I ran the code, the message would appear and n appears.

Show 1 more comment

1 answer

2


What is happening is that you are declaring the variable $stringMascaraBin within the function if, then it won’t work outside of it, unless you define it as a global variable.

To fix, set the variable outside the if, example:

$stringMascaraBin = null;
if ($_POST["mascara"] >= 8 && $_POST["mascara"] <= 30 || valida_mascara_decimal()) {
  • It worked, however, I use this value returned to find the network ID in another function. After I changed, you are no longer calculating the network ID. I made a test by printing the returned variable and n displays nothing. It is null,?

  • 1

    Just to complement: if It’s not a function, it’s a control structure. It is good not to confuse, because the concept of function does not apply in this case and can make you come to hasty conclusions.

  • @Deyci is probably not concatenating any value, put a echo within the foreach to test if the code is at least getting to it.

  • 1

    condition structure....

  • The error was the following, the function only returned if the mask was in decimal. Now I put back if it is in CIDR notation and it worked! It was inattention of mine. Thank you for your help!!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.