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'] = "<ahref='?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('<pclass="error">Falha na inserção!<br>'.$sqli->error.'</p>'.$query);
}
}
}
}
Pergunta
ShadowRider
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:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.