rumao 1 Denunciar post Postado Dezembro 4, 2013 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
Massaki 47 Denunciar post Postado Dezembro 4, 2013 // 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
rumao 1 Denunciar post Postado Dezembro 4, 2013 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