Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcio_123

Importação de arquivo xml para o banco de dados

Recommended Posts

E ai galera blz,

 

Estou usando esse arquivo para importar um determinado XML para o banco de dados, tudo certinho se alguem precisar.

 

<?php
include "config.php";
 
ini_set('default_charset', 'UTF-8');

/* PEGA O ARQUIVO XML */
        if (isset($_POST['enviar_xml'])) {          
        if (is_uploaded_file($_FILES['upl']['tmp_name'])) {
      	$xml = simplexml_load_file($_FILES['upl']['tmp_name']); /* Lê o arquivo XML e recebe um objeto com as informações */            
	}
}
 
/* GRAVA O XML NO BANCO DE DADOS */
$x = 0;
foreach ($xml as $contato){
    mysql_query("INSERT INTO nome_tabela (data_importacao, nome, email, idade, cidade, situacao, valor) 
					VALUES 
				('$contato->data_importacao', '$contato->nome', '$contato->email', '$contato->idade', '$contato->cidade', '$contato->situacao', '$contato->valor')");
    if(mysql_affected_rows() != -1){
       $x++;
    }
}
echo "Foram importados $x registros!";
?>

So estou com uma questão no primeiro campo da tabela data_importacao, para evitar que o arquivo seja importado 2x, como poderia no script acima colocar um ALERTA EX. o arquivo já foi importado nessa data, OU SEJA; se eu fiz a importação hoje, 06/05/2017 gostaria de colocar esse alerta pra evitar que o arquivo seja importado novamente.

 

Meu XML abaixo.

<?xml version="1.0" encoding="iso-8859-1"?>
<Newsletter> 
	<Contato>
		<data_importacao>06/05/2017</data_importacao>
		<nome>Ana Lima da Costa</nome>
		<email>ana@dominio.com</email> 
		<idade>15 anos</idade> 
		<cidade>Iguatu</cidade> 
		<situacao>ativo</situacao>
		<valor>750,00</valor>
	</Contato>
</Newsletter>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

não seria só fazer uma consulta pela data antes where data='$data'?

if(mysql_num_rows($sql) > 0){
    echo "bagaceira já cadastrada hoje, volte amanhã!";
}else{
    // tá liberado, aleluia, prossiga!
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

e qual a dúvida exatamente? já tem algo tentado? da mesma forma que fez um INSERT, só precisa fazer um SELECT buscando a data atual e testar se o retorno é maior que zero. no comentário anterior já passei o início da coisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

marsolim eu fiz assim o codigo, mas continua gravando mesmo ja havendo importação na mesma data

 

ini_set('default_charset', 'UTF-8');

/* PEGA O ARQUIVO XML */
        if (isset($_POST['enviar_xml'])) {          
        if (is_uploaded_file($_FILES['upl']['tmp_name'])) {
      	$xml = simplexml_load_file($_FILES['upl']['tmp_name']); /* Lê o arquivo XML e recebe um objeto com as informações */            
	}
}
 
/* SE JA EXISTE IMPORTAÇÃO NESSA DATA NÃO GRAVA */
$data = date("d/m/Y");
$sql = mysql_query("SELECT * FROM nome_tabela WHERE data = '$data' ");
if(mysql_num_rows($sql) == 1){
    echo "O arquivo já foi importado hoje, volte amanha!";
	
}else{

/* FAZ A GRAVAÇÃO DO XML NO BANCO */
    $x = 0;
foreach ($xml as $contato){

    mysql_query("INSERT INTO nome_tabela (data, nome, email, idade, cidade, situacao, valor) 
					VALUES 
				('$contato->data', '$contato->nome', '$contato->email', '$contato->idade', '$contato->cidade', '$contato->situacao', '$contato->valor')");
    if(mysql_affected_rows() != -1){
       $x++;
    }
}
	
/* MENSAGEM */
$mgs = "<b>$palavra</b> Inserido com Sucesso. Foram importados $x registros!";
echo "<table border='0' align='center' cellpadding='0' cellspacing='0' style='border: 1px solid $corcelula1;'>
  <tr>
   <td width='400' bgcolor='$corcelula2' align='center' class='titulos'>&nbsp;$mgs</td>
  </tr>
</table>
<br>
";
	} 
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

o nome da tabela é nome_tabela mesmo? o formato da data no banco é d/m/Y? normalmente é Y-m-d talvez tenha que mudar isso aí e outra que tá faltando informar timezone e locale que não é fundamental mas pra trabalhar corretamente com data e hora precisa informar

 

    header ("Content-type: text/html; charset=UTF-8");
    date_default_timezone_set("America/Sao_Paulo");
    setlocale(LC_ALL, 'Portuguese_Brazil.1252'); // ou setlocale(LC_ALL, 'pt_BR.utf-8') isso aqui depende do servidor;


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu tudo certo marsolim o que acontece agora é que antes o xml era um arquivo pequeno 10 linhas estava testando, agora é pra valer, tem mais de 50 linhas e não esta lendo. 

 

Mas quem precisar ler xml pequeno pode pegar o script acima esta 100%

 

Essa ai é uma linha, mas são varias.

<?xml version="1.0" encoding="utf-8"?>
<_Despesa xmlns="http://tempuri.org/">
<usuario>
<Login>ws_448</Login>
<Senha>ws_448_692</Senha>
</usuario>
<acao>Inserir</acao>
<listDespesa>
<Despesa>
<co_despesa>3</co_despesa>
<dt_referencia>2017-05-04</dt_referencia>
<de_orgao>fabrica</de_orgao>
<tp_despesa>VALOR PAGO - ORDINARIO</tp_despesa>
<nu_empenho>1874</nu_empenho>
<id_despesa>000000000002500</id_despesa>
<de_despesa>FOLHA PAGAMENTO DA FABRICA</de_despesa>
<dt_emissao>2017-05-04</dt_emissao>
<vl_despesa>13.947,47</vl_despesa>
<de_funcaoGoverno>Administracao</de_funcaoGoverno>
<de_subfuncaoGoverno>Administracao Geral</de_subfuncaoGoverno>
<co_programa>1</co_programa>
<de_programa>GESTAO ADMINISTRATIVA</de_programa>
<co_acao>2001</co_acao>
<de_acao>OUTROS/NAO APLICAVEL</de_acao>
<de_fonteRecurso>FUNDO</de_fonteRecurso>
<de_aplicacaoFixa>GERAL</de_aplicacaoFixa>
<de_modalidadeLic>OUTROS/NAO APLICAVEL</de_modalidadeLic>
<de_elemento>VENCIMENTOS E SALARIOS</de_elemento>
<hi_despesa>, FOLHA DE PAGAMENTO REFERENCIA 04/2017</hi_despesa>
</Despesa>
</listDespesa>
</_Despesa>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.