Ir para conteúdo

POWERED BY:

Arquivado

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

olliver

[Resolvido] Geração de xml através de php, com erro

Recommended Posts

Boa tarde pessoal.

 

Estou gerando um XML aqui através de um PHP, porém não estou conseguindo gerá-lo com divisões de nós...

Bom, trata-se de uma galeria de fotos, e o seu XML é dividido em 3 nós. Preciso gerar um XML com esta estrutura:

 

<?xml version="1.0" encoding="utf-8" ?>
<photography>
	<galleries name="1st gallery">
		<pic id="1">
			<image>1b.jpg</image>
			<title>galeria 1, foto 1</title>
			<descriptions>Lorem ipsum dolor sit amet</descriptions>
			<thumbnail>1s.jpg</thumbnail>
			<link>http://www.1.com</link>
		</pic>
		<pic id="2">
			<image>2b.jpg</image>
			<title>galeria 1, foto 2</title>
			<descriptions>consectetuer adipiscing elit</descriptions>
			<thumbnail>2s.jpg</thumbnail>
			<link>http://www.2.com</link>
		</pic>
		<pic id="3">
			<image>3b.jpg</image>
			<title>galeria 1, foto 3</title>
			<descriptions>consectetuer dec adipiscing elit</descriptions>
			<thumbnail>3s.jpg</thumbnail>
			<link>http://www.3.com</link>
		</pic>
	</galleries>

	<galleries name="2nd gallery">
		<pic id="4">
			<image>4b.jpg</image>
			<title>galeria 2, foto 4</title>
			<descriptions>Nunc quis sem nec tellus blandit</descriptions>
			<thumbnail>4s.jpg</thumbnail>
			<link>http://www.4.com</link>
		</pic>
		<pic id="5">
			<image>5b.jpg</image>
			<title>galeria 2, foto 5</title>
			<descriptions>Duis vitae velit sed dui malesuada</descriptions>
			<thumbnail>5s.jpg</thumbnail>
			<link>http://www.5.com</link>
		</pic>
		<pic id="6">
			<image>6b.jpg</image>
			<title>galeria 2, foto 6<title>
			<descriptions>Duis vitae velit sed dui malesuada</descriptions>
			<thumbnail>6s.jpg</thumbnail>
			<link>http://www.6.com</link>
		</pic>
	</galleries>
</photography>

Percebam que tenho 3 nós (photography, galleries, pic), e o nó <galleries> "divide" as galerias de fotos que tenho, contendo todas as fotos de cada uma das galerias ( nó <pic> )...

 

o problema é que to gerando esse XML com erro... ele não aparece com essas divisões de galleries (1st gallerie, 2nd gallerie). Todos os nós <pic> aparecem dentro de uma única galeria apenas... vejam só como está a estrutura desse meu XML que estou gerando:

 

<?xml version="1.0" encoding="utf-8" ?>
<photography>
	<galleries name="1st gallery">
		<pic id="1">
			<image>1b.jpg</image>
			<title>galeria 1, foto 1</title>
			<descriptions>Lorem ipsum dolor sit amet</descriptions>
			<thumbnail>1s.jpg</thumbnail>
			<link>http://www.1.com</link>
		</pic>
		<pic id="2">
			<image>2b.jpg</image>
			<title>galeria 1, foto 2</title>
			<descriptions>consectetuer adipiscing elit</descriptions>
			<thumbnail>2s.jpg</thumbnail>
			<link>http://www.2.com</link>
		</pic>
		<pic id="3">
			<image>3b.jpg</image>
			<title>galeria 1, foto 3</title>
			<descriptions>consectetuer adipiscing elit</descriptions>
			<thumbnail>3s.jpg</thumbnail>
			<link>http://www.3.com</link>
		</pic>


		<!-- AQUI ERA PRA INICIAR UMA SEGUNDA GALERIA: 2ND GALLERIE -->


		<pic id="4">
			<image>4b.jpg</image>
			<title>galeria 2, foto 4</title>
			<descriptions>Nunc quis sem nec tellus blandit</descriptions>
			<thumbnail>4s.jpg</thumbnail>
			<link>http://www.4.com</link>
		</pic>
		<pic id="5">
			<image>5b.jpg</image>
			<title>galeria 2, foto 5</title>
			<descriptions>Duis vitae velit sed dui malesuada</descriptions>
			<thumbnail>5s.jpg</thumbnail>
			<link>http://www.5.com</link>
		</pic>
		<pic id="6">
			<image>6b.jpg</image>
			<title>galeria 2, foto 6<title>
			<descriptions>Duis vitae velit sed dui malesuada</descriptions>
			<thumbnail>6s.jpg</thumbnail>
			<link>http://www.6.com</link>
		</pic>
	</galleries>
</photography>

 

a minha tabela SQL está com a seguinte estrutura:

 

