Comunidad de diseño web y desarrollo en internet online

Bucle while PHP para crear un XML ???

Citar            
MensajeEscrito el 12 Jun 2009 08:51 pm
Primeramente agradeceros una vez más vuestros aportes incondicionales. Soís los mejores ^^
Tengo un problemilla con el código de php para crear un buble complejo, estoy empezando a programar en PHP y ando un poco perdido, pero seguro que no es muy difícil... el tema es que quiero que cree un xml igual que este

Código XML :

<?xml version='1.0' encoding='utf-8'?>
<categories>
<cat1 title="cliente1">
<item name="name1" id="id1" pic="images/img1.jpg"></item>
</cat1>
...
</categories>

... este es el código que he hecho en php

Código PHP :

<?php require_once('../Connections/bbdd.php'); 
mysql_query("SET NAMES utf8",$bbdd);
mysql_select_db($database_bbdd, $bbdd);
$query_clientes = "SELECT * FROM clientes ORDER BY id asc";
$clientes = mysql_query($query_clientes, $bbdd) or die(mysql_error());
$row_clientes = mysql_fetch_assoc($clientes);
$totalRows_clientes = mysql_num_rows($clientes);
$query_proyectos = "SELECT * FROM clientes INNER JOIN trabajos ON (clientes.id = trabajos.idCliente) ORDER BY idCliente ASC";
$proyectos = mysql_query($query_proyectos, $bbdd) or die(mysql_error());
$row_proyectos = mysql_fetch_assoc($proyectos);
$totalRows_proyectos = mysql_num_rows($proyectos);
echo "<?xml version='1.0' encoding='utf-8'?>";
echo '<categories>';
echo '<cat'.$row_clientes['id'].' title="'.$row_proyectos['cliente'].'">';
do {
echo '<item name="'.$row_proyectos['titulo'].'"';
echo ' id="'.$row_proyectos['tipo'].'"';
echo ' pic="images/'.$row_proyectos['foto'].'">';
echo '</item>';
} while ($row_proyectos = mysql_fetch_assoc($proyectos));
echo '</cat'.$row_clientes['id'].'>';
echo '</categories>';
?>

El problema es que sólo me lista los trabajos del primer cliente y no se como hacer para que siga leyendo el resto de clientes. Os agradecería cualquier ayuda.
Gracias a tod@s
Fer

Por Fer10

14 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 12 Jun 2009 10:29 pm
usa un while

Código :

while($row_proyectos = mysql_fetch_assoc($proyectos)){
echo "<?xml version='1.0' encoding='utf-8'?>"; 
echo '<categories>'; 
echo '<cat'.$row_clientes['id'].' title="'.$row_proyectos['cliente'].'">'; 
do { 
echo '<item name="'.$row_proyectos['titulo'].'"'; 
echo ' id="'.$row_proyectos['tipo'].'"'; 
echo ' pic="images/'.$row_proyectos['foto'].'">'; 
echo '</item>'; 
} while ($row_proyectos = mysql_fetch_assoc($proyectos)); 
echo '</cat'.$row_clientes['id'].'>'; 
echo '</categories>'; 
}


prueba asi creo que es asi saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 13 Jun 2009 10:00 am
Gracias, lo único que hay que colocar el while más abajo para que no duplique todo el xml

Código PHP :

echo "<?xml version='1.0' encoding='utf-8'?>";
echo '<categories>';
[b]while($row_clientes = mysql_fetch_assoc($clientes)){[/b]
echo '<cat'.$row_clientes['id'].' title="'.$row_clientes['cliente'].'">';
do {
echo '<item name="'.$row_proyectos['titulo'].'"';
echo ' id="'.$row_proyectos['tipo'].'"';
echo ' pic="images/'.$row_proyectos['foto'].'">';
echo '</item>';
} while ($row_proyectos = mysql_fetch_assoc($proyectos));
echo '</cat'.$row_clientes['id'].'>';
}
echo '</categories>';

un último detalle, comienza a mostrarme el cliente id2 en lugar del id1
¿qué podría hacer?

Por Fer10

14 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 13 Jun 2009 08:33 pm
usa limit y colocalo desde 0
prueba asi a ver que te sale

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 13 Jun 2009 09:56 pm
Usando DoM de php.

Consideraciones:
  • La 2da consulta debe estar ordenada por id_cliente(para mi idCliente), sino debes quitar el else que contiene el break y funcionará, pero esto requerira más procesamiento de la aplicacion.
  • Estoy usando arreglos de ejemplo, pero adaptarlo con consultas no es difícil

Código PHP :

<?php


$clientes[0]["id"] = 1;
$clientes[0]["cliente"] = "Cliente 1";
$clientes[1]["id"] = 2;
$clientes[1]["cliente"] = "Cliente 2";
$clientes[2]["id"] = 3;
$clientes[2]["cliente"] = "Cliente 3";

$pics[0]["id"] = 1;
$pics[0]["idCliente"] = 1;
$pics[0]["name"] = "name1";
$pics[0]["pic"] = "pic1";

$pics[1]["id"] = 2;
$pics[1]["idCliente"] = 1;
$pics[1]["name"] = "name2";
$pics[1]["pic"] = "pic2";

$pics[2]["id"] = 3;
$pics[2]["idCliente"] = 2;
$pics[2]["name"] = "name3";
$pics[2]["pic"] = "pic3";


header("Content-type: text/xml");
$dom = new DOMDocument('1.0', 'iso-8859-1');


$root = $dom->createElement("categories");

foreach ( $clientes as $cliente)
{
   $cat = $dom->createElement("cat" . $cliente["id"]);
   $cat->setAttribute("title", $cliente["cliente"]);
   foreach ($pics as $key => &$pic)
   {
      if ($pic["idCliente"] == $cliente["id"])
      {
         unset($pic["idCliente"]);
         $item = $dom->createElement("item");
         foreach ($pic as $name => $value)
         {
            $item->setAttribute($name, $value);
         }
         $cat->appendChild($item);
         unset($pics[$key]);
      }
      else 
      {
         break;
      }
   }
   $root->appendChild($cat);
}
$dom->appendChild($root);
echo $dom->saveXML();

?>



saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 14 Jun 2009 11:11 am
Funcionó !!! he utilizado un while dentro de otro while y la instrucción mysql_data_seek(); para empezar desde el primer registro. Les añado el código por si les es de utilidad y quieren comentar algo.
Muchisimas gracias.

Código PHP :

<?php require_once('../Connections/bbdd.php'); 
mysql_query("SET NAMES utf8",$bbdd);
mysql_select_db($database_bbdd, $bbdd);

$query_clientes = "SELECT * FROM clientes ORDER BY id desc";
$clientes = mysql_query($query_clientes, $bbdd) or die(mysql_error());
$row_clientes = mysql_fetch_assoc($clientes);
$totalRows_clientes = mysql_num_rows($clientes);

echo "<?xml version='1.0' encoding='utf-8'?>"; 
echo '<categories>'; 
mysql_data_seek($clientes,0);
while($row_clientes = mysql_fetch_assoc($clientes)){
$query_proyectos = "SELECT * FROM trabajos WHERE idCliente = '".$row_clientes["id"]."' ORDER by idCliente asc"; 
$proyectos = mysql_query($query_proyectos, $bbdd) or die(mysql_error()); 
$row_proyectos = mysql_fetch_assoc($proyectos); 
echo '<cat'.$row_clientes['id'].' title="'.$row_clientes['cliente'].'">'; 
mysql_data_seek($proyectos,0);
while ($row_proyectos = mysql_fetch_assoc($proyectos)){ 
echo '<item name="'.$row_proyectos['titulo'].'"'; 
echo ' id="'.$row_proyectos['tipo'].'"'; 
echo ' pic="images/'.$row_proyectos['foto'].'">'; 
echo '</item>'; 
};
echo '</cat'.$row_clientes['id'].'>'; 
};
echo '</categories>'; 
?>

Por Fer10

14 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 18 Jun 2009 07:37 am
sorprendente

Por alfcm

7 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.