Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lucyan

[Resolvido] Contar, Agrupar e Inserir resultados de um Foreach

Recommended Posts

Boa Noite Pessoal!

 

Tenho um pequeno problema aqui e gostaria de contar com a ajuda do pessoal mais experiente!

 

O problema é o seguinte, tenho que inserir alguns dados no banco, dados que eu pego com um foreach (conexaoPDO). Estou fazendo o insert com o seguinte formato

 

"INSERT INTO tabela (coluna1, coluna2, coluna3,...) VALUES ($coluna[1], $coluna[2], $coluna[3],...) , ($coluna[1], $coluna[2], $coluna[3],...), ($coluna[1], $coluna[2], $coluna[3],...) etc"

 

Esses VALUES eu pego de um foreach. O problema é que existe um limite para o número de linhas que e dados que o MYSQL aceita simultaneamente, ai ele não inclui quando são muitos.

 

Um exemplo parecido é o seguinte:

 

<?php

$usuarios = array();
$usuarios[] = array('nome' => 'Thiago', 'email' => 'contato@thiagobelem.net');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');

// Início da consulta
$sql = "INSERT INTO `usuarios` (`id`, `nome`, `email`) VALUES";

// Para cada elemento de $usuários, faça:
foreach ($usuarios as $usuario) {
$nome = $usuario['nome'];
$email = $usuario['email'];

// Monta a parte consulta de cada usuário
$sql .= " (NULL, '{$nome}', '{$email}'),";
}

// Tira o último caractere (vírgula extra)
$sql = substr($sql, 0, -1);

// Executa a consulta
mysql_query($sql);

// Pega o número de registros inseridos
$cadastrados = mysql_affected_rows();

echo 'Usuários cadastrados: ' . $cadastrados;

?>

 

 

Como eu posso "agrupar" os dados do foreach, ou até mesmo colocar o insert la dentro, para que ele ao inves de inserir todos em um só insert ele faça um agrupamento e faça um insert a cada 5 avanços do loop, por exemplo?

 

vlw, obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta trabalhar com o for ao invés do foreach e coloca a sua var de consulta dentro do for e faça a matemática para saber quantas requisições/consultas serão necessárias para cadastrar 10 usuários ou 20.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente dessa forma e veja se funciona:

 

<?php

$usuarios = array();
$usuarios[] = array('nome' => 'Thiago', 'email' => 'contato@thiagobelem.net');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Ciclano', 'email' => 'ciclano@uol.com.br');

// Para cada elemento de $usuários, faça:
foreach ($usuarios as $usuario) {
  $nome = $usuario['nome'];
  $email = $usuario['email'];

  // Monta a parte consulta de cada usuário
  $sql = mysql_query("INSERT INTO usuarios (id, nome, email) VALUES ('', '$nome', '$email')");
}

// Pega o número de registros inseridos
$cadastrados = mysql_affected_rows();

echo 'Usuários cadastrados: ' . $cadastrados;

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, obrigado aos colegas pelas respostas!

 

Vinicius:

tenta trabalhar com o for ao invés do foreach e coloca a sua var de consulta dentro do for e faça a matemática para saber quantas requisições/consultas serão necessárias para cadastrar 10 usuários ou 20.

 

Vou dar uma estudada aqui no for, quando conseguir vou postar aqui!

 

Dárcio Gomes:

tente dessa forma e veja se funciona:

 

Dárcio, obrigado! Na realidade, enquanto não encontrei uma forma de inserir de "5 em 5" por exemplo, venho utilizando uma maneira próxima da que você sugeriu, colocando a query dentro do foreach. O problema é que ele insere de 1 em 1, repetindo muitas vezes a consulta, o que leva mais tempo. Como meu site tem muitas requisições, tenho receio que vá consumir demais memoria do apache e deixar a coisa toda mais lenta. Mas no momento, é assim que tenho feito.

 

Abraço aos amigos, qualquer sugestão fico no aguardo. Conseguindo, posto aqui a solução

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer uma transaction!

 

<?php

$data = Array(
   Array('nome'=> 'Nome 1', 'email'=> '1@email.com'),
   Array('nome'=> 'Nome 2', 'email'=> '2@email.com'),
   Array('nome'=> 'Nome 3', 'email'=> '3@email.com'),
   Array('nome'=> 'Nome 4', 'email'=> '4@email.com'),
   Array('nome'=> 'Nome 5', 'email'=> '5@email.com'),
   Array('nome'=> 'Nome 6', 'email'=> '6@email.com'),
   Array('nome'=> 'Nome 7', 'email'=> '7@email.com'),
   Array('nome'=> 'Nome 8', 'email'=> '8@email.com'),
   Array('nome'=> 'Nome 9', 'email'=> '9@email.com'),
   Array('nome'=> 'Nome 10', 'email'=> '10@email.com'),
   Array('nome'=> 'Nome 11', 'email'=> '11@email.com'),
);

