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
}
}
?>