-- Estrutura da tabela `photography`
CREATE TABLE `photography` (
  `id` int(11) NOT NULL auto_increment,
  `gallery` varchar(200) NOT NULL default 
56b
39;0',
  `image` varchar(255) NOT NULL default '0',
  `title` varchar(255) NOT NULL default '0',
  `descriptions` text NOT NULL,
  `thumbnail` varchar(255) NOT NULL default '0',
  `link` varchar(255) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

-- Extraindo dados da tabela `photography`
INSERT INTO photography VALUES("01", "1st gallery", "1b.jpg", "galeria 1 foto 1", "Lorem ipsum ...", "1s.jpg", "http://www.1.com");
INSERT INTO photography VALUES("02", "1st gallery", "2b.jpg", "galeria 1 foto 2", "consectetuer adipi ...", "2s.jpg", "http://www.2.com");
INSERT INTO photography VALUES("03", "1st gallery", "3b.jpg", "galeria 1 foto 3", "consectetuer adipi ...", "3s.jpg", "http://www.3.com");
INSERT INTO photography VALUES("04", "2nd gallery", "4b.jpg", "galeria 2 foto 4", "Nunc quis sem ...", "4s.jpg", "http://www.4.com");
INSERT INTO photography VALUES("05", "2nd gallery", "5b.jpg", "galeria 2, foto 5", "Duis vitae velit ...", "5s.jpg", "http://www.5.com");
INSERT INTO photography VALUES("06", "2nd gallery", "6b.jpg", "galeria 2, foto 6", "Duis vitae velit ...", "6s.jpg", "http://www.6.com");

 

e por fim, o meu PHP que gera o XML:

 

<?php
  include("includes/config.php");
?>

<?php


/* BUSCAMOS OS VALORES NO BANCO DE DADOS */

$consulta = mysql_query("SELECT id,gallery,image,title,descriptions,thumbnail,link FROM photography ORDER BY id ASC");
/* Retorna o número de linhas do resultado */
$row=mysql_num_rows($consulta);
/* Verificamos se retornou algum resultado */
if($row>0){
   /* Manda a mensagem para o Flash */
   print "";


/* INICIAMOS A GERAÇÃO DO XML, COM OS VALORES DO BD */

   $conteudo = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><photography>";
   /* Para cada item retornado */
   for($i=0; $i<$row; $i++) {

	  /* Recuperamos o ID */
	  $id = mysql_result($consulta,$i,"id");
	  /* Recuperamos o GALLERY */
	  $gallery = mysql_result($consulta,$i,"gallery");
	  /* Recuperamos a IMAGE */
	  $image = mysql_result($consulta,$i,"image");
	  /* Recuperamos o TITLE */
	  $title = mysql_result($consulta,$i,"title");
	  /* Recuperamos a DESCRIPTIONS */
	  $descriptions = mysql_result($consulta,$i,"descriptions");
	  /* Recuperamos o THUMBNAILS */
	  $thumbnails = mysql_result($consulta,$i,"thumbnails");
	  /* Recuperamos o LINK */
	  $link = mysql_result($consulta,$i,"link");

	  /* Inserimos os valores recuperados nas respectivas tags */
	  $conteudo .= "<galleries><pic><image>";
	  $conteudo .= $image;
	  $conteudo .= "</image><title>";
	  $conteudo .= $title;
	  $conteudo .= "</title><descriptions>";
	  $conteudo .= $descriptions;
	  $conteudo .= "</descriptions><thumbnails>";
	  $conteudo .= $thumbnails;
	  $conteudo .= "</thumbnails><link>";
	  $conteudo .= $link;
	  $conteudo .= "</link></pic></galleries>";
   }
   /* Fechamos a tag tabela */
   $conteudo .= "</photography>";
   /* Se existir, abrimos o arquivo photography.xml para leitura e escrita */
   /* Se não existir criamos o arquivo tabela.xml */
   $ponteiro = fopen("xmlphpcss/photography.xml", "w");
   /* Escremos o conteúdo dentro do arquivo selecionado */
   /* Codificamos para UTF8 os campos para não dar problemas com acentuação */
   fwrite($ponteiro, utf8_encode($conteudo));
   /* Fechamos o arquivo */
   fclose($ponteiro);
   /* Se não retornou nenhum resultado */
} else {
   /* Manda a mensagem de erro para o Flash */
   print "&erro=Não existe nenhum registro na Tabela!&erroMensagem=1";
}

?>

 

Alguém tem alguma idéia de como posso corrigir isso?

Agradeço a paciência.

 

Rafael

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa fazer 2 laços encaixados. Sendo o primeiro para formar as galerias, e o interno para dizer quais fotos pertencem à tal galeria..

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi mal pelo post errado.

 

Então William, essa divisão que tá me dando uma dor de cabeça cara... nao to acertando nela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

/* BUSCAMOS OS VALORES NO BANCO DE DADOS */

 

$q = mysql_query("SELECT gallery FROM photography GROUP BY gallery ");

 

$row = mysql_num_rows( $q );

 

if( $row > 0 )

{

$conteudo = '<?xml version=\"1.0\" encoding=\"utf-8\" ?>'."\n".'<photography>'."\n";

 

while( $dados = mysql_fetch_assoc( $q ) )

{

$conteudo .= "\t".'<galleries name="'.$dados['gallery'].'">'."\n";

$sql = "SELECT * FROM `photography` WHERE `gallery` = '{$dados['gallery']}' ";

 

$q2 = mysql_query( $sql );

 

while( $dados2 = mysql_fetch_assoc($q2) )

{

$conteudo .= "\t\t".'<pic id="'.$dados2['id'].'">'."\n";

$conteudo .= "\t\t\t".'<image>'.$dados2['image'].'</image>'."\n";

$conteudo .= "\t\t\t".'<title>'.$dados2['title'].'</title>'."\n";

$conteudo .= "\t\t\t".'<descriptions>'.$dados2['descriptions'].'</descriptions>'."\n";

$conteudo .= "\t\t\t".'<thumbnails>'.$dados2['thumbnails'].'</thumbnails>'."\n";

$conteudo .= "\t\t\t".'<link>'.$dados2['link'].'</link>'."\n";

$conteudo .= "\t\t".'</pic>'."\n";

}

$conteudo .= "\t".'</galleries>'."\n";

}

$conteudo .= "</photography>";

 

echo $conteudo;

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

William,

valeu cara, funcionou certinho, só precisei add o caminho p gerar o arquivo xml.

 

Fabyo, vou dar uma lida no tópico indicado, assim eu aprendo e não torro mais a paciência do pessoal, hehehe.

 

Valeuss

Abraço

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.