Gravar dados XML.
03/12/2013
0
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.
O que está sendo gerado no momento é assim:
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.
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
Curtir tópico
+ 0
Responder
Posts
04/12/2013
Adilson Rumao
Mudei um pouco o esquema que estou fazendo, está funcionando em partes.
Código atual:
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.
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.
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é?
<?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
Clique aqui para fazer login e interagir na Comunidade :)