toarelli Posted April 19, 2018 at 01:07 PM Report #610288 Posted April 19, 2018 at 01:07 PM (edited) Caros amigos. Estou com uma dúvida, que recorro ajuda dos amigos. Como faço para quando importar um ARQUIVO.TXT, o sistema possa ler linha-a-linha e comparar com o Banco de Dados, caso a linha do código no .TXT não for encontrada, não importa. Abaixo o código que escrevi para importar, funciona. <?php //Variável Passada da Página Anterior $cot_cotIdGet = isset($_GET['cotId']) ? $_GET['cotId'] : false; $cot_cotId = isset($_POST['cotId']) ? $_POST['cotId'] : $cot_cotIdGet; $cotNumeroGet = isset($_GET['cotNumero']) ? $_GET['cotNumero'] : false; $cotNumero = isset($_POST['cotNumero']) ? $_POST['cotNumero'] : $cotNumeroGet; //Função para importar Arquivo function Inserir($itens, Pdo $pdo){ $sts = $pdo->prepare("INSERT INTO cotItens(cotNumImport, codProdClie, cotQtde, cotVerTxt, cotNumero, cot_cotId) 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->bindValue(4, $itens[3], PDO::PARAM_STR); $sts->bindValue(5, $itens[4], PDO::PARAM_STR); $sts->bindValue(6, $itens[5], PDO::PARAM_STR); $sts->execute(); $sts->closeCursor(); $sts = NULL; } if (!empty($_FILES['arquivo'])) { $Pdo = new PDO("mysql:host=localhost; dbname=lojaweb", "root", ""); $file = fopen($_FILES['arquivo']['tmp_name'], 'r'); while (!feof($file)){ $linha = fgets($file); $itens = explode(';', $linha); $itens[] = '1'; $itens[] = $cotNumero; $itens[] = $cot_cotId; Inserir($itens, $Pdo); } echo '<div class="alert alert-info alert-dismissible"> <h4>Arquivo Importado com Sucesso!</h4> </div>'; //Redirecionando para Caixa de Importar Arquivo do Cliente echo '<meta http-equiv="refresh" content="3, URL=painel.php?exe=loja/importar_itensCot&cotNumero='.$cotNumero.'"" />'; } ?> Grato, Toarelli Edited April 19, 2018 at 01:35 PM by toarelli
M6 Posted April 20, 2018 at 08:42 AM Report #610295 Posted April 20, 2018 at 08:42 AM Na tua função "inserir" fazes um select count pela chave da tabela (ou campos que sejam relevantes) e vez se essa contagem te retorna 0 ou mais registos. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
toarelli Posted April 27, 2018 at 10:36 PM Author Report #610365 Posted April 27, 2018 at 10:36 PM Em 20/04/2018 às 05:42, M6 disse: Na tua função "inserir" fazes um select count pela chave da tabela (ou campos que sejam relevantes) e vez se essa contagem te retorna 0 ou mais registos. Caro M6 Como faria isso, esse é meu problema ?
toarelli Posted April 28, 2018 at 05:57 PM Author Report #610369 Posted April 28, 2018 at 05:57 PM olá amigos. tentei fazer desta forma abaixo, em partes deu certo. o sistema lê linha-a-linha e quando encontra encerra. O problema é que lê e grava até chegar na linha que não existe. como faço para ler primeiro, comparar e se depois estiver tudo correto grava no banco de dados. abaixo o código que usei: <?php session_start(); //Incluir a conexao com BD include_once("conexao.php"); //Receber os dados do formulário $arquivo_tmp = $_FILES['arquivo']['tmp_name']; //ler todo o arquivo .TXT para um array $dados = file($arquivo_tmp); //Variável criada apenas para Comparar linha-a-linha $number = "123057"; foreach($dados as $linha){ $linha = trim($linha); $valor = explode(',', $linha); echo '<pre>'; var_dump($valor); echo '</pre>'; $nome = $valor[0]; $email = $valor[1]; $usuario = $valor[2]; $senha = $valor[3]; //Aqui faço a leitura das linhas if($senha == $number){ echo '<pre>'; var_dump($linha); echo "Não Importado"; exit; echo '</pre>'; } else { //Insert no Banco de Dados $result_usuario = "INSERT INTO usuarios (nome, email, usuario, senha) VALUES ('$nome', '$email', '$usuario', '$senha')"; $resultado_usuario = mysqli_query($conn, $result_usuario); } } $_SESSION['msg'] = "<p style='color: green;'>Carregado os dados com sucesso!</p>"; header("Location: index.php"); O arquivo texto está assim: Beltrano, beltrano@celta.com.br, beltra, 123056 Ciclano, ciclano@celta.com.br, cicla, 123057 Fulano, fulano@celta.com.br, fulan, 123058 Como faço para ler tudo antes e só depois gravar ? Grato Toarelli
M6 Posted April 30, 2018 at 09:23 AM Report #610379 Posted April 30, 2018 at 09:23 AM Fazes dois ciclos. Um em que apenas lês a informação, por exemplo para um array, e depois outro onde fazes o loop pelo array e fazes o insert. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
HappyHippyHippo Posted April 30, 2018 at 09:52 AM Report #610380 Posted April 30, 2018 at 09:52 AM duas perguntas : - a tua base de dados é mysql ? - pretendes actualizar o registo caso este já exista ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
toarelli Posted April 30, 2018 at 05:47 PM Author Report #610388 Posted April 30, 2018 at 05:47 PM 7 horas atrás, HappyHippyHippo disse: duas perguntas : - a tua base de dados é mysql ? - pretendes actualizar o registo caso este já exista ? Caro amigo - a tua base de dados é mysql ? resposta: SIM estou usando MySql - pretendes actualizar o registo caso este já exista ? resposta: NÃO cada vez que Importar um arquivo é sempre uma Nova Importação. A cotação n.1001 - tem uma importação exclusiva A cotação n.5010 - tem uma importação exclusiva Apenas preciso comparar todos os campos por exemplo: o CÓDIGO no TXT é igual a do SISTEMA ==> IMPORTA. Se algum código no TXT não for igual a do sistema, não importa o arquivo. Infelizmente isso não consigo realizar.
HappyHippyHippo Posted April 30, 2018 at 06:38 PM Report #610389 Posted April 30, 2018 at 06:38 PM estas a dizer que caso exista o registo no ficheiro de texto com o identificador, por exemplo, 2010, e esse registo já existe na base de dados, mesmo que os dados que estejam no ficheiro seja diferente do que exista na base de dados, então será ignorado ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
toarelli Posted May 1, 2018 at 04:15 PM Author Report #610392 Posted May 1, 2018 at 04:15 PM 21 horas atrás, HappyHippyHippo disse: estas a dizer que caso exista o registo no ficheiro de texto com o identificador, por exemplo, 2010, e esse registo já existe na base de dados, mesmo que os dados que estejam no ficheiro seja diferente do que exista na base de dados, então será ignorado ? Amigo eu usei como exemplo. Na verdade seria assim: 2010, BORRACHA MACIA GRANDE,1000 código: 2010 descr.: BORRACHA MACIA GRANDE qtde.: 1000 Se o código 2010 que consta no TXT não constar no MySql, não importa o TXT
HappyHippyHippo Posted May 1, 2018 at 04:56 PM Report #610393 Posted May 1, 2018 at 04:56 PM o que significa para ti "existir no mysql" ? importa para que ? para a mesma tabela que verificas a sua "existência" ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
toarelli Posted May 2, 2018 at 10:13 AM Author Report #610398 Posted May 2, 2018 at 10:13 AM 17 horas atrás, HappyHippyHippo disse: o que significa para ti "existir no mysql" ? importa para que ? para a mesma tabela que verificas a sua "existência" ? Caro amigo Estou tentando escrever um sistema web de cotação. O usuário importa um .TXT com mais de 200 itens para serem cotados. Para não ter que digitar um-a-um, Importa um .TXT O .TXT é gerado de um sistema qualquer, muitas vezes abre um código no sistema, mas não no sistema web. Por isso preciso fazer a comparação. É onde estou tendo dificuldade.
HappyHippyHippo Posted May 2, 2018 at 10:17 AM Report #610399 Posted May 2, 2018 at 10:17 AM 3 minutes ago, toarelli said: Caro amigo Estou tentando escrever um sistema web de cotação. O usuário importa um .TXT com mais de 200 itens para serem cotados. Para não ter que digitar um-a-um, Importa um .TXT O .TXT é gerado de um sistema qualquer, muitas vezes abre um código no sistema, mas não no sistema web. Por isso preciso fazer a comparação. É onde estou tendo dificuldade. não respondenste a nenuhma questão levantada por mim ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
toarelli Posted May 2, 2018 at 11:44 AM Author Report #610400 Posted May 2, 2018 at 11:44 AM (edited) 1 hora atrás, HappyHippyHippo disse: não respondenste a nenuhma questão levantada por mim ... Amigo por exemplo: Arquivo .TXT <== gerado por algum sistema local, como: VB / Clipper, etc 101, Caderno Grande, 30 201, Caneta Azul, 50 301, Lápis Preto, 50 401, Borracha Grande, 30 501, Régua 30cm, 20 Cotação WEB - MySql 101, Caderno Grande, 30 201, Caneta Azul, 50 301, Lápis Preto, 50 401, Borracha Grande, 30 A linha com [501, Régua 30cm, 20] não consta no MySql, por isso não importa o TXT Esse é o meu problema que não consigo fazer a comparação entre o TXT e o MySql. O Arquivo TXT irá ser importado para a TABELA de cotação e não substituir a Tabela Produto existente no MySql. Edited May 2, 2018 at 11:47 AM by toarelli
HappyHippyHippo Posted May 2, 2018 at 01:28 PM Report #610401 Posted May 2, 2018 at 01:28 PM vamos lá ver uma situação que continuas a não responder: caso exista no ficheiro a infomração - 101, Caderno Grande, 30 e na base de dados: - 101. Batatas fritas, 1000000 o que é para fazer ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
toarelli Posted May 2, 2018 at 03:06 PM Author Report #610402 Posted May 2, 2018 at 03:06 PM (edited) 4 horas atrás, HappyHippyHippo disse: vamos lá ver uma situação que continuas a não responder: caso exista no ficheiro a infomração - 101, Caderno Grande, 30 e na base de dados: - 101. Batatas fritas, 1000000 o que é para fazer ? Amigo estou respondendo, ou talvez como explico não entenda. arquivo .TXT código.........: 101 descrição....: Caderno Grande quantidade.: 30 uni <== quantidade que o usuário deseja comprar no MySql código.........: 101 descrição....: Caderno Grande a quantidade não existe no MySql, isso só importa para comprar. Só preciso comparar no .TXT com o MySql o CÓDIGO e DESCRIÇÃO O Código e a Descrição, tem de estar IGUAL tanto vindo do .TXT em relação ao MySql, Caso não esteja alguém alterou em algum ponto, também não importa. Exemplo: TXT - cód/descr = 101, Caneta Azul MySql cód/desc = 101, Caneta Azulada não importa, tem erro . Edited May 2, 2018 at 06:16 PM by toarelli
HappyHippyHippo Posted May 3, 2018 at 07:25 AM Report #610410 Posted May 3, 2018 at 07:25 AM nesse caso terás de ter sempre duas acções sobre a BD para cada entrada do ficheiro: - ler o registo da base de dados - caso, não for encontrado, inserir agora ,no que toca à leitura do ficheiro, basta teres algo do géneno : $linhas = []; while (($linha = lerLinha($ficheiro)) !== false) $linhas[] = $linha; IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
toarelli Posted May 3, 2018 at 04:43 PM Author Report #610423 Posted May 3, 2018 at 04:43 PM 9 horas atrás, HappyHippyHippo disse: nesse caso terás de ter sempre duas acções sobre a BD para cada entrada do ficheiro: - ler o registo da base de dados - caso, não for encontrado, inserir agora ,no que toca à leitura do ficheiro, basta teres algo do géneno : $linhas = []; while (($linha = lerLinha($ficheiro)) !== false) $linhas[] = $linha; Caro amigo. Por favor, me perdoa, me desculpa e imploro que tenha paciência. Infelizmente não consegui entender, por favor teria algum exemplo para entender. Essa parte: $linhas = []; while (($linha = lerLinha($ficheiro)) !== false) $linhas[] = $linha; lerLinha <== seria uma função, como a crio
HappyHippyHippo Posted May 3, 2018 at 07:11 PM Report #610425 Posted May 3, 2018 at 07:11 PM se tomares o código que apresentaste acima, seria o ciclo foreach que itera o array com as linhas lidas do ficheiro IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
toarelli Posted May 3, 2018 at 10:20 PM Author Report #610428 Posted May 3, 2018 at 10:20 PM 3 horas atrás, HappyHippyHippo disse: se tomares o código que apresentaste acima, seria o ciclo foreach que itera o array com as linhas lidas do ficheiro apenas uma pergunta: while (($linha = lerLinha($ficheiro)) !== false) lerLinha <== vem da onde, como faço nessa parte, isso não entendi.
HappyHippyHippo Posted May 4, 2018 at 08:45 AM Report #610435 Posted May 4, 2018 at 08:45 AM era um exemplo de forma a perceberes o que fazer como disse anteriormente, é o que tens no teu código como o ciclo que itera as linhas lidas do teu ficheiro IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now