Ir para conteúdo

Arquivado

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

Carlos Antoliv

Como realizar Upload de conteúdo de XML no Banco de Dados....?

Recommended Posts

Caramba, Beraldo. Deu ruim!

 

Porque olha só...

vou postar o código comentado.

 

 

<?php 
/* Conectar com o banco de dados da aplicação */
mysql_connect('localhost', 'root', 'senha') or die('Erro ao conectar');
mysql_select_db("banco");
 
ini_set('default_charset', 'UTF-8');
 
       
        if (isset($_POST['enviar_xml'])) {
            
            
        if ( is_uploaded_file($_FILES['upl']['tmp_name'])) {
 
                /**A linha abaixo mostra o nome do aquivo que foi selecionado**/
            echo "<h1>" . "Arquivo XML: ". $_FILES['upl']['name'] ."  Selecionado com Sucesso!." . "</h1>";
 
            echo "<h2>Exibindo Fichas:</h2>";
 
//*************************************************
//pega outros campos que vem de um formulario
$nome = $_FILES['upl']['name'];
$usuario_sessao = $_POST["txt_pegaSessao"];
$pegaDataAtual = $_POST["pegaData"];
//***************************************************
    // essa linha resgata o que a pessoa setou no campo de upload
    $xml = simplexml_load_file($_FILES['upl']['tmp_name']);
  
    }}
         
$x = 0;
 
// foreach percorre e salva os campos abaixo
foreach ($xml->prestadorParaOperadora->loteGuias->guiasTISS->{'guiaSP-SADT'} as $prestador){
 
     mysql_query("INSERT INTO tabela(numeroGuiaPrestador, dataSolicitacao, codigoProcedimento, descricaoProcedimento, codigoTabela, nome_xml, fk_usuario_sessao, data_cadastro) 
         VALUES (
".$prestador->cabecalhoGuia->numeroGuiaPrestador.", 
'".$prestador->dadosSolicitacao->dataSolicitacao."', 
".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->codigoProcedimento.", 
'".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->descricaoProcedimento."',
".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->codigoTabela.", '.$nome.', '$usuario_sessao', '$pegaDataAtual')");
 
  
    if(mysql_affected_rows() != -1){
       $x++;
} }
 
echo "$x contatos importados com sucesso!";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando seu código do post #14...

 

 

foreach($_FILES['upl']['tmp_name'] as $file)
{
    echo "Arquivo: " . $file;
    $xml = simplexml_load_file(file]);
    var_dump($xml);
}

 

Acho que assim você vai entender o que eu quis dizer sobre fazer tudo dentro do foreach

É dentro desse foreach que você faz o outro foreach que busca as tags do xml

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, depois do Romário tu é cara! rsrs

 

Estou realizando os testes. Parece que está funcionando.

 

 

 

O CÓDIGO FICOU ASSIM:

 

 

****************************************************************************************************************************************

