Walck 0 Denunciar post Postado Abril 28, 2009 Estou fazendo um sistema para importação de um file csv , mas me deparei com mais um problema coloquei uma condição que ao importar se na coluna estiver a palavra NORTE ele deve assumir que o valor seria 1 e gravar no bd e se na coluna estiver a palavra SUL ele deve assumir o valor como 2 .... Não sei se são os meus IF que estão dando problema ou se não estou conseguindo indicar a variavel corretamente por favor me ajudem , já li e reli o que fala o manual sobre if e else e não encontrei segue o codigo abaixo: ah, não esta dando erro algum apenas ele não obedece a troca que eu mandei... $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) { echo "<p>registro duplicado.</p>"; } else { if ($linha[2] == "NORTE") { $linha[2] = "1"; } else { if ($linha[2] == "SUL") $linha[2] = "2"; } $sql = "INSERT INTO $tabela (id, empresa, email, grupo_id, regiao_id, rand, status ) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '" . $linha[2] . "', '6', '$rand', '0')"; $result = mysql_query($sql) or die(mysql_error()); } } Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Abril 28, 2009 No CSV tá: "NORTE";"SUL" ou NORTE;SUL ? Se for o primeiro caso você precisa mudar o IF pra isso: ... if ($linha[2] == '"NORTE"') { ... Ou seja: precisa incluir as aspas na string de comparação. ;) Compartilhar este post Link para o post Compartilhar em outros sites
Walck 0 Denunciar post Postado Abril 28, 2009 Po cara como sempre você me dando mó força valew msm , entao está assim: NORTE;SUL ou seja sem as aspas...abraço cara eu to achando que precisaria ter isso '".$linha[2]."' no nome da variavel... será que é isso ?? No CSV tá: "NORTE";"SUL" ou NORTE;SUL ? Se for o primeiro caso você precisa mudar o IF pra isso: ... if ($linha[2] == '"NORTE"') { ... Ou seja: precisa incluir as aspas na string de comparação. ;) Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Abril 28, 2009 Olha só... Vou te dar uma sugestão. Sempre identa o código para ficar mais fácil de entender a lógica que está seguindo, principalmente por ter muitos ifs e elses. Refiz a identação e coloquei um elseif na linha } elseif ($linha[2] == "SUL") { Confere se a lógica que está seguindo está correta. <?php 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) { echo "<p>registro duplicado.</p>"; } else { if ($linha[2] == "NORTE") { $linha[2] = "1"; } elseif ($linha[2] == "SUL") { $linha[2] = "2"; } $sql = "INSERT INTO $tabela (id, empresa, email, grupo_id, regiao_id, rand, status ) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '" . $linha[2] . "', '6', '$rand', '0')"; $result = mysql_query($sql) or die(mysql_error()); } } ?> Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Walck 0 Denunciar post Postado Abril 28, 2009 isso que é estranho não da nenhum erro e imporat sem nenhum problema só que de jeito nehum ele consegue substituir NORTE PARA 1 E SUL PARA 2... ME AJUDEM HEHEHE Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Abril 28, 2009 Onde você define $linha[2] igual 1 ou 2, cria uma variável nova e usa ela lá onde você monta a query de INSERT Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Abril 28, 2009 Cara, faz um teste pra ver como está ficando o array: $linha = explode(';', $conteudo);// divide por coluna onde tiver ponto e virgula echo '<pre>'; print_r($linha); echo '</pre>'; exit; Ele vai imprimir o array com as posições. De repente o que pode estar acontecendo é que o NORTE ou SUL não estão na posição 2 e sim em outra posição. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Walck 0 Denunciar post Postado Abril 29, 2009 A situação continua estranha , matias_rezende valeu pela força então não é a posição errada pq ele consegue gravar no bd as palavras norte sul o que ele não consegue e achar norte e ao invés de gravar norte gravar 1.... ~TiuTalk~ amigão , cara fiz o que você me sugeriu mas não sei se fiz certo , o que passou acontecer foi gravar nda no bd como se fosse " "... nao sei se fiz certo o que você falou.... galera me ajuda por favor a descobrir q situação estranha é esta abraço Estou fazendo um sistema para importação de um file csv , mas me deparei com mais um problema coloquei uma condição que ao importar se na coluna estiver a palavra NORTE ele deve assumir que o valor seria 1 e gravar no bd e se na coluna estiver a palavra SUL ele deve assumir o valor como 2 .... Não sei se são os meus IF que estão dando problema ou se não estou conseguindo indicar a variavel corretamente por favor me ajudem , já li e reli o que fala o manual sobre if e else e não encontrei segue o codigo abaixo: ah, não esta dando erro algum apenas ele não obedece a troca que eu mandei... $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) { echo "<p>registro duplicado.</p>"; } else { if ($linha[2] == "NORTE") { $linha[2] = "1"; } else { if ($linha[2] == "SUL") $linha[2] = "2"; } $sql = "INSERT INTO $tabela (id, empresa, email, grupo_id, regiao_id, rand, status ) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '" . $linha[2] . "', '6', '$rand', '0')"; $result = mysql_query($sql) or die(mysql_error()); } } Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Abril 30, 2009 ... nao sei se fiz certo o que você falou.... galera me ajuda por favor a descobrir q situação estranha é esta abraço Mostre como você está fazendo, se não é impossível adivinharmos onde está o erro. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Walck 0 Denunciar post Postado Maio 1, 2009 ... nao sei se fiz certo o que você falou.... galera me ajuda por favor a descobrir q situação estranha é esta abraço Mostre como você está fazendo, se não é impossível adivinharmos onde está o erro. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif heheh verdade William não acredito que seja tão dificil não sei mais o que fazer para o array assumir o valor que eu estou passando se vier com SUL grava no bd com 2 e se vier como NORTE gravar no bd 1: $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) { echo "<p>registro duplicado.</p>"; } if($linha[2] == "NORTE") { $linha[2] = "1"; } if($linha[2] == "SUL") { $linha[2] = "2"; } $sql = "INSERT INTO $tabela (id, empresa, email, grupo_id, regiao_id, rand, status ) VALUES ('', '" . $linha[0] . "', '" . $linha[1] . "', '6', '". $linha[2] . "', '$rand', '0')"; $result = mysql_query($sql) or die(mysql_error()); } $k++; $t = $k-1; } Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Maio 1, 2009 Tente isso: $varDB = 'TESTE'; $linha[2] = trim($linha[2]); // Tira espaços ao redor de $linha[2] if($linha[2] == "NORTE") { $varDB = "1"; } else if($linha[2] == "SUL") { $varDB = "2"; } $sql = "INSERT INTO `".$tabela."` (`id`, `empresa`, `email`, `grupo_id`, `regiao_id`, `rand`, `status` ) VALUES (NULL, '" . $linha[0] . "', '" . $linha[1] . "', '6', '". $varDB . "', '".$rand."', '0')";Criei uma nova variável (como tinha dito antes)... Verifique se agora funciona, se não funcionar, dê echo no $sql e veja como a query está sendo montada e coloque aqui no fórum. Por ultimo, execute isso: var_dump($linha[2]); exit; Que vai te dizer exatamente como é a variavel $linha[2] ... Esse problema já era pra estar resolvido. :P Compartilhar este post Link para o post Compartilhar em outros sites
Walck 0 Denunciar post Postado Maio 2, 2009 Esse problema já era pra estar resolvido. :P CARACA!!!!! O problema era justamente estes malditos espaços: $linha[2] = trim($linha[2]); // Tira espaços ao redor de $linha[2] FUNCIONOU 100% ai desativei esta linha pra saber se o motivo de ter dado certo era por causa do espaços e batata quando desativei não deu certo, cara sem palavras pra te agradescer muuuuuuuuuuuito obrigado msm estava quase desistindo deste caminho.... abraço Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Maio 2, 2009 Eu suspeitei deles depois dos seus vários testes :P Tópico resolvido :) Compartilhar este post Link para o post Compartilhar em outros sites