Ir para conteúdo

Arquivado

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

rumao

Salvar dados em XML

Recommended Posts

Boa dia, estou com algumas dificuldades para gravar os valores de uma Session em um arquivo XML, se alguém puder ajudar agradeço.
Segue o que fiz até agora.

 

<?php
print_r($_SESSION[''''carrinho'''']);
//Grava Orçamento em XML
$txt  = ''''<?xml version="1.0" encoding="utf-8"?>''''."\n";
 
$caminhoOrcamento = PATHORCAMENTO.$_SESSION[''''autUser''''][''''NOMELOJA_USU''''].$_SESSION[''''autUser''''][''''APELIDOLOJA_USU''''].''''/'''';  
$conteudo = "";
 
$conteudo .= "<orcamento>\n";
$conteudo .= "  <dados>\n";
$conteudo .= "      <cliente>".$_SESSION[''''veiculo''''][''''consumidor''''] = CLIENTENAME."</cliente>\n";
$conteudo .= "      <modelo>".$_SESSION[''''veiculo''''][''''nome'''']."</modelo>\n";
$conteudo .= "      <ano>".$_SESSION[''''veiculo''''][''''ano'''']."</ano>\n";
$conteudo .= "      <placa>".$_SESSION[''''veiculo''''][''''placa'''']."</placa>\n";
$conteudo .= "  </dados>\n";
 
foreach($_SESSION[''''carrinho''''] as $id => $qtd){
    $sql = "SELECT * FROM subdivisoes WHERE CODIGO_SUB = ''''$id''''";
    $qry = mysql_query($sql)or die(mysql_error());
    $ln  = mysql_fetch_assoc($qry);
 
    $id   = $ln[''''CODIGO_SUB''''];
    $nome = $ln[''''NOME_SUB''''];
     
$conteudo .= "  <produto>\n";
$conteudo .= "      <codigo>$id</codigo>\n";
$conteudo .= "      <descricao>$nome</descricao>\n";
$conteudo .= "      <quantidade>$qtd</quantidade>\n";
$conteudo .= "  </produto>\n";
}
 
$conteudo .= "</orcamento>";
 
$xml = $txt.$conteudo;
 
$arquivo = $_SESSION[''''veiculo''''][''''placa''''].".xml";
$arquivo = fopen($caminhoOrcamento.$arquivo,''''w+'''');
 
if($arquivo == false):
    echo ''''Não foi possíbel criar o arquivo!'''';
else:
    fwrite($arquivo,$xml);
    echo ''''<div class="alert alert-block alert-success msg"><strong>Sucesso! </strong>Orçamento Gravado com Sucesso!</div>'''';
    unset($_SESSION[''''carrinho'''']);
    header(''''Refresh: 3;url=categorias.php'''');
endif;
fclose($arquivo);

O que está sendo gerado no momento é assim:

 

<?xml version="1.0" encoding="utf-8"?>
<orcamento>
  <dados>
      <cliente>CONSUMIDOR</cliente>
      <modelo>MARRUÁ 2.8 12V 132cv TDI Diesel</modelo>
      <ano>2004 Diesel</ano>
      <placa>DDP-2297</placa>
  </dados>
  <produto>
      <codigo>17</codigo>
      <descricao>RODAS NOVAS</descricao>
      <quantidade>4</quantidade>
  </produto>
  <produto>
      <codigo>1</codigo>
      <descricao>PALHETAS</descricao>
      <quantidade>1</quantidade>
  </produto>
  <produto>
      <codigo>15</codigo>
      <descricao>PNEUS NOVOS</descricao>
      <quantidade>4</quantidade>
  </produto>
</orcamento>

Preciso que na tag <produto> seja incrementado + 1 sempre que for gerado um novo produto, mas não consegui resolver este problema, para ficar assim:
<produto1>
<produto2>
etc..

E o que fiz até o momento está correto? Ainda estou testando, mas está gerando os dados que preciso o caminho é este mesmo ou teria algo mais simples para ser feito?

Desde já obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites
// Definir variável antes do foreach:
$contador = 0;

// Dentro do foreach, depois do $nome = $ln[''''NOME_SUB''''];

 $contador++;
 $conteudo .= " <produto$contador>\n";

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Massaki eu estava fazendo de forma errada mesmo, nos meus testes aqui eu havia colocado um for dentro do foreach.

O problema que deu agora é que quando coloco para contar dentro do nó produtos ele dá erro.

 

Assim conta corretamente:

$cod++;
fwrite($arquivo, '<produto>'.PHP_EOL);
fwrite($arquivo, '  <seq>'.$cod.'</seq>'.PHP_EOL);
fwrite($arquivo, '  <descricao>'.$nome.'</descricao>'.PHP_EOL);
fwrite($arquivo, '  <quantidade>'.$qtd.'</quantidade>'.PHP_EOL);
 fwrite($arquivo, '</produto>'.PHP_EOL);

Assim dá erro:

$cod++;
fwrite($arquivo, '<produto$cod>'.PHP_EOL);
fwrite($arquivo, '  <seq>'.$cod.'</seq>'.PHP_EOL);
fwrite($arquivo, '  <descricao>'.$nome.'</descricao>'.PHP_EOL);
fwrite($arquivo, '  <quantidade>'.$qtd.'</quantidade>'.PHP_EOL);
fwrite($arquivo, '</produto>'.PHP_EOL);

Tentei concatenar, mas não obtive exito. Teria alguma dica sobre isso?

Desde já meu muito obrigado pela sua ajuda.



Novamente valeu Massaki consegui finalizar. Segue resultado final.

 

<?php
//Caminho e nome do arquivo usado para gravar o XML
$caminhoOrcamento = PATHORCAMENTO.$_SESSION['autUser']['NOMELOJA_USU'].$_SESSION['autUser']['APELIDOLOJA_USU'].'/';	
$arquivo = $_SESSION['veiculo']['placa'].".xml";
$arquivo = fopen($caminhoOrcamento.$arquivo,'w+');

//Dados do arquivo XML
fwrite($arquivo, '<?xml version="1.0" encoding="utf-8"?>');
fwrite($arquivo, '<orcamento>');
fwrite($arquivo, '  <dados>');
fwrite($arquivo, '      <modelo>'.$_SESSION['veiculo']['nome'].'</modelo>');
fwrite($arquivo, '      <ano>'.$_SESSION['veiculo']['ano'].'</ano>');
fwrite($arquivo, '      <placa>'.$_SESSION['veiculo']['placa'].'</placa>');
fwrite($arquivo, '  </dados>');

$cod = 0;
foreach($_SESSION['carrinho'] as $id => $qtd):
    $sql = "SELECT * FROM subdivisoes WHERE CODIGO_SUB = '$id'";
    $qry = mysql_query($sql)or die(mysql_error());
    $ln  = mysql_fetch_assoc($qry);

    $id   = $ln['CODIGO_SUB'];
    $nome = $ln['NOME_SUB'];
    
    $cod++;
    fwrite($arquivo, '  <produto cod="'.$cod.'">');
    fwrite($arquivo, '      <descricao>'.$nome.'</descricao>');
    fwrite($arquivo, '      <quantidade>'.$qtd.'</quantidade>');
    fwrite($arquivo, '  </produto>');
endforeach;        
fwrite($arquivo, '</orcamento>');

if(!$arquivo):
    echo 'Não foi possíbel criar o arquivo!';
else:
    echo '<div class="alert alert-block alert-success msg"><strong>Sucesso! </strong>Orçamento Gravado com Sucesso!</div>';
    unset($_SESSION['carrinho']);
    header('Refresh: 3;url=categorias.php');
endif;
fclose($arquivo);

Como sou iniciante talvez a lógica não esteja das melhores e pudesse ser feito de uma outra forma mais rápida e fácil, mas de qualquer forma está me atendendo no momento e no futuro posso melhorar quem sabe né? kkk

 

Valeu mesmo!

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.