Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Update dentro de um import php

$
0
0
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); } } } }

Viewing all articles
Browse latest Browse all 11336

Trending Articles