$conn = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$stmt = $conn->prepare("INSERT INTO usuarios (nome, email) values(:nome, :email)");
$conn->beginTransaction();
array_map(array($stmt, 'execute'), $data);
$conn->commit();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Evandro! Vou dar uma olhada.

 

Mas essa operação tem alguma limitação quanto ao volume de dados que podem ser inseridos simultaneamente?

 

 

Você pode fazer uma transaction!

 

<?php

$data = Array(
   Array('nome'=> 'Nome 1', 'email'=> '1@email.com'),
   Array('nome'=> 'Nome 2', 'email'=> '2@email.com'),
   Array('nome'=> 'Nome 3', 'email'=> '3@email.com'),
   Array('nome'=> 'Nome 4', 'email'=> '4@email.com'),
   Array('nome'=> 'Nome 5', 'email'=> '5@email.com'),
   Array('nome'=> 'Nome 6', 'email'=> '6@email.com'),
   Array('nome'=> 'Nome 7', 'email'=> '7@email.com'),
   Array('nome'=> 'Nome 8', 'email'=> '8@email.com'),
   Array('nome'=> 'Nome 9', 'email'=> '9@email.com'),
   Array('nome'=> 'Nome 10', 'email'=> '10@email.com'),
   Array('nome'=> 'Nome 11', 'email'=> '11@email.com'),
);

$conn = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$stmt = $conn->prepare("INSERT INTO usuarios (nome, email) values(:nome, :email)");
$conn->beginTransaction();
array_map(array($stmt, 'execute'), $data);
$conn->commit();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas essa operação tem alguma limitação quanto ao volume de dados que podem ser inseridos simultaneamente?

 

Memória (RAM) física. Mas é gerenciado pelo SGDB.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, tentei adaptar minha função, mas não consegui fazer com que ela inserisse no banco usando este método. Vou postar aqui ela, para que você de uma olhada, as vezes é apenas um pequeno detalhe:

 

 

function SalvarLista(){
       if(isset($_POST['submeter'])){
           if(isset($_POST['usuarioID']) && $_POST['usuarioID'] != ''){            

               $usuarioID = $_POST['usuarioID'];
               $ListaID = $this->conexao->query("SELECT MAX(ListaId) FROM Lista");
               $LID = $ListaID->fetch();

               $lista = $LID[0] +1;                


             //Todos os dados vem de um unico input checkbox, por isso o explode mais adiante, mas isto está ok.
               if(isset($_POST['lista']) && $_POST['lista'] != 0){
                   $dados = $_POST['lista'];               

                  $sql = array();

                   foreach($dados as $dado){
                       $d = explode('/', $dado);
                       $data = 'date(now())';
                       $array = array('listaid' => $lista , 'usuario' => (int)$usuarioID, 'inteiro3' => (int)$d[0], 'inteiro4' => (int)$d[1], 'string5' => '$d[2]', 'string6' => '$d[3]', 'string7' => '$d[4]', 'string8'=> '$d[5]' , 'data' => $data );
                       array_push($sql, $array);
                   }
               }

               var_dump($sql);

//minha conexao está armazenada na variavel public $conexao pois esta função está em uma classe.

               $gravar = $this->conexao->prepare("INSERT INTO Lista (inteiro1, inteiro2, inteiro3, inteiro4, string5, string6, string7, string8, datadehoje9) VALUES  (:listaid, :usuario, :inteiro3, :inteiro4, :string5, :string6, :string7, :string8, :data)");
               $this->conexao->beginTransaction();
               array_map(array($gravar, 'execute'), $sql);
               $this->conexao->commit();                                                                         



           }
   }
   }//fim da função 

 

 

O que eu estava fazendo, que funciona, mas inclui um por um é o seguinte:

 

if(isset($_POST['submeter'])){
           if(isset($_POST['usuarioID']) && $_POST['usuarioID'] != ''){            

               $usuarioID = $_POST['usuarioID'];
               $ListaID = $this->conexao->query("SELECT MAX(ListaId) FROM Lista");
               $LID = $ListaID->fetch();

               $lista = $LID[0] +1;                

			//Todos os dados vem de um unico input checkbox, por isso o explode mais adiante, mas isto está ok.				
               if(isset($_POST['lista']) && $_POST['lista'] != 0){
                   $dados = $_POST['lista'];                 

                    foreach($dados as $dado){
                       $d = explode('/', $dado);

                       $sql = "INSERT INTO Lista(INSERT INTO Lista (inteiro1, inteiro2, inteiro3, inteiro4, string5, string6, string7, string8, datadehoje9) VALUES "; 

                       $sql .= "( ".$lista." ,".$usuarioID.", ".$d[0].", ".$d[1].", '".$d[2]."' , '".$d[3]."', '".$d[4]."', '".$d[5]."' , date(now()) )  ";
                       $gravar = $this->conexao->query($sql);
                   }
               }

           }
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

amigo... fiz um teste com o script que você mesmo fez, só modifiquei alguns detalhes e funcionou perfeitamente:

 

<?php

$server ="localhost"; 
$user="root";   
$password="";    
$dbname="teste";    
$conn = mysql_connect($server,$user,$password);
$db = mysql_select_db($dbname);


$usuarios = array();
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');

$sqlInject = "INSERT INTO teste (id, nome, email) VALUES ";
// Para cada elemento de $usuários, faça:
foreach ($usuarios as $usuario) {
  $nome = $usuario['nome'];
  $email = $usuario['email'];

  // Monta a parte consulta de cada usuário
  $sqlInject .= "('', '$nome', '$email'), ";
}

$sqlInject = substr($sqlInject, 0, -2);
$sql = mysql_query($sqlInject) or die(mysql_error());

// Pega o número de registros inseridos
$sql = mysql_affected_rows();

echo 'Usuários cadastrados: ' . $cadastrados;

?>

 

fiz um teste com até 15 linhas de inserção no banco.

veja se isso mesmo... :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dárcio, obrigado pela dica!

Eu estou fazendo de um modo semelhante, só que com a conexao pdo. Pelo que entendi deste exemplo, ele vai inserir com um insert todos os dados, certo? É mais ou menos isso que estou fazendo. Com até 30 e poucas linhas está ok. Acontece que há casos em que o usuário de meu site terá uma lista de mais de 400 resultados a sua disposição. Se o usuário resolver marcar todos no checkbox e enviar, ele não vai inserir no banco.

 

O que eu precisava era estudar uma maneira, talvez com o for, como disse nosso amigo anteriormente, de fazer com que ele monte a variavel $sql a cada 5 a 10 resultados do loop, assim em vez de 400 linhas em um insert, ele faria 40 inserts de 10 linhas cada vez, o que já é melhor do que 400 inserts^^

 

Eu vi algo semelhante ser usado em paginação de resultados, ou em divisão de resultados em colunas, mas ainda não consegui modificar para que ele monte o $sql com 5 a 10 loop, insira, monte outro, insira, e por ai vai...

 

Mas vlw pela ajuda aí!

abraço

 

 

amigo... fiz um teste com o script que você mesmo fez, só modifiquei alguns detalhes e funcionou perfeitamente:

 

<?php

$server ="localhost"; 
$user="root";   
$password="";    
$dbname="teste";    
$conn = mysql_connect($server,$user,$password);
$db = mysql_select_db($dbname);


$usuarios = array();
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');
$usuarios[] = array('nome' => 'Fulano da Silva', 'email' => 'fulano@email.com');

$sqlInject = "INSERT INTO teste (id, nome, email) VALUES ";
// Para cada elemento de $usuários, faça:
foreach ($usuarios as $usuario) {
  $nome = $usuario['nome'];
  $email = $usuario['email'];

  // Monta a parte consulta de cada usuário
  $sqlInject .= "('', '$nome', '$email'), ";
}

$sqlInject = substr($sqlInject, 0, -2);
$sql = mysql_query($sqlInject) or die(mysql_error());

// Pega o número de registros inseridos
$sql = mysql_affected_rows();

echo 'Usuários cadastrados: ' . $cadastrados;

?>

 

fiz um teste com até 15 linhas de inserção no banco.

veja se isso mesmo... :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguma mensagem ou aviso???

 

Depois de conectar com o banco, coloque esta linha

 

$this->conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dárcio, Vinicius, vlw pela ajuda!

 

Evandro, de certo!

 

Valeu pela ajuda, estou testando ainda pra ver se vai falhar em algum momento, mas até agora está ótimo, está inserindo mais de 400 por vez e rápidão!

 

Como eu tinha lhe disse, acho que era só um detalhesinho, alguma coisinha só. Dei uma revisada e refiz o código, trocando apenas a data, que não insere por parametro mas direto no insert agora, e está funcionando que é uma beleza!

 

Vou postar como ficou para a galera que estiver passando por um problema semelhante.

 

Mas me diga uma coisa Evandro, qual seria a diferença básica entre inserir várias linhas em um comando como eu estava fazendo e este meio que você me passou? Eu sei que o php.ini tem um limite de transferencia, até aumentei para 24M, mas não alterou em nada, e agora este método funcionou, pelo menos por enquanto. Qual seria a diferença? e em termos de consultas ao banco e desempenho do servidor? Consome menos? Faz menos consultas?

 

Vlw, abraço!

 

Segue o código como ficou:

 

function SalvarLista(){
       if(isset($_POST['submeter'])){
           if(isset($_POST['usuarioID']) && $_POST['usuarioID'] != ''){            

               $usuarioID = $_POST['usuarioID'];
               $ListaID = $this->conexao->query("SELECT MAX(ListaId) FROM Lista");
               $LID = $ListaID->fetch();

               $lista = $LID[0] +1;                 


             //Todos os dados vem de um unico input checkbox, por isso o explode mais adiante, mas isto está ok.
               if(isset($_POST['lista']) && $_POST['lista'] != 0){
                   $dados = $_POST['lista'];                           

                  $sql = array();

                   foreach($dados as $dado){
                       $d = explode('/', $dado);
                       $array = array('listaid' => $lista , 'usuario' => (int)$usuarioID, 'inteiro3' => (int)$d[0], 'inteiro4' => (int)$d[1], 'string5' => $d[2], 'string6' => $d[3], 'string7' => $d[4], 'string8'=> $d[5] );
                       array_push($sql, $array);
                   }
               }

               var_dump($sql);

//minha conexao está armazenada na variavel public $conexao pois esta função está em uma classe.
               $this->conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
               $gravar = $this->conexao->prepare("INSERT INTO Lista (inteiro1, inteiro2, interi3, inteiro4, string5, string6, string7, string8, datadehoje9) VALUES (:listaid, :usuario, :inteiro3, :inteiro4, :string5, :string6, :string7, :string8, date(now()) )");
               $this->conexao->beginTransaction();
               array_map(array($gravar, 'execute'), $sql);
               $this->conexao->commit();                                                                         



           }

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummm.. entendo, será q não alguma configuração do server?...

 

pois acabei de fazer um teste aqui, tanto no banco local quando no server online e inseriu 450 registros sem problema com o mesmo script que postei aí, e com conexão simples... :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummm.. entendo, será q não alguma configuração do server?...

 

pois acabei de fazer um teste aqui, tanto no banco local quando no server online e inseriu 450 registros sem problema com o mesmo script que postei aí, e com conexão simples... :huh:

 

 

Olha Dárcio, talvez seja alguma configuração do server, mas acho que não. Na verdade eu já consegui inserir 12.000 itens usando esta forma de inserção(quando precisei fazer backup de usuarios e resolvi fazer via php e não direto no banco), só que com o tempo o número máximo de inserções possíveis vai caindo e ele não insere mais. Comecei com 12.000 e no fim não ia mais que 100. Aí fui dar uma pesquisada e encontrei algo sobre back_log, que pelo que entendi é a lista de processos que o mysql vai acumulando conforme você vai requisitando ele. Por exemplo, minha tabela mysam de 12.000 itens no mysql, com o mesmo formato de inserts leva 30 segundos pra inserir (no meu pc).Via Mysql não da problema porque ele da o tempo de inserir. Mas via php é mais rapido. O mesmo processo via php insere quase instantaneamente todos estes registros. Primeiro achei bom, até começar a dar este problema. Até porque não é possivel, penso eu ele reduzir tanto o processo. Ai descobri sobre esse back_log.

 

Encontrei algumas definições, e esta aqui em pt:

 

"back_log é o número de requisições de conexões que o MySQL pode suportar. Isto entra em cena quando a thread principal do MySQL recebe MUITAS solicitações de conexões em um espaço curto de tempo. Eles tomam algum tempo (porém muito pouco) da a thread principal para conferir a conexão e iniciar uma nova thread. O valor back_log indica quantas requisições podem ser empilhadas durante este breve tempo antes do MySQL parar de responder a novas requisições. Você isó precisa aumentá-lo se espera um número alto de conexões em um curto período de tempo"

fonte: MySQL

 

Por isso que perguntei ao Evandro sobre as diferenças e vou continuar testando aqui, até porque meu site vai ter muito acesso a banco e quero estar prevenido.

 

vlw! :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí fui dar uma pesquisada e encontrei algo sobre back_log, que pelo que entendi é a lista de processos que o mysql vai acumulando conforme você vai requisitando ele. Por exemplo, minha tabela mysam de 12.000 itens no mysql, com o mesmo formato de inserts leva 30 segundos pra inserir (no meu pc).Via Mysql não da problema porque ele da o tempo de inserir. Mas via php é mais rapido. O mesmo processo via php insere quase instantaneamente todos estes registros. Primeiro achei bom, até começar a dar este problema. Até porque não é possivel, penso eu ele reduzir tanto o processo. Ai descobri sobre esse back_log.

 

Encontrei algumas definições, e esta aqui em pt:

 

"back_log é o número de requisições de conexões que o MySQL pode suportar. Isto entra em cena quando a thread principal do MySQL recebe MUITAS solicitações de conexões em um espaço curto de tempo. Eles tomam algum tempo (porém muito pouco) da a thread principal para conferir a conexão e iniciar uma nova thread. O valor back_log indica quantas requisições podem ser empilhadas durante este breve tempo antes do MySQL parar de responder a novas requisições. Você isó precisa aumentá-lo se espera um número alto de conexões em um curto período de tempo"

fonte: MySQL

 

 

Não encontrei nenhuma referência a backlogs nas minhas configurações.

 

Vamos esclarecer um ponto:

Eu sei que o php.ini tem um limite de transferencia, até aumentei para 24M, mas não alterou em nada, e agora este método funcionou, pelo menos por enquanto.

 

Não sei ao certo qual diretiva você alterou. Pelo que me lembro, as diretivas que fazem referência a tamanhos de arquivo controlam os arquivos que são recebidos por formulários, não lidam com dados do MySQL.

 

Abri meu arquivo my.cnf e o que encontrei de relevante foi

max_allowed_packet=16M

 

Segundo o manual, o valor padrão desta diretiva é de 1M.

 

Suponhamos que você tenha uma tabela com 10 campos, cujos valores tem em média 10 caracteres:

 

10 bytes por campo X 10 campos por linha = 100 bytes por linha

 

Sendo seu limite de 1M (Um pouco mais de um milhão) você pode inserir

1000000 / 100 = 10000 linhas por lote

 

De fato, quando precisei trabalhar com o DNE, os pacotes vieram divididos em grupos de aproximadamente 16 Mil registros que eram inseridos sem problemas.

 

 

Mas me diga uma coisa Evandro, qual seria a diferença básica entre inserir várias linhas em um comando como eu estava fazendo e este meio que você me passou?

 

Absolutamente... nenhuma.

 

Qual seria a diferença? e em termos de consultas ao banco e desempenho do servidor? Consome menos? Faz menos consultas?

 

Agora sim. Repostando o link, uma transaction coloca o banco em um estado de alerta, todas as consultas recebidas neste intervalo deixam o DB preparado para trabalhar, mas não solicitam que isso aconteça efetivamente. É como um estágio temporário.

 

Como o DB já sabe o que está por vir, o próprio já trata de alocar memória, espaço em disco, verificar integridade, consistência, enfim, arrumar a casa pra quando a coisa for realmente acontecer.

 

in  > begin transaction
out < DB em estado de alerta

in  > insert into tabela (campo1, campo2) values(valor1, valor2)
out < precisarei inserir uma linha na tabela 'tabela' cujos valores
     sao {'campo1': 'valor1', 'campo2': 'valor2'}

in  > insert into tabela (campo1, campo2) values(valor3, valor4)
out < precisarei inserir DUAS linhas na tabela 'tabela'. valores:
     [{'campo1': 'valor1', 'campo2': 'valor2'},{'campo1': 'valor3', 'campo2': 'valor4'}]

## Veja que o DB não EXECUTOU a ação do primeiro insert

in  > commit
out < Aplicando as alterações e saindo do estado de alerta

 

Tenho, ainda, um outro exemplo. Se não ficar totalmente claro, ou se desejá-lo, basta informar. Não vou postar por questão de brevidade do post.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pelas Informações Evandro! Esclareceram muita coisa sim, mas ainda vou me informar melhor, dar uma pesquisada por aí.

 

Quanto ao arquivo, desculpe a confusão, mas na pressa me confundi, não era o php.ini, e sim o httpd.conf do wamp claro, do apache.

o parametro é o mesmo que você citou,

 

Abri meu arquivo my.cnf e o que encontrei de relevante foi

max_allowed_packet=16M

 

coloquei 24M no meu. "max_allowed_packet = 24M"

 

Acho que ficou claro para mim, e está funcionando legal aqui.

 

Valeu! :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.