Gravar dados XML.

03/12/2013

0

PHP

Boa tarde, 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.
Adilson Rumao

Adilson Rumao

Responder

Posts

04/12/2013

Adilson Rumao

Mudei um pouco o esquema que estou fazendo, está funcionando em partes.
Código atual:
<?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>'.PHP_EOL);
fwrite($arquivo, '  <dados>'.PHP_EOL);
fwrite($arquivo, '      <modelo>'.$_SESSION['veiculo']['nome'].'</modelo>'.PHP_EOL);
fwrite($arquivo, '      <ano>'.$_SESSION['veiculo']['ano'].'</ano>'.PHP_EOL);
fwrite($arquivo, '      <placa>'.$_SESSION['veiculo']['placa'].'</placa>'.PHP_EOL);
fwrite($arquivo, '  </dados>'.PHP_EOL);

$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>'.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);
endforeach;        
fwrite($arquivo, '</orcamento>');
fclose($arquivo);


Estou conseguindo contar como preciso, mas o problema é que quando coloco a variável dentro do nó <produto> dá erro no xml. A tag <seq> é só para exemplificar.
Preciso que seja gravado assim:
<codigo1>
<codigo2>....

Alguém já fez algo parecido com XML? Desde já obrigado pela atenção.
Responder

04/12/2013

Adilson Rumao

Consegui finalizar segue resultado final para se alguém precisar do mesmo.

<?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é?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar