Ir para conteúdo
Fórum Script Brasil

ShadowRider

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Sobre ShadowRider

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

ShadowRider's Achievements

0

Reputação

  1. Ola pessoal! Bom, vou tentar ser breve. Ao fazer o import de um ficheiro txt, se houver um asterisco no campo 'modelo' então vai ter de fazer um update e colocar o que está depois desse asterisco, no campo etiq_col ou 'observacoes'. Ex: 173150;FRED *etiq. c/ bolso ;1;M;1;932;FRANCISCO JOSE SANTOS FARIA;CAMISA;(A);VIADUTTO O 'FRED *etiq. c/ bolso' é o campo modelo e o 'VIADUTTO' o campo etiq_col. o objectivo é ficar: 173150;FRED ;1;M;1;932;FRANCISCO JOSE SANTOS FARIA;CAMISA;(A); c/ bolso Ou seja o que estava depois do asterisco desaparece e passa a ser a informação no campo etiq_col. Se não tiver o asterisco então faz o add à bd normalmente. Já tentei várias maneiras, mas não estou conseguindo resolver. alguém me poderia ajudar? O ficheiro import.php: if (isset($_FILES['arquivo'])) { $arquivo = $_FILES['arquivo']; // carrega o txt ignorando linhas vazias $file = file($arquivo['tmp_name'], FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // define os índices do .txt em ordem $indices = ['ref_reg', 'modelo', 'cor', 'tamanho', 'quant', 'num_cliente', 'cliente', 'tipo', 'tecido','etiq_col']; $size = sizeof($indices); // percorre as linhas do txt foreach ($file as $k => $v) { // remover tabs: $v = preg_replace('/\t/', '', $v); //tratar codificação de caracteres não utf-8 $v = utf8_encode($v); // quebra a linha no ponto e vírgula e remove o 'enter' no final $v = explode(';', rtrim($v, '\n')); // comparar se a quantidade de dados é igual a quantidade de índices if (sizeof($v) == $size) { $ok[] = array_combine($indices, $v); } else { echo "<pre>Quantidade de dados inadequada na linha: $k<br>"; print_r($file[$k]); echo '</pre>'; } } // rotina para montar query para inserção: if (isset($ok)) { // preparar dados pra query sql foreach ($ok as $k => $v) { foreach ($v as $key => $value) { // se o valor for numérico não coloca aspas if (is_numeric($value) || is_bool($value)) { $d[$key] = $value; } else { // se for string, fica entre aspas e escapa os caracteres especiais $d[$key] = "'" . $sqli->real_escape_string($value) . "'"; } // tratar o tamanho: if ($key == 'tamanho') { $d['t' . $value] = $v['quant']; } } // remove os índices tamanho e quant unset($d['tamanho'], $d['quant']); $inserts[] = $d; // reseta a variável $d $d = null; } //se tiver asterisco insere nos respectivos campos (.col / .etiq / .obs) foreach ($dados as $k => $v) { if(($dados[$k]['produto']== 'col.') || ($dados[$k]['produto'] == 'etiq.')){ $query1 = "UPDATE $table SET etiq_col = 'produto' WHERE cod_num = id"; $result1 = $sqli->query($query1); $dados[$k]['id'] = "<a href='?registos/notafiscal/{$dados[$k]['id']}' title='Gerar Nota Produto'>{$dados[$k]['id']}</a>"; } } // foreach ($inserts as $v) { $keys = array_keys(array_change_key_case($v, CASE_LOWER)); $query = "INSERT INTO $table(" . implode(', ', $keys) . ") VALUES\n (" . implode(',', $v) . ");"; // executa a query de inserção: $sqli->query($query); // verificar se houve falha: if($sqli->error){ die('<p class="error">Falha na inserção!<br>'.$sqli->error.'</p>'.$query); } } } }
  2. Olá wash. Uma parte do .txt já postei no post anterior. Aliás, aquelas 3 ou 3000 linhas iguais a essas são as que vão ser adicionadas às 2 tabelas da BD. Achei que o for não era a solução mais viável, por isso tentei de outra forma: $link = mysqli_connect("localhost", "root", "", "modelagem"); /* check connection */ if (mysqli_connect_errno()) { printf("A conexão falhou: %s\n", mysqli_connect_error()); exit(); } $arquivo=('registos.txt'); $separador = ","; // O que separa os resultados no arquivos TXT ? if(file_exists($arquivo)){ $fp=fopen($arquivo,'r'); while(!feof($fp)){ $line = trim(fgets($fp)); if (empty($line)) { continue; } $line = rtrim($arquivo, ';'); //remover o ';' que tens no fim de cada linha $array = explode($separador, $line); //separar por $separador $sql1 = "INSERT INTO nota_e (ref_reg, modelo, cor, tamanho, quant ,num_cli, cliente, colarinho, etiq_reg) VALUES ('" . $array[0] . "', '" . @$array[1] . "', '" . @$array[2] . "', '" . @$array[3] . "', '" . @$array[4] . "', '" . @$array[5] . "', '" . @$array[6] . "', '" . @$array[7] . "', '" . @$array[8] . "')"; $sql2 = "INSERT INTO nota_p (ref_num, mod_num, cor_num, tam_num, quant_num ) values('" . $array[0] . "','" . @$array[1] . "','" . @$array[2] . "','" . @$array[3] . "','" . @$array[4] . "')"; $resultado1 = mysqli_query($link,$sql1); $resultado2 = mysqli_query($link,$sql2); if(!$resultado1 || !$resultado2){ print "Falha na linha: " . $line; } } fclose($fp); print "Terminado"; No entanto, agora está a inserir apenas valores nulos = 0 nas tabelas. Como devo fazer?
  3. Ola pessoal. Preciso de uma função que insira todos os registos de um ficheiro .txt em 2 tabelas da base de dados. Já consegui fazer a inserção nas tabelas, mas com alguns erros. se puser so um registo no txt, a função insere correctamente em todos os campos das tabelas, mas se meter mais que um registo, já fica mal inserido, ficando alguns registos dentro dos mesmos campos. Tenho o seguinte código. $arquivo=('registos.txt'); if(file_exists($arquivo)){ $fp=fopen($arquivo,'r'); $conteudo = fread($fp,filesize($arquivo)); $separador = ","; // O que separa os resultados no arquivos TXT ? $array = explode($separador, $conteudo); $conta = count($array); for ($i=0; $i <= $conta; $i++) { $sql = "INSERT INTO nota_e (ref_reg, modelo, cor, tamanho, quant ,num_cli, cliente, colarinho, etiq_reg) VALUES ('" . $array[$i] . "', '" . @$array[$i + 1] . "', '" . @$array[$i + 2] . "', '" . @$array[$i + 3] . "', '" . @$array[$i + 4] . "', '" . @$array[$i + 5] . "', '" . @$array[$i + 6] . "', '" . @$array[$i + 7] . "', '" . @$array[$i + 8] . "')"; $resultado = mysqli_query($link,$sql); $i = $i + 9; } for ($i=0; $i <= $conta; $i++) { $sql1 = "INSERT INTO nota_p (ref_num, mod_num, cor_num, tam_num, quant_num ) values('" . $array[$i] . "','" . @$array[$i + 1] . "','" . @$array[$i + 2] . "','" . @$array[$i + 3] . "','" . @$array[$i + 4] . "')"; $resultado1 = mysqli_query($link,$sql1); $i = $i + 5; } if($resultado && $resultado1){ //for ($i=0; $i < $conta; $i++) { //$sql1 = "INSERT INTO nota_p (ref_num, mod_num, cor_num, tam_num, quant_num ) values('" . $array[$i] . "','" . @$array[$i + 1] . "','" . @$array[$i + 2] . "','" . @$array[$i + 3] . "','" . @$array[$i + 4] . "')"; //$resultado1 = mysqli_query($link,$sql1); print "Dados copiados com sucesso!"; //$i = $i + 4; //} }else{ print "Não foi possível copiar os dados do arquivo."; } //echo($conteudo); }else{ echo("Não foi possivel abrir o arquivo"); } No ficheiro arquivo.txt 167150, SLIM R, 3, 42, 2, 1122, ELEGANTEMAGEM - UNIPESSOAL LDª, 15, 3; 166760, PARKA, 1, 48, 2, 1122, ELEGANTEMAGEM - UNIPESSOAL LDª, 13, 2; 166760, PARKA, 1, 50, 2, 1122, ELEGANTEMAGEM - UNIPESSOAL LDª, 13, 2; Como faço para inserir todos correctamente sem que fiquem uns dentro de os mesmos campos e outros fora do campo correcto? Se puderem ajudar agradeço...
×
×
  • Criar Novo...