<?php
/* Conectar com o banco de dados da aplicação */
mysql_connect('localhost', 'root', 'senha') or die('Erro ao conectar');
mysql_select_db("banco");
ini_set('default_charset', 'UTF-8');
if (isset($_POST['enviar_xml'])) {
if ( is_uploaded_file($_FILES['upl']['tmp_name'])) {
/**A linha abaixo mostra o nome do aquivo que foi selecionado**/
echo "<h1>" . "Arquivo XML: ". $_FILES['upl']['name'] ." Selecionado com Sucesso!." . "</h1>";
echo "<h2>Exibindo Fichas:</h2>";
//*************************************************
$nome = $_FILES['upl']['name'];
$usuario_sessao = $_POST["txt_pegaSessao"];
$pegaDataAtual = $_POST["pegaData"];
//***************************************************
$file = simplexml_load_file($_FILES['upl']['tmp_name']);
}}
foreach($_FILES['upl']['tmp_name'] as $file)
{
echo "Arquivo: " . $file;
$xml = simplexml_load_file($file);
var_dump($xml);
$x = 0;
foreach ($xml->prestadorParaOperadora->loteGuias->guiasTISS->{'guiaSP-SADT'} as $prestador){
mysql_query("INSERT INTO tabela (numeroGuiaPrestador, dataSolicitacao, codigoProcedimento, descricaoProcedimento, codigoTabela, nome_xml, fk_usuario_sessao, data_cadastro)
VALUES (
".$prestador->cabecalhoGuia->numeroGuiaPrestador.",
'".$prestador->dadosSolicitacao->dataSolicitacao."',
".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->codigoProcedimento.",
'".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->descricaoProcedimento."',
".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->codigoTabela.", '.$nome.', '$usuario_sessao', '$pegaDataAtual')");
if(mysql_affected_rows() != -1){
$x++;
}
} }
echo "$x contatos importados com sucesso!";
?>
**********************************************************************************************************************************************
Só tem um detalhe que percebi. Por exemplo, dentro do xml, existe essa linha aqui:
- cabecalhoGuia->numeroGuiaPrestador
que representa o número da ficha do paciente. E cada paciente pode ter vários exames. A TAG que representa esses exames é essa:
- procedimentosExecutados->procedimentoExecutado->procedimento->codigoProcedimento
Aí, por exemplo, se na ficha
<numeroGuiaPrestador>123456789</numeroGuiaPrestador>
<codigoProcedimento>111111111</codigoProcedimento>
<codigoProcedimento>222222222</codigoProcedimento>
<codigoProcedimento>3333333333</codigoProcedimento>
No banco, grava assim:
123456789 - 111111111
a outras linhas que pertencem a ficha não está cadastrando. Em outra palavras, só pega o primeiro registro.
Estou tentando fazer com que fique assim:
123456789 - 111111111
123456789 - 222222222
123456789 - 333333333
Sem querer pedir de mais.
Isso, realmente, não sei prq não está pegando.
Já tentei de diversas maneiras. Criei vários arquivos só para testar. Já tentei utilizar várias classes para manipular o xml.
Dá só esse HELP aee.. rs...
:D :D :D :wacko: :wacko: :wacko: :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra melhorar, faltam duas coissas:

 

1. Fazer um só INSERT, depois do loop, como explico neste artigo. Vai melhorar bastante o desempenho.

 

2. Migrar pra MySQLi ou PDO, pois funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/

 

 

Sobre a estrutura do XML, isso não é meu forte. Abra um outro tópico com essa dúvida. Evite postar mais de uma dúvida no mesmo tópico. Pode atrapalhar futuras buscas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim u só INSERT? Vou ver o teu tutorial.

 

PDO estou estudando. Mas tenho que estudar mais, pois muda tudo.

Insert, select, update...em fim. Por isso ainda não apliquei.

Mas tô estudando. Muito show!

 

Tendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consulta dentro de loop piora muito o desempenho.

É o velho Problema do N+1

Costumamos falar mais sobre ele com SELECTs, mas qualquer consulta gasta tempo e CPU. Quanto menos fizer, melhor.

O ideal é enviar uma só consulta, com todos os dados

 

Noutras palavras, em vez disto:

 

INSERT INTO tabela(campos) VALUES(valores1);
INSERT INTO tabela(campos) VALUES(valores2);
INSERT INTO tabela(campos) VALUES(valores3);

 

Faça:

 

INSERT INTO tabela(campos) VALUES(valores1), (valores2), (valores3));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Upload Múltiplos de ARQUIVOS XML e upload Múltiplos de CONTEÚDOS de XML

 

Quero agradecer ao

Beraldo

por ter me ajudado a solucionar o problema de realizar upload Múltiplos de ARQUIVOS xml. Estou Muito feliz por isso.

 

Este tópico propoe o seguinte:

 

Como realizar Upload de conteúdo de XML no Banco de Dados....?

 

Com ajuda do Beraldo realizo upload Múltiplo de ARQUIVOS XML.

 

 

 

Código

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

<?php
/* Conectar com o banco de dados da aplicação */
mysql_connect('localhost', 'root', 'senha') or die('Erro ao conectar');
mysql_select_db("banco");
ini_set('default_charset', 'UTF-8');
if (isset($_POST['enviar_xml'])) {
if ( is_uploaded_file($_FILES['upl']['tmp_name'])) {
/**A linha abaixo mostra o nome do aquivo que foi selecionado**/
echo "<h1>" . "Arquivo XML: ". $_FILES['upl']['name'] ." Selecionado com Sucesso!." . "</h1>";
echo "<h2>Exibindo Fichas:</h2>";
$file = simplexml_load_file($_FILES['upl']['tmp_name']);
}}
//**************************************
$pegaDataAtual = $_POST["pegaData"];
//**************************************
$f = 0;
foreach($_FILES['upl']['tmp_name'] as $file)
{
$nome = $_FILES['upl']['name'][$f];
$usuario_sessao = $_POST["txt_pegaSessao"];
echo "<b>Arquivo:</b> " . $nome. "<br>";
$xml = simplexml_load_file($file);
//var_dump($xml);
$x = 0;
foreach ($xml->prestadorParaOperadora->loteGuias->guiasTISS->{'guiaSP-SADT'} as $prestador){
mysql_query("INSERT INTO tb_xml(numeroGuiaPrestador, dataSolicitacao, codigoProcedimento, descricaoProcedimento, codigoTabela, nome_xml, fk_usuario_sessao, data_cadastro)
VALUES (
".$prestador->cabecalhoGuia->numeroGuiaPrestador.",
'".$prestador->dadosSolicitacao->dataSolicitacao."',
".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->codigoProcedimento.",
'".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->descricaoProcedimento."',
".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->codigoTabela.", '$nome', '$usuario_sessao', '$pegaDataAtual')");
if(mysql_affected_rows() != -1){
$x++;
}
} $f++;}
"<br><br><br>";
echo "<br><span style='font-size:18px; color:#007700;'><b>$f</b> contatos importados com Sucesso!</span>"."<br><br>";
echo "<a href='xml_importar_upload.php'>- IMPORTAR MAIS XML</a>"."<br>";
echo "<a href='pg_principal'>- VOLTAR AO MENU PRINCIPAL</a>"."<br>";
?>

 

 

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

Mas para realizar oque é proposto pelo tópico, com ajuda do

hufersil

, resolvo o que é proposto, que é fazer o uploads múltiplos do CONTEÚDO do arquivo XML, encontra-se no tópico abaixo:

 

http://forum.imasters.com.br/topic/542713-so-consigo-pegar-o-primeiro-registro-do-xml-ao-fazer-loop-com-foreach/page-2

 

 

Diante disso, quero agradecer a todos por me ajudar. Com certeza essas soluções vão ajudar outras pessoas também.

Agora é estudar.

Abç

Ficam com DEUS!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por Jack Oliveira
      Boa noite galera..
       
      Estou tentando gerar um sitemap com php
       
      So que tenho que por o limit 1200 
       
      mais que isso ele nao gera e se deixar sem limit 
       
      Obs: o banco de dados contem mais de 10 mil registros
      <?php // Data e hora atual $datetime = new DateTime(date('Y-m-d H:i:s')); // A linha abaixo me retornará uma data no seguinte formato: 2017-11-22T00:06:23-02:00 $date = $datetime->format(DateTime::ATOM); // ISO8601 // Gera o arquivo XML do sitemap $xml = '<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <url> <loc>'.ConfigPainel('site_url').'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; $Query = DBRead('cidades','*',"WHERE status ='1' ORDER BY nome ASC"); if (is_array($Query)) { foreach ($Query as $modcid) { $xml .=' <url> <loc>'.ConfigPainel('site_url').''.$modcid['subdominio'].'/</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>1.00</priority> </url>'; //$QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC"); $QueryR = DBRead('directory_guia', '*',"WHERE cidade='{$modcid['id']}' AND status='1' ORDER BY titulo ASC LIMIT 1200"); if (is_array($QueryR)) { foreach ($QueryR as $v) { $Queryc = DBRead('cidades', '*',"WHERE id='{$v['cidade']}' ORDER BY nome ASC")[0]; if(empty($v['slug'])) { }else{ $urlseo = ''.ConfigPainel('site_url').''.$Queryc['subdominio'].'/list/'.$v['slug'].'/'; $xml .=' <!-- INICIO DA EMPRESA '.TRIM($v['titulo']).' --> <url> <loc>'.$urlseo.'</loc> <lastmod>'.$date.'</lastmod> <changefreq>weekly</changefreq> <priority>0.85</priority> </url> <!-- FIM DA EMPRESA '.TRIM($v['titulo']).' --> '; } }} }} $xml .= ' </urlset>'; // Abre o arquivo ou tenta cria-lo se ele não exixtir $arquivo = fopen('../sitemap.xml', 'w'); if (fwrite($arquivo, $xml)) { Redireciona('./index.php?sucesso'); } else { Redireciona('?erro'); } fclose($arquivo); // Compactar arquivo sitemap para GZIP $data = implode("", file("sitemap.xml")); $gzdata = gzencode($data, 9); $fp = fopen("sitemap.xml.gz", "w"); fwrite($fp, $gzdata); fclose($fp); // Envia para o Google o novo sitemap gerado $urlSitemap = "http://www.google.com/webmasters/sitemaps/ping?sitemap=".ConfigPainel('site_url').""; // Arquivos a serem enviados $Files = ['sitemap.xml', 'sitemap.xml.gz']; // Envia os dois arquivos sitemap gerados para a URL do Google foreach ($Files as $file) { $url = $urlSitemap . $file; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); } ?> Caso ouve outra forma que eu possa gerar este sitemap com php fico grato...
    • Por marcelo.ourico
      Estou precisando fazer o envio de um XML via webservice. Estou utilizando PHP 7.4 e nuSoap.

      Porém esse XML de envio possui várias tags com hífen. Por exemplo <tag-name></tag-name>.
       
      Esse hífen tem sido um problema, principalmente por que eu não posso enviar o XML como string. Apenas como objeto. Então imaginem isso:
       
      $objeto = simplexml_load_string($string_xml);  
      Se simplesmente eu tentar resgatar o valor da TAG já dá erro...
       
      $campo1= $objeto->tag-name;
      O erro ocorre em função de que o hífen é um caractere reservado do PHP... Então como resolver?

      Independente disso, quando eu tento fazer o envio via nuSoap, também recebo erro abaixo:
      wsdl->getTypeDef('tag-name', 'http://xyz.abr...')
      wsdl->serializeType('tag-name', 'tag-name', Object(SimpleXMLElement), '

      Alguém já passou por isso? Sabe como resolver? Pode dar uma dica?
    • Por AlexandreHenrique
      Olá pessoal. preciso de uma ajuda com o meu projeto de upload.
      O projeto de upload roda no IIS + Php;
      Tenho um script que ta enviando  o arquivo para o diretório correto.
      O problema é que ao tentar acessar esse arquivo via URL, o anexo não abre  e exibe a mensagem abaixo.
       

      Notei que o arquivo ao cair no DIR, ele entra sem permissões (vi em propriedades), se eu editar o mesmo alterando as permissões, ele carrega pela url do meu site.
      Quero que o arquivo enviado pelo script caia no DIR correta com as devidas permissões pra eu poder ler no navegador via URL;
       
      Já tentei resolver de toda forma mas nao tive sucesso;.
      No Apache isso é mais simples, mas no IIS ta complicado;
       
       
       
      Alguem pode me dá uma dica?
    • Por Caio Vargas
      Fala pessoa tudo tranquilo ?
      estou com um problema eu fiz um sistema de upload onde tem a marca dagua  o problema e que quando o cadastro da capa e pequena a imagem da marca dagua fica grande
      e qauando a capa e grande  a imagem da marca dagua fica pequena alguem poderia me ajudar 
×

Informação importante

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