ERROR Undefined variable [closed]

0

I have the following code snippet in a function and I get undefined variable error. Does anyone know how to end this error? I'm initializing it with null , even then the error appears.

  

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

At the time of 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
    }
    
asked by anonymous 05.07.2017 / 01:59

1 answer

2

What is happening is that you are declaring the variable $stringMascaraBin within the if function, so it will not work out of it, unless you set it as a global variable.

To fix, set the variable outside if , example:

$stringMascaraBin = null;
if ($_POST["mascara"] >= 8 && $_POST["mascara"] <= 30 || valida_mascara_decimal()) {
    
05.07.2017 / 02:46