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

Senhores, consigo realizar o upload do conteúdo de um arquivo XML para o banco de dados MySQL. Mas apenas um arquivo por vez.

O que eu queria é que fossem vários arquivos. Já tentei criar array, variáveis... mas ainda não consegui. Consegui criar os scripts abaixo:

 

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
 
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
      
 
 
        
        <form action="importar_xml.php" method="POST"  enctype="multipart/form-data">
            
          <input type="file" name="upl"  multiple  style="font-size:80px" />
        
            <input type="submit" name="enviar_xml" value="Enviar" />
            
        </form>
        
    </body>
</html> 

 

xml_importar.php

 

<?php set_time_limit(3600); //1 hora pra dar timeout
 
/* Conectar com o banco de dados da aplicação */
mysql_connect('localhost', 'root', 'senha') or die('Erro ao conectar');
mysql_select_db("nome_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>";
       
   /** LER XML A PARTIR DO INPUT TYPE=FILE
         * Esta linha simplexml_load_files ler o xml que é selecionado
         * a partir do campo do input type=file, que tem o nome de filename. **/   
 
    $xml = simplexml_load_file($_FILES['upl']['tmp_name']); /* Lê o arquivo XML e recebe um objeto com as informações */            
  }}
  
$x = 0; //contador  
foreach ($xml->tag1->tag2->tag3->{'nome-nome2'} as $valor){
 
/* Percorre o objeto e salva as informações no banco de dados */
 
    
     mysql_query("INSERT INTO nome_tabela(tag1, tag2, tag3, tag4, tag5) 
         VALUES (
".$valor->tag5->tag6.", 
'".$valor->tag7->tag8."', 
".$valor->tag9->tag10->tag11->tag12.", 
'".$valor->tag9->tag10->tag11->tag13."',
".$valor->tag9->tag10->tag11->tag14.")");
 
  
    if(mysql_affected_rows() != -1){
       $x++;
} }    
    
echo "$x contatos importados com sucesso!";
?> 

//****************************************************************************************************************************************

 

O que preciso é selecionar vários XMLs e salvar no banco. Hoje, consigo, sim, selecionar vários, mas somente 1(um) XML é gravado no banco.

 

Senhores, se puderem, dá uma ajudinha ae...

abç!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postei mais acima os códigos das duas páginas.

Agora não acontece erro.

E

Por exemplo, não consigo importar mais de um arquivo xml.

Apenas 1 por vez.

Ou seja, tenho que clicar sempre no botão para pesquisar qual arquivo será importando.

 

O que importo, na verdade, é o conteúdo do arquivo XML.

Mas imagina 30 xml. Seria trabalhoso.

 

Compreendeu, rberaldo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
      
 
 
        
        <form action="importar_xml.php" method="POST"  enctype="multipart/form-data">
            
          <input type="file" name="upl[]"  multiple  style="font-size:80px" />
        
            <input type="submit" name="enviar_xml" value="Enviar" />
            
        </form>
        
    </body>
</html>

 

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

 

 

 

xml_importar.php


<?php set_time_limit(3600); //1 hora pra dar timeout
 
/* Conectar com o banco de dados da aplicação */
mysql_connect('localhost', 'root', 'senha') or die('Erro ao conectar');
mysql_select_db("nome_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>";
       
   /** LER XML A PARTIR DO INPUT TYPE=FILE
         * Esta linha simplexml_load_files ler o xml que é selecionado
         * a partir do campo do input type=file, que tem o nome de filename. **/   
 
    $xml = simplexml_load_file($_FILES['upl']['tmp_name']); /* Lê o arquivo XML e recebe um objeto com as informações */            
  }}
  
