Remazela 6 Denunciar post Postado Janeiro 7, 2017 Caros amigos. Preciso de uma orientação dos amigos para poder fazer uma Importação de Arquivo .TXT para o sistema Web e estou com a seguinte dúvida. Tenho os seguintes campos no Arquivo .TXT: Código do Importe...: 1005 Código do Produto...: 105 Quantidade Produto.: 10 ========> Até aqui tudo bem. O que preciso é acrescentar mais 02 campos para gravar no Banco, ou seja: Código da Cotação.: 200 Código da Filial.......: 10 Abaixo meu Código que faz a importação do arquivo .TXT: <?php //Função para importar Arquivo .TXT function Inserir($itens, Pdo $pdo){ $sts = $pdo->prepare("INSERT INTO cotacaoItens(cotaNumImport, produtoId, cotaQtde) VALUES(?,?,?);"); $sts->bindValue(1, $itens[0], PDO::PARAM_STR); $sts->bindValue(2, $itens[1], PDO::PARAM_STR); $sts->bindValue(3, $itens[2], PDO::PARAM_STR); $sts->execute(); $sts->closeCursor(); $sts = NULL; } if (!empty($_FILES['arquivo'])) { $Pdo = new PDO("mysql:host=localhost; dbname=siscota", "root", ""); $file = fopen($_FILES['arquivo']['tmp_name'], 'r'); while (!feof($file)){ $linha = fgets($file); $itens = explode(';', $linha); Inserir($itens, $Pdo); } } ?> Como posso acrescentar os 2 campos a mais, para pesquisa no Banco, além dos campos do arquivo .TXT ? Grato, Renato Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Janeiro 7, 2017 De onde virão essas duas novas informações? Não entendi ao certo se elas já estão no arquivo ou virão de outro lugar. Explique melhor Compartilhar este post Link para o post Compartilhar em outros sites
gabrieldarezzo 255 Denunciar post Postado Janeiro 7, 2017 Adiciona mais dois ué.. function Inserir($itens, Pdo $pdo){ $sts = $pdo->prepare("INSERT INTO cotacaoItens(cotaNumImport, produtoId, cotaQtde, codCota, codFilial) VALUES(?,?,?,?,?);"); .... $sts->bindValue(4, $itens[3], PDO::PARAM_STR); //codCota $sts->bindValue(5, $itens[4], PDO::PARAM_STR); //codFilial E ai após pegar os campos $itens = explode(';', $linha); você faz isso: //Logo após puxar o array 'intens' adiciona outros... ex: $itens[] = 200; //codCota $itens[] = 10; //codFilial Compartilhar este post Link para o post Compartilhar em outros sites
Remazela 6 Denunciar post Postado Janeiro 7, 2017 Amigo Gabriel Muito Obrigado por sua ajuda, deu certo. Posso tirar mais uma dúvida com o amigo. O campos do Banco estão assim: `cotaItensId` int(10) NOT NULL AUTO_INCREMENT, `cotaId` varchar(10) DEFAULT NULL, `clienteId` varchar(11) DEFAULT NULL, `cotaNumero` varchar(255) DEFAULT NULL, `cotaNumImport` varchar(255) DEFAULT NULL, `produtoId` varchar(255) DEFAULT NULL, `cotaQtde` varchar(255) DEFAULT NULL, `cotaComenta` varchar(255) DEFAULT NULL, `cotaSubTotal` varchar(255) DEFAULT NULL, Eu consigo colocar os campos adicionais antes do explode ou tem de ser depois ? while (!feof($file)){ $linha = fgets($file); $itens = explode(';', $linha); $itens[] = $cotaId; $itens[] = $clienteId; $itens[] = $cotaNumero; Inserir($itens, $Pdo); } Grato, Renato Compartilhar este post Link para o post Compartilhar em outros sites
gabrieldarezzo 255 Denunciar post Postado Janeiro 7, 2017 Precisa ser depois... O explode vai criar o array a partir da linha do Loop while (!feof($file)){ Inclusive se pode ver o estado do array assim: $itens = explode(';', $linha); var_dump($itens); die(); Seria interessante tu trabalhar com array associativo, (é um gosto pessoal) Mas acredito que fica mais intuitivo, exemplo se tu tiver umas 500 colunas vai ficar maluquinho contando hehe.Se liga como ficaria: $linhaInsert = array( 'cotaItensId' => $itens[0] ,'cotaId' => $itens[1] ,'clienteId' => $itens[2] ,'codCota' => 200 ); Com array associativo facilita a leitura ao meu ver... (Obviamente precisa alterar tmb o Inserir.. ficando algo assim: function Inserir($linhaInsert, Pdo $pdo){ $sts = $pdo->prepare("INSERT INTO cotacaoItens(cotaNumImport, produtoId, cotaQtde) VALUES(:cotaNumImport,:produtoId,:cotaQtde);"); $sts->bindValue(':cotaNumImport', $linhaInsert['cotaNumImport'], PDO::PARAM_STR); $sts->bindValue(':produtoId', $linhaInsert['produtoId'], PDO::PARAM_STR); $sts->bindValue(':cotaQtde', $linhaInsert['cotaQtde'], PDO::PARAM_STR); $sts->execute(); $sts->closeCursor(); $sts = NULL; } (Repare que no bindValue, estou utilizando a forma associativa ':cotaNumImport' ao invés do ? Atualmente você pode enfrentar lentidão a respeito do 'problema' de n+1.. (Entenda lendo o post do @Beraldo:) http://rberaldo.com.br/o-problema-do-n-mais-1/ Exemplo completo em PDO: http://stackoverflow.com/questions/1176352/pdo-prepared-inserts-multiple-rows-in-single-query Compartilhar este post Link para o post Compartilhar em outros sites
gabrieldarezzo 255 Denunciar post Postado Janeiro 7, 2017 Outra coisa... Apesar de ser um .txt, acredito que é um arquivo estilo .csv... Nesse caso da uma olhada na função: http://www.php.net/fgetcsv As vezes ela abstrai algumas coisas Compartilhar este post Link para o post Compartilhar em outros sites