Help with role organization [closed]

1

I am developing an IP calculator, and now I need to find the first valid IP of the original network entered. I've separated my code into functions, which I think instead of helping, it got in the way. My problem is this: I have a function that displays mask and in this function I have the octets typed and separated (each octet is a string). I have a function that calculates the network ID, however, this function is called out of functions, since I need to pass through the mask parameter and the ip address. The function that displays the mask returns the mask and the function that displays the address returns the address, so I take those values in two variables and step when I call the ID function. Now, in order to calculate the first valid IP, I need the last octet (it is in the mask function), but I also need the mask and address parameters, since the first valid IP is the ID + 1 address (adding this in the last octet). The problem is time to get these values, since the octets are in the mask function.

My mask function

       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
        $stringMascaraBin = null; //inicializa a variavel de string da mascara binario

        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);


                foreach ($mascara_bin as $stringMascara) { //transforma em string o array de mascara binario
                    $stringMascaraBin = $stringMascaraBin . $stringMascara;
                }

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



            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;

                foreach ($mascara_binario as $stringMascara) { //transforma em string o array de mascara binario
                    $stringMascaraBin = $stringMascaraBin . $stringMascara;
                }

                return $stringMascaraBin; //retorna a string da mascara em binario
            }
        } else {
            echo "Formato de máscara inválido!";
        }
    }

The ID function

 function id_rede_original($ip_bin, $mascara_bin) {
        echo "ID rede original em decimal: &nbsp;";
        $id_original = $ip_bin & $mascara_bin;
        $decimal_id = long2ip(bindec($id_original));
        echo $decimal_id;
        echo "<br>";
        echo "ID rede original em binário: &nbsp;";
        echo $id_original;
    }

and Where do I call the ID function and the mask

 if ($metodo == "POST") {
        if (isset($_POST["calcula"])) {

            if (valida_endereco()) {
                $endereco_original_binario = exibe_endereco();
                echo "<br>";
                ?>
                <hr>
                <?php
                $mascara_original_binario = exibe_mascara();
                echo"<br>";
                classe();
                echo"<br>";
                id_rede_original($endereco_original_binario, $mascara_original_binario);
    
asked by anonymous 05.07.2017 / 16:27

1 answer

3

Some tips that can help you:

  • Observe your problem, and break the solution by grossly abstracting the data flow.

    • Create a responsible role by treating and adapting the variables passed by GET and POSTS to your system.

    • Separate the logical part of your system.

    • Separate the display portion of the system.

  • Note: You can create 3 classes to better separate these processes, eg flow:

    $requisicao = new prepararRequisicao();
    
    $calculadora = new calculadora();
    $calculadora->validaEndereco($requisicao);
    echo json_encode($calculadora->pegarResposta());
    
  • Whenever you notice that a complex function exists, it abstracts to a method.
  • Ex:

    if ($_POST["mascara"] >= 8 && $_POST["mascara"] <= 30) {
        // Faça alguma coisa...
    }
    

    Could turn:

    public function checarNotacaoCIDR($mascara) {
        if ($mascara >= 8 && $mascara <= 30) {
            // Faça alguma coisa...
        }
    }
    
  • Some programmers believe that repeating the same code more than twice in the same place is synonymous with the wrong thing. So avoid doing this:

    $octeto1 = str_split($mascara_bin[0]);
    $octeto2 = str_split($mascara_bin[1]);
    $octeto3 = str_split($mascara_bin[2]);
    $octeto4 = str_split($mascara_bin[3]);
    
    $bit_setado_octeto1 = verificarBit($octeto1);
    $bit_setado_octeto2 = verificarBit($octeto2);
    $bit_setado_octeto3 = verificarBit($octeto3);
    $bit_setado_octeto4 = verificarBit($octeto4);
    
  • Can be easily replaced by:

    foreach ($mascara_bin as $key => $value) {
        $octeto[$key] = str_split($value);
        $bitSetadoOcteto = verificarBit($octeto[$key]);
    }
    

    I hope you have helped;)

        
    05.07.2017 / 18:18