Walck 0 Denunciar post Postado Abril 26, 2009 Bom dia Pessoal, Estou fazendo um sistema para importação de um csv de Clientes, só que me deparei com o seguinte problema , como este csv será atualizado é possivel que ele contenha um email que já esta inserido no bd, então gostaria de evitar iso da seguinte forma : Pensei assim faço um select pra ver todos e-mails que tenho cadastrados ai guardo isso em algum lugar , então quando eu for fazer este insert eu comparo se já esta neste "lugar" se tiver eu continuo e vou para o proximo se não eu adiciono no bd e neste "lugar" para evitar que seja inserido repetidamente ou que eu tenha que fazer um novo select... Não sei se fui claro se não fui me avissem que tento explicar melhor , vlaew pessoal segue o codigo como esta agora: $tabela = "teste"; //tabela do banco $arquivo = 'cat.txt';// aquivo a ver importado txt ou $arq = fopen($arquivo,'r');// le o arquivo txt $k = 0; while( $conteudo = fgets($arq) ){ if( $k > 0 and trim( $conteudo ) != '' ){ $rand = mt_rand() . "\n"; $linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula //$sql = mysql_query("select nome from teste"); // o select que pensei em fazer mais ai travei rs //while ($dados = mysql_fetch_array($sql)) { //$nome = $dados['nome'] // if ( $sql = "INSERT INTO $tabela (id, empresa, email, status, grupo, rand) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '0', '', '$rand')"; $result = mysql_query($sql) or die(mysql_error()); } $k++; $t = $k-1; } echo "quantidade de linhas importadas = $t"; ?> Valeuuu Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Abril 26, 2009 Faça um SELECT na tabela antes de inserir, caso encontre algum resultado você não insere... Exemplo: if (mysql_num_rows(mysql_query("SELECT * FROM `tabela` WHERE `coluna` = '".$linha[1]."'")) > 0) { // Já existe na tabela } else { // Não existe na tabela } ;) Compartilhar este post Link para o post Compartilhar em outros sites
Walck 0 Denunciar post Postado Abril 26, 2009 Po ~TiuTalk~ valeu msm a ajuda mas agora deu pau na minha cabeça, não consegui fazer com que ele verique se tem ou não no db, acho que o erro esta no local aonde eu coloquei o if pq ta dentro de um while sei lá heheheh PHP Parse error: syntax error, unexpected '{' in E:\home\anatomic\Web\painel\email\importa.php on line 30 o cod esta assim agora: $arq = fopen($arquivo,'r');// le o arquivo txt $k = 0; while( $conteudo = fgets($arq) ){ if( $k > 0 and trim( $conteudo ) != '' ){ $rand = mt_rand() . "\n"; $linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula if (mysql_num_rows(mysql_query("SELECT * FROM `teste` WHERE `email` = '".$linha[1]."'") > 0) { } else { $sql = "INSERT INTO $tabela (id, empresa, email, status, grupo, rand) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '0', '', '$rand')"; $result = mysql_query($sql) or die(mysql_error()); } } $k++; $t = $k-1; } echo "quantidade de linhas importadas = $t"; Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Abril 26, 2009 Errei ali em cima, a linha correta é essa: if (mysql_num_rows(mysql_query("SELECT * FROM `tabela` WHERE `coluna` = '".$linha[1]."'")) > 0) { Compartilhar este post Link para o post Compartilhar em outros sites
Walck 0 Denunciar post Postado Abril 26, 2009 Po cara sem palavras pra agradecer msm , to fazendo um sistema pra mailing que vai ficar show , pode ser até reinventar a roda mas a questão é que eu preciso de algumas personalizações que teria q desenvolver msm... E se alguem puder traduzir a logica desta linha , pra que ao invés de copiar eu aprenda eu agradeço ainda mais.... valew Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Abril 26, 2009 Pra você entender, poderia ser feito da seguinte forma: $sql = "SELECT * FROM `tabela` WHERE `coluna` = '".$linha[1]."'"; // Monta uma consulta MySQL $query = mysql_query($sql); // Executa a consulta $registros = mysql_num_rows($query); // Retorna o número de registros encontrados pela consulta if ($registros > 0) { // Ou seja: Verifica se encontrou algum registro ... -- Uma outra saída seria definir a coluna onde o e-mail é salvo como UNIQUE INDEX (indice único) o que não permitirá que você insira valores repetidos. ;) Você pode fazer isso com esse código SQL: ALTER TABLE `usuarios` ADD UNIQUE (`email`) Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Abril 26, 2009 Pode ainda criar um before insert trigger que checa se o new.nomeColuna já existe. Compartilhar este post Link para o post Compartilhar em outros sites
SoulDark 0 Denunciar post Postado Abril 27, 2009 Boa Tiutalk! Realmente sua resposta é ótima... Testei esses comandos aqui e foi que foi! Já a dica do eibon não me veio a calhar... :S Boa boa! :D Compartilhar este post Link para o post Compartilhar em outros sites