Jump to content
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ç!

Edited by William Bruno
Adicionar code

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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..?

Edited by William Bruno
Adicionar code

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

}

}

Share this post


Link to post
Share on other 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ç

Share this post


Link to post
Share on other 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!

Edited by Vinicius Ianni
Adicionar BBCode

Share this post


Link to post
Share on other sites

O name do input deve ser []

 

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

Share this post


Link to post
Share on other 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"..

Share this post


Link to post
Share on other 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.

Edited by William Bruno
Adicionar code

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By wagner9
      Olá companheiros,
       
      Preciso de ajuda para conseguir implementar um Feed de Notícias de um site parceiro em meu site. O pessoal do site parceiro me enviou os arquivos .xml, mas não consegui descobrir como implementar eles no meu site.
       
      Se alguem puder me ajudar, fico grato.
    • By manigold
      Estou com um pequeno problema nessa parte:
      $monsters = simplexml_load_file($otdir . '/data/monster/monsters.xml') or die('<b>Could not load monsters!</b>'); foreach($monsters->monster as $monster) { $loot = simplexml_load_file($otdir . '/data/monster/' . $monster['file']); if($loot) { if($item = $loot->loot->item){ A pagina mostra a lista de items corretamente mas se eu tenho um item dentro de outro item ,como nesse exemplo:
      <loot> <item id="2148" countmax="100" chance="33750" /> <item id="2148" countmax="100" chance="33750" /> <item id="2672" countmax="5" chance="80000" /> <item id="7399" chance="80" /> <item id="2392" chance="1428" /> <item id="2033" chance="3190" /> <item id="2547" countmax="7" chance="6700" /> <item id="5948" chance="3040" /> <item id="1987" chance="100000"> <!-- bag --> O PROBLEMA É NESSA PARTE <item id="5882" chance="5920" /> <item id="2498" chance="888" /> <item id="7378" countmax="3" chance="8800" /> <item id="2146" chance="5300" /> <item id="2414" chance="1500"/> <item id="2528" chance="2333" /> <item id="7402" chance="2000" /> <item id="2492" chance="730" /> </item> </loot> Os items dentro do item com id 1987 não são mostrados .
      Me desculpem se a explicação não esta muito boa , não entendo nada de php e xml ,eu agradeço se alguem puder me ajudar.
    • By Artur Mendonça
      Olá amigos.
      Estou a tentar fazer um sistema para upload de vídeos para criar uma base de dados.
      Já fiz um sistema para imagens e funciona na perfeição. Adaptei este código para upload de vídeo e recebo as mensagens de erro:
      Os (...) foi que coloquei para encurtar o caminho.
       
      Código da página para seleção e upload do vídeo:
      <?php session_start(); include_once "../conexao.php"; $agid = $_REQUEST['id']; $sql = "select * from tbl_album where albumid='$agid'"; $rs_result = mysqli_query($conectar, $sql); ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="Página Administrativa"> <meta name="author" content=""> <link rel="icon" href="imagens/imgadmin.ico"> <title>Administrativo</title> <link rel="stylesheet" href="../css/bootstrap.min.css"> <link rel="stylesheet" href="../css/style.css"> </head> <?php $agid = $_REQUEST['id']; $sql = "SELECT * FROM tbl_albumvideo WHERE albumid='$agid'"; $rs_result = mysqli_query($conectar, $sql); while ($row = mysqli_fetch_assoc($rs_result)) { $aname = $row["name"]; } ;?> <body> <?php include_once "admmenu.php"; ?> <div class="container theme-showcase" role="main" Style='margin-top: 100px'> <h1 class="page-header"><br />Adicionar vídeo</h1> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"> Por favor selecione o vídeo </div> <div class="panel-body"> <div class="row"> <div class="col-lg-6"> <form action="processa/proc_cad_albumvideo2.php?id=<?php echo $agid ?>" method="POST" enctype="multipart/form-data" name="upload"> <div class="form-group"> <input type="file" name="arquivo" id="arquivo" value="arquivo"/> </div> <div class="form-group"> <input name="enviar" class="btn btn-primary" type="submit" id="enviar" value="Enviar"> </div> <div class="alert alert-danger" role="alert" style='margin-top:20px'> Esta operação poderá ser demorada, dependendo do tamanho do ficheiro a enviar e das suas condições de ligação à rede. <br/> <br/> Por favor seja paciente e não reinicie a página! </div> </form> </div> </div> </div> </div> </div> </div> </div> <script src="../js/jquery-3.2.1.slim.min.js"></script> <script src="../js/popper.min.js"></script> <script src="../js/bootstrap.min.js"></script> </body> </html> E este é o código para efetuar o upload e gravação na BD
      <?php ini_set('display_errors', 1); ini_set('display_startup_erros', 1); error_reporting(E_ALL); session_start(); include_once "../../conexao.php"; $adate = date('Y-m-d H:i:s'); $status = 'process'; $arquivo = $_FILES['arquivo']; $albumid = $_REQUEST['id']; $pasta = '../../videos/'; $resulta = mysqli_query($conectar, "SELECT * FROM tbl_albumvideo WHERE albumid='$albumid'"); $linhas = mysqli_fetch_assoc($resulta); $local = $linhas["local"]; $arqnome = $_FILES['arquivo']['name']; $ano = $linhas['ano']; $extensao = @end(explode('.', $arqnome)); $novonome = time() . "-" . rand() . "." . $extensao; $tmp = $_FILES['arquivo']['tmp_name']; $file = $pasta . $novonome; if (move_uploaded_file($tmp, $file)) { $query = mysqli_query($conectar, "INSERT INTO videos (video_name, local, ano,aid) VALUES ('$novonome','$local', '$ano', '$albumid')") or die(mysqli_error($conectar)); if ($query) { echo "<META HTTP-EQUIV=REFRESH CONTENT = '0;URL=http://(...)/addgalleryvideo.php'> <script type=\"text/javascript\"> alert(\" O vídeo foi guardado com sucesso.\"); </script>";} else {echo " <META HTTP-EQUIV=REFRESH CONTENT = '0;URL=http://(...)/addgalleryvideo.php'> <script type=\"text/javascript\"> alert(\" O Vídeo não foi guardado.\"); </script> "; } } Linha 14 : $arquivo = $_FILES['arquivo']; 
      Linha 21: $arqnome = $_FILES['arquivo']['name'];
      Linha 27: $tmp = $_FILES['arquivo']['tmp_name'];
       
      Desde já muito obrigado.
    • By juninhogpe
      Boa tarde.
      Estou com problemas ao subir arquivos no formato MP3 com o código abaixo. Sempre usei ele e hoje apenas aparece erro.
      Abaixo o código:
       
      $titulo = $_POST['titulo']; if ($titulo != ""){ $texto = $_POST['texto']; $padre = $_POST['padre']; $data = date("Y-m-d", strtotime($_POST['data'])); $audio = isset($_FILES["audio"]) ? $_FILES["audio"] : FALSE; $arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE; if($arquivo && $audio){ if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $arquivo["type"])){ echo utf8_encode("<script> alert ('Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Cadastro não foi realizado.');</script>"); } if(!preg_match("/^audio\/(mp3|MP3)$/", $audio["type"])){ echo utf8_encode("<script> alert ('Arquivo em formato inválido! erro no upload do audio. Cadastro não foi realizado.');</script>"); } else{ preg_match ("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext); $dd = date("msdYiH"); $imagem_nome = $dd. "." . $ext[1]; $imagem_dir = "../am/" . $imagem_nome; $up = move_uploaded_file($arquivo["tmp_name"], $imagem_dir); preg_match ("/\.(mp3|MP3|wav|wma){1}$/i", $audio["name"], $ext); $dd = date("msdYiH"); $audio_nome = $dd. "." . $ext[1]; $audio_dir = "../am/" . $audio_nome; $up_audio = move_uploaded_file($audio["tmp_name"], $audio_dir); if ($up){ $sql = utf8_decode("INSERT INTO palavra (titulo, foto, data, audio, texto, padre) VALUES ('$titulo','$imagem_nome', '$data','$audio_nome', '$texto', '$padre')"); } } }else echo utf8_encode("<script> alert ('Erro no upload.');</script>"); if($conn->query($sql) === TRUE){ echo utf8_encode("<script> alert (\"Cadastro realizado com sucesso.\");</script>"); echo utf8_encode('<script>window.location="palavra.php";</script>'); } else{ echo "Erro: " . $sql . "<br />" .$conn->error; echo utf8_encode('<script>window.location="palavra.php";</script>'); } }  
      O que estou fazendo de errado?
      Obrigado.
    • By Alberto Nascimento
      Como consigo salvar o "novo nome" da imagem que foi enviada para o servidor por meio de UPLOAD no mesmo registro em que estão sendo salvos os dados do formulário no banco de dados através do PHP.
      Consigo salvar os campos do formulário, mas o nome que é gerado ao enviar a imagem, não estou conseguindo.
       
      <?php include 'conecta_mysql.inc'; if(isset($_FILES['arquivo']['name']) && $_FILES["arquivo"]["error"] == 0) { echo "<center>Você enviou o arquivo: <strong>" . $_FILES['arquivo']['name'] . "</strong><br /></center>"; echo "<center>Seu tamanho é: <strong>" . $_FILES['arquivo']['size'] . "</strong> Bytes<br /><br /></center>"; $arquivo_tmp = $_FILES['arquivo']['tmp_name']; $nome = $_FILES['arquivo']['name']; $extensao = strrchr($nome, '.'); $extensao = strtolower($extensao); if(strstr('.jpg;.jpeg;.gif;.png', $extensao)) { $novoNome = md5(microtime()) . '.' . $extensao; $destino = 'imagens/' . $novoNome; if( @move_uploaded_file( $arquivo_tmp, $destino )) { echo "<br>"; echo "<img src=\"" . $destino . "\" />"; echo "<br>"; } else echo "Erro ao salvar o arquivo. Aparentemente você não tem permissão de escrita.<br />"; } else echo "Você poderá enviar apenas arquivos \"*.jpg;*.jpeg;*.gif;*.png\"<br />"; } else { echo "<center><h1>Você não enviou nenhum arquivo!</h1></center>"; echo "<center><br><h3><a href='javascript:window.history.go(-1)'>Clique aqui para volta.</a></h3></center>"; } $codphoto = $_POST['codphoto']; $nome = $_POST['nome']; $datafotografia = $_POST['datafotografia']; $photography = $_POST['novoNome']; $sql = "INSERT INTO photograph VALUES"; $sql .= "( '$codphoto', '$nome', '$datafotografia', '$photography' )"; if ($conexao->query($sql) === TRUE) { echo "<center> <h2> Obrigado !! Envio realizado com sucesso !! </h2></center>"; echo "<center><br><h3><a href='LINK_SITE'>ENVIAR OUTRA FOTOGRAFIA</a></h3></center>"; } else { echo "Erro: " . $sql . "<br>" . $conexao->error; } $conexao->close();  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.