0
Hello guys I am trying to filter a value coming from an imput using strpos() function. This value must be a URL and must contain a small string defined by a list. However the filter is not working and I can’t find the error:
<?php
/* VERIFICO SE Há UM POST */
if(count($_POST) > 0) {
$erro = array();
$dados = array();
// filtro url ads
$filter_ads = array();
$filter_ads[0] = "galid=";
$filter_ads[1] = "gslid=";
$filter_ads[2] = "ghlid=";
$filter_ads[3] = "gplid=";
$filter_ads[4] = "gulid=";
$filter_ads[5] = "gllid=";
$filter_ads[6] = "gklid=";
$filter_ads[7] = "grlid=";
$filter_ads[8] = "gwlid=";
$filter_ads[9] = "gelid=";
/* PERCORRO TODOS OS CAMPOS */
foreach($_POST as $nome => $valor) {
/* VERIFICO SE NENHUM CAMPO EST?? VAZIO */
if(isset($valor) || !empty($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)) {
//Filtro o valor digitado
foreach ($filter_ads as $filter) {
if (strpos($valor, $filter)){
echo "Aceito";
} else {
$erro[$nome] = 'A <strong>URL</strong> inserida é inválida.';
}
}
}
// Insere os valores removendo todas as tags HTML e espaços em branco inseridas no começo e fim do valor
$dados[$nome] = trim(strip_tags($valor));
} else {
$erro[$nome] = "<span style='color:red;'>O campo <strong>".ucwords($nome)."</strong> n?o pode ficar vazio</span>";
}
}
}
// verifico se há algum erro
if(count($erro) == 0) {
$hostname = "localhost";
$usuario = "user_up";
$senha = "123456";
$DB = "user_teste";
$conn = new mysqli($hostname, $usuario, $senha);
if ($conn->connect_error) {
die('Falha ao estabelecer uma conex??o com o banco de dados: '.$conn->connect_error);
} else {
// VERIFICO SE EXISTE o BANCO DE DADOS, CASO n?o, ? criado automaticamente.
if(!$conn->select_db($DB)) {
$conn->query('CREATE DATABASE IF NOT EXISTS ' .$DB. ';');
$conn->select_db($DB);
}
// faz o mesmo com a tabela
$tabela = $conn->query('SHOW TABLES LIKE \'introads\'');
if($tabela->num_rows == 0) {
$conn->query(
"CREATE table introads(
id INT(11) AUTO_INCREMENT NOT NULL,
link1 VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);"
);
}
$campos = implode(", ", array_keys($dados));
$valores = implode("','", $dados);
$valores = "'".$valores."'";
$conn->query("INSERT INTO introads(".$campos.") VALUES (".$valores.")");
// SE TUDO ESTIVER OK, REDIRECIONO PARA UMA P??GINA DE SUCESSO
header('location:index.php');
}
}
}
?>
<form id="introAds" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<ul>
<li id='block1'>
<input type="text" name="link1" lang="pt" maxlength="400" value="<?php echo isset($dados['link1']) ? $dados['link1'] : ''; ?>" />
<?php if(isset($erro['link1'])) { ?>
<label class="erro" for="nome"><?php echo $erro['link1']; ?></label>
<?php } ?>
</li>
<li>
<input type="submit" id="enviar" value="Gravar" />
</li>
</ul>
</form>
how is the POST? post the code of the form that sends the values of the POST. And what is the result that is happening?
– Thomas Lima
Where "//filters the entered value" should return "Accepted" as true or "The entered URL is invalid" to false, but neither results.
– Valdiney Pereira
I need the script to take the value of the field that is a URL and check if any element in the filter list is contained in the URL, if it does return "I accept" if it does not return "The URL entered is invalid" . Form validation is OK and database entry is OK. Only the filter that is in trouble.
– Valdiney Pereira