$x = 0; //contador  
foreach ($xml->tag1->tag2->tag3->{'nome-nome2'} as $valor){
 
/* Percorre o objeto e salva as informações no banco de dados */
 
    
     mysql_query("INSERT INTO nome_tabela(numeroGuiaPrestador, dataSolicitacao, codigoProcedimento, descricaoProcedimento, codigoTabela) 
         VALUES (
".$valor->tag5->tag6.", 
'".$valor->tag7->tag8."', 
".$valor->tag9->tag10->tag11->tag12.", 
'".$valor->tag9->tag10->tag11->tag13."',
".$valor->tag9->tag10->tag11->tag14.")");
 
  
    if(mysql_affected_rows() != -1){
       $x++;
} }    
    
echo "$x contatos importados com sucesso!";
?>

//****************************************************************************************************************************************

 

 

 

 

Pode me ajudar?

 

 

Alguém..?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguém..?

Se você quer solução rápida, contrate um programador para fazer para você.

 

 

$_FILES['upl'] é um array. Consequentemente, esta linha nunca funcionará:

 

 

if (is_uploaded_file($_FILES['upl']['tmp_name'])) {

Você deve verificar $_FILES['upl']['tmp_name'][0], $_FILES['upl']['tmp_name'][1] e assim por diante

 

De novo, leia este artigo para entender:

http://forum.imasters.com.br/topic/266539-upload-multiplo/

 

Está tudo explicado e exemplificado ali.

Compartilhar este post


Link para o post
Compartilhar em outros sites

foreach($_FILES['upl']['tmp_name'] AS $file) {

if (is_uploaded_file($file)) {

echo "<h1>Arquivo XML: {$files} Selecionado com Sucesso!.</h1>";

//aqui dentro você lê o arquivo $file.

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites
foreach($_FILES['upl']['tmp_name'] AS $file) {
    if (is_uploaded_file($file)) {
        echo "<h1>Arquivo XML: {$files} Selecionado com Sucesso!.</h1>";
        //aqui dentro você lê o arquivo $file.
    }
}

William, agradeço pela resposta.

Vou tentar o teu feedback e retorno.

 

abç

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, agradeço pela resposta.

Vou tentar o teu feedback e retorno.

 

abç

 

 

 

 
<?php set_time_limit(3600); //1 hora pra dar timeout
 
/* Conectar com o banco de dados da aplicação */
mysql_connect('localhost', 'root', 'senha') or die('Erro ao conectar');
mysql_select_db("nome_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>";
       
   /** LER XML A PARTIR DO INPUT TYPE=FILE
         * Esta linha simplexml_load_files ler o xml que é selecionado
         * a partir do campo do input type=file, que tem o nome de filename. **/   
 
 
//Ficaria asssim?
 
foreach($_FILES['upl']['tmp_name'] AS $file) {
if (is_uploaded_file($file)) {
echo "<h1>Arquivo XML: {$files} Selecionado com Sucesso!.</h1>";
//aqui dentro você lê o arquivo $file.
 
 
    $xml = simplexml_load_file($_FILES['upl']['tmp_name']); /* Lê o arquivo XML e recebe um objeto com as informações */            
  }}
  
}
}
 
$x = 0; //contador  
foreach ($xml->tag1->tag2->tag3->{'nome-nome2'} as $valor){
 
/* Percorre o objeto e salva as informações no banco de dados */
 
    
     mysql_query("INSERT INTO nome_tabela(numeroGuiaPrestador, dataSolicitacao, codigoProcedimento, descricaoProcedimento, codigoTabela) 
         VALUES (
".$valor->tag5->tag6.", 
'".$valor->tag7->tag8."', 
".$valor->tag9->tag10->tag11->tag12.", 
'".$valor->tag9->tag10->tag11->tag13."',
".$valor->tag9->tag10->tag11->tag14.")");
 
  
    if(mysql_affected_rows() != -1){
       $x++;
} }    
    
echo "$x contatos importados com sucesso!";
?>
 
 
 
 
//****************************************************************//

 

William,Tentei fazer a implementação aqui de várias maneiras, mas não funciona. Tipo que aparece esse erro:

 

Warning: Invalid argument supplied for foreach() in C:\VertrigoServ\www\fleurysistema\xml_importar.php on line 42

0 contatos importados com sucesso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O name do input deve ser []

 

<input type="file" name="upl[]"  multiple  style="font-size:80px" />

Compartilhar este post


Link para o post
Compartilhar em outros sites

O name do input deve ser []

 

<input type="file" name="upl[]"  multiple  style="font-size:80px" />

Opa!!

 

Esqueci de comentar..rs

 

Quando eu coloco " [ ] ", também apresenta erro.

 

Com esse mesmo codigo aí..

 

Estranho que tenho outro FOREACH aqui e não ocorre problema.

Claro que o problema está entre a cadeira e o computador..rs...

 

 

aparece esse errro

 

Warning: Invalid argument supplied for foreach() in C:\VertrigoServ\www\fleurysistema\xml_importar.php on line 48

0 contatos importados com sucesso!

 

 

mas se eu fecho

}

}

 

bem mais abaixo, nada acontece.

 

 

Já testei esse código aí diversas vezes em relação o comando de lugar, suas "chaves"..

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 
 $file= simplexml_load_file($_FILES['upl']['tmp_name']);
 
$x = 0;
foreach($_FILES['upl']['tmp_name'] as $file) {
if (is_uploaded_file($file)) {
echo "<h1>Arquivo XML: {$files} Selecionado com Sucesso!.</h1>";
//aqui dentro você lê o arquivo $file.
 
    /* Lê o arquivo XML e recebe um objeto com as informações */
  
 
 
foreach ($file->prestadorParaOperadora->loteGuias->guiasTISS->{'guiaSP-SADT'} as $prestador){
 
 //   while (mysql_fetch_row($prestador))) {
     mysql_query("INSERT INTO tb_xml( codigoProcedimento) 
 
         VALUES (".$prestador->procedimentosExecutados->procedimentoExecutado->procedimento->codigoProcedimento.")");
   }}
 
    }}
  
    if(mysql_affected_rows() != -1){
       $x++;
} }
 
echo "$x contatos importados com sucesso!";
?>

Na verdade, não acontece erro.

Adiciona no banco.

Mas não múltiplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim? como é o XML ?

 

O código me parece bem correto agora. Vc está enviando vários arquivos ?

ele adiciona uma linha no banco para cada arquivo, certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se $_FILES['upl']['tmp_name'] é um array, esta linha não tem lógica:

 

 

$file= simplexml_load_file($_FILES['upl']['tmp_name']);

Tire-a dali. Ela vai pra dentro do loop foreach, que vai carregar o XML salvo em $file

 

E como seu foreach já cria $file, simplexml_load_fileI() deve atribuir a outro nome de variável, para que o loop não se encerre na primeira iteração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas Beraldo, esse cara é o cara que recebe do campo do upload.

Se eu tirá-lo, o que pode acontecer quando a pessoa clicar lá no botão do upload? Tipo, essa variável não é a variável que resgata o que está no upload?

 

Tendeu minha dúvida?

 

Mas vou fazer o que tu falou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que foi enviado é automagicamente colocado em $_FILES. Você não precisa fazer nada mais além disso, se não quiser.

 

Ou seja, basta a linha do foreach, que faz a iteração em $_FILES e pronto. A variável $file vai receber os nomes dos arquivos enviados.

Dentro do foreach cada arquivo é tratado individualmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • 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 
    • Por mateus.andriollo
      Olá,
      Gostaria de saber se alguem pode me ajudar.
      Meu PHP esta na pasta public_html em um CPanel, quero saber se é possível armazenar em pasta fora da pasta  pública, por segurança mesmo...
      Faço isso em ASP, ai chamo a imagem por um fso, funciona mas queria saber se tem como no PHP.
×

Informação importante

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