Ir para conteúdo
Fórum Script Brasil
  • 0

Update dentro de um import php


ShadowRider

Pergunta

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

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...