Foros del Web » Programando para Internet » PHP »

Bucle en PHP para crear un XML

Estas en el tema de Bucle en PHP para crear un XML en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 13/06/2009, 05:57
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 1
Bucle en PHP para crear un XML

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 HTML:
<?xml version='1.0' encoding='utf-8'?> 
<categories> 
<cat1 title="cliente1"> 
<item name="name1" id="id1" pic="images/img1">
</item> 
</cat1>
... 
</categories> 
... y este es el código que he creado 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>'
while(
$row_clientes mysql_fetch_assoc($clientes)){
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 no relaciona los clientes con sus proyectos, es decir, muestra todos los proyectos al primer cliente y el resto de clientes salen sin nigún proyecto...
Os agradecería cualquier ayuda.
Gracias a todos/as
Fer
  #2 (permalink)  
Antiguo 13/06/2009, 06:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Bucle en PHP para crear un XML

Trata no usar el do while sino solamente el while

y al final del while o sea del que esta adentro vas a escribir
mysql_data_seek($proyectos,0);

Acuerdate que los while mueven el cursor de la base de datos hasta el final y cuando lo vuelves a llamar el cursor como esta al final no va a encontrar nada tienes que mover el cursor de nuevo al principio para que pueda ejecutar de nuevo el while. Pero como te indique este mysql_data_seek lo vas a colocar despues del while hijo (creo que se puede decir asi )
  #3 (permalink)  
Antiguo 13/06/2009, 07:31
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Bucle en PHP para crear un XML

Gracias por el aporte, pero creo que no está relacionando bien las tablas porque me saca todos los proyectos en cada cliente. No sé si lo he puesto bien. Es así???

Código PHP:
$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 trabajos INNER JOIN clientes ON (trabajos.idCliente = clientes.id) ORDER by idCliente asc";
$proyectos = mysql_query($query_proyectos, $queidea) 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>'; 
while($row_clientes = mysql_fetch_assoc($clientes)){
echo '<cat'.$row_clientes['id'].' title="'.$row_clientes['cliente'].'">'; 
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>'; 
} mysql_data_seek($proyectos,0);
echo '</cat'.$row_clientes['id'].'>'; 
};
echo '</categories>';
Cómo haría para que saque los proyectos de cada cliente...
  #4 (permalink)  
Antiguo 13/06/2009, 07:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Bucle en PHP para crear un XML

Tienes que dentro del primer while escribir este query

$query_proyectos = "SELECT * FROM trabajos INNER JOIN clientes ON (trabajos.idCliente = clientes.id) ORDER by idCliente asc";
$proyectos = mysql_query($query_proyectos, $queidea) or die(mysql_error());
$row_proyectos = mysql_fetch_assoc($proyectos);

Luego llamas el segundo while. Vas a tener que hacer una modificacion al query ya que no vas a poder usar en esta ocacion el inner join vas a tener que verificar algo asi

SELECT * FROM trabajos WHERE clientes = '".$row_clientes["id"]."'

y no uses el mysql_fetch_assoc fuera del while o sea la linea

$row_proyectos = mysql_fetch_assoc($proyectos);

la puedes quitar porque la vas a usar dentro del segundo while


me dejas saber
  #5 (permalink)  
Antiguo 13/06/2009, 09:03
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 1
De acuerdo Respuesta: Bucle en PHP para crear un XML

Funciono !!!! Muchisimas gracias, creo que la clave estaba en colocar WHERE idCliente = '".$row_clientes["id"]."' dentro del primer while... te pego aquí el código correcto

Código PHP:
$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 INNER JOIN clientes ON (trabajos.idCliente = clientes.id) WHERE idCliente = '".$row_clientes["id"]."' ORDER by idCliente asc"; 
$proyectos = mysql_query($query_proyectos, $queidea) 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>';
de nuevo muchas gracias, me estaba volviendo loco.
  #6 (permalink)  
Antiguo 13/06/2009, 09:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Bucle en PHP para crear un XML

quitale lo de inner join tambien y me dejas saber
  #7 (permalink)  
Antiguo 13/06/2009, 09:15
 
Fecha de Ingreso: junio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Bucle en PHP para crear un XML

Perfecto, lo he quitado y funciona.
Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:11.