Error filtering form values by comparing two arrays

1

I'm trying to filter the values of fields filled with an array, ie check if a string of an array is contained in any of the values coming from a form.

Problems:

  • Only the first field is successfully being filtered, the second and the third are not being recognized.
  • The second field does not accept accented words. I would like to fix it too.
  • I noticed that when calling a value referring to the array filled fields, it returns nothing. Example: $dados[2] , should return the value of the third field, since the values of the fields are passed as array. Correct me if I'm wrong.

Below is the script for review:

<?php

// trechos à serem COMPARADOS PARA O FILTRO
$filter_ads = array();
$filter_ads[0] = "alid=";
$filter_ads[1] = "slid=";
$filter_ads[2] = "hlid=";
$filter_ads[3] = "plid=";
$filter_ads[4] = "ulid=";
$filter_ads[5] = "llid=";
$filter_ads[10] = "aaa";  
$filter_ads[11] = "123";

// Campos preenchidos para teste
$_POST['link1'] = 'http://www.google.com.br?galid=1';
$_POST['descricao1'] = 'aaaa 1111 1';
$_POST['codigo1'] = '123aa1';

/* VERIFICO SE H? UM POST */
if(count($_POST) > 0) {
    $erro = array();
    $dados = array();  

    /* PERCORRO TODOS OS CAMPOS */
    foreach($_POST as $nome => $valor) {
        /* VERIFICO SE NENHUM CAMPO EST?? VAZIO */
        if (isset($valor) || !empty($valor) || !isset($valor) == '') {
            // procura por campo URL e verifica se foi digitado corretamente
            if ($nome == 'link1' && !preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $valor)) {
                $erro[$nome] = 'A <strong>URL</strong> inserida é inválida.'; 
            }
            // procura por campo descricao e verifica se foi digitado no formato "nome de 4 a 100 caracteres alfanuméricos, acentuados e espaços"
            elseif ($nome == 'descricao1' && !preg_match('/^[a-zA-Z\d_ ]{4,100}$/i', $valor)) {
                $erro[$nome] = '<strong>Descrição</strong> incorreta.'; 
            }
            // procura por campo codigo e verifica se foi digitado apenas com 6 algarismos
            elseif ($nome == 'codigo1' && strlen($valor) != 6) {
                $erro[$nome] = '<strong>Código</strong> incorreta.'; 
            }                   
        } else {
            echo "Todos os campos devem ser preenchidos!";  
        }

        // Prepara os valores para serem inseridos no BD removendo todas as tags HTML e espaços em branco inseridas no começo e fim do valor
        $dados[$nome] = trim(strip_tags($valor));                   

    }

    // verifico se h? algum erro
    if(count($erro) == 0) {

        echo "<span style='color:orange;weight:bold;'>VALORES DOS CAMPOS PREENCHIDOS PRA ANALISES:</span><br/>";    
        foreach ($dados as $X) {
            echo "<span style='color:green;'>".$X."</span><br/>";
        }

        echo "<br/><span style='color:orange;weight:bold;'>FILTRADOS COM SUCESSO:</span><br/>";

        foreach ($dados as $X) {
            foreach ($filter_ads as $filter) {
                if (strpos($X, $filter)){
                    echo "<span style='color:red;'>".$X."</span><br/>";
                }
            }
        }

        echo $dados[2]; // OBS: gostaria de saber também porque não mostra o valor referido do array

    }
}


?>
    
asked by anonymous 19.07.2016 / 00:02

0 answers