Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Bucle dentro de bucle ¿es posible?

Estas en el tema de Bucle dentro de bucle ¿es posible? en el foro de PHP en Foros del Web. Hola a todos!! antes de nada, quiero agradeceros toda la info que compartis aqui... no os imaginais lo que ayuda!!! Llevo un par de dias ...
  #1 (permalink)  
Antiguo 28/03/2013, 11:31
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Bucle dentro de bucle ¿es posible?

Hola a todos!! antes de nada, quiero agradeceros toda la info que compartis aqui... no os imaginais lo que ayuda!!!

Llevo un par de dias atascado en un tema de que creo que es muy simple pero me esta superando....

bien, el caso es que tengo una tabla en la que repito una sentencia mediante Do While y necesitaria poder hacer otro bucle dentro de este... seria poder publicar comentarios y que estos puedan tener archivos adjuntos... es decir,

Código PHP:
<?php do { ?>

       [ comentarios ]

           <?php do { ?>

                 [ archivos ]

           <?php do } ?>

<?php do } ?>
Sorprendentemente con un codigo parecido he conseguido hacerlo pero solo me muestra el bucle interno de la primera repeticion....

Espero que me haya hecho entender :S y que alguien pueda ayudarme si no es mucha molestia... :)

Muchas gracias de ante mano!!!!!!!!
  #2 (permalink)  
Antiguo 28/03/2013, 11:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Bucle dentro de bucle ¿es posible?

Pues no se donde piensas que do { } do es una sintaxis válida, pero sí es posible anidar dos bucles, o más, por ejemplo:

Código PHP:
Ver original
  1. foreach ($posts as $post) {
  2.          // imprimes el $post
  3.          foreach ($post->getAattachments() as $attachment) {
  4.                   // imprimes los adjuntos
  5.          }
  6. }

Es algo trivial, pero debes de usar la sintaxis correcta, si quieres usar do/while es lo mismo, revisa solamente que bucle vas a usar y listo.

Saludos.
  #3 (permalink)  
Antiguo 02/04/2013, 07:30
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Muchas gracias por la respuesta GatorV!! y perdona por la pesima representación del codigo... lo quise hacer tan simple que me dejé todos los detalles... jeje...

veo que me has entendido perfectamente... pero no acabo de entender como aplicar el foreach :S
lo que intento hacer es que mostrar en una tabla los comentarios de la consulta notas... y que cada uno de estos comentarios tenga sus propios adjuntos que vienen de la consulta documentos... el caso es que me lo hace correctamente pero solo me muestra los adjuntos (documentos) de la primera fila... a partir de la segunda, me hace el bule de los comentarios (notas) pero de los documentos no... es decir, solo se ve bien la primera fila, el resto se ven sin adjuntos... :S

No se que me puede estar pasando... seguro que con tu metodo (GatorV) se puede pero no se como aplicarlo...

Muchas gracias por la ayuda y siento ser tan patoso... :(

Última edición por db87; 02/04/2013 a las 07:39
  #4 (permalink)  
Antiguo 02/04/2013, 07:41
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Esto es lo que tengo ahora...


<table>
<?php do { ?>
<?php if ((($row_notas['nota_id'] != 0) && ($row_notas['nota_tarea'] == ($row_tareas['tarea_id'])))) { ?>
<tr>
<td>
<a href="http://www.forosdelweb.com/f18/usuarios/perfil.php?q=<?php echo $row_notas['nota_usuario']; ?>"><img src="http://www.forosdelweb.com/f18/usuarios/imagenes/<?php echo ObtenerImagenUsuario ($row_notas['nota_usuario']); ?>" height="60" /></a>
</td>
<td><a href="http://www.forosdelweb.com/f18/usuarios/perfil.php?q=<?php echo $row_notas['nota_usuario']; ?>"><strong><?php echo ObtenerNombreUsuario ( $row_notas['nota_usuario']); ?></strong></a></td>
</tr>
<tr>
<td><?php echo $row_notas['nota_contenido']; ?></td>
</tr>
<tr>
<td> <!-- DESDE AQUI -->
<?php do { ?>
<?php if (($row_notas['nota_id']) == ($row_documentos['documento_nota'])) { ?>

<a href="docs_tareas/<?php echo $row_documentos['documento_archivo']; ?>" target="_blank"><img src="docs_tareas/<?php echo $row_documentos['documento_archivo']; ?>" height="60" /></a>

<?php } ?>
<?php } while ($row_documentos = mysql_fetch_assoc($documentos)); ?>
</td> <!-- HASTA AQUI -->
<?php } ?>
<?php } while ($row_notas = mysql_fetch_assoc($notas)); ?>
</table>
  #5 (permalink)  
Antiguo 02/04/2013, 11:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Bucle dentro de bucle ¿es posible?

Pues viendo tu código no veo bien que estas haciendo, ¿de donde obtienes $documentos? la idea es que si lo haces desde SQL tienes que pasarle a tu query el valor de la nota actual para que hagas el ciclo sobre los adjuntos de tu nota actual.

Saludos.
  #6 (permalink)  
Antiguo 03/04/2013, 02:55
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

hola de nuevo,
Tanto los Posts (tareas_notas) como los Attachments (documentos) necesito obtenerlos de la bd de mysql,
tengo una tabla para los Posts y otra para los attachments... entonces quiero mostrar por ejemplo:

"SELECT * FROM db_documentos WHERE db_documentos.documento_nota = db_tareas_notas.tarea_id"

...y la intención sería ver algo como:

--tarea_nota 1
------- documento 1.1
------- documento 1.2

-- tarea_nota 2
------- documento 2.1
------- documento 2.2
------- documento 2.3

(etc)

he estado haciendo muchísimas pruebas pero no se como combinar el foreach con los querys de notas y documentos...
:S

MUCHAS GRACIAS!!!!!!!
  #7 (permalink)  
Antiguo 03/04/2013, 04:32
 
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Hola
No entiendo exactamente que pasa porque no muestras el codigo completo, pero a ver si esta indicacion te ayuda:

si se pueden anidar bucles, tal como te han dicho debes usar la sintaxis correcta.
Todo depende de como lo plantees. Si te digo de entrada que debes usar DISTINCT en la sentencia para que no muestre registros repetidos.

Lo que yo haria:
Código PHP:
// obtendria todos los comentarios en primer lugar, en un array asociativo por ejemplo o de la manera que sea. 
//Supongamos que esta variable contiene ese array.

$array_comentarios

// recorreria cada comentario

$c=0;
while(isset(
$array_comentarios[$c])){

// una vez dentro, obtengo los archivos adjuntos de este comentario. 
// No olvides que DISTINCT depura los resultados del cruce de tablas para eliminar resultados coincidentes. 
// Se da por hecho que estas grabando correctamente en db_documentos.documento_nota el id del comentario al que pertenece.

$sql_a_ejecutar "SELECT DISTINCT * FROM db_documentos WHERE db_documentos.documento_nota = ".$array_comentarios[$c]['id'];

// al ejecutar esa sentencia se obtendria un array asociativo por ejemplo, conteniendo los adjuntos de este comentario.
// supongase que el resultado de la consulta fue grabado en una variable llamada $array_adjuntos

echo '--'.$array_comentarios[$c]['nombre'].'<br />'

$a 0;
while(isset(
$array_adjuntos[$a])){
     echo 
'--------'.$array_adjuntos[$a]['nombre'].'<br />';
     
$a++;
}

$c++;

Esto debe mostrarte un esquema parecido al planteado en tu ultimo mensaje. Por supuesto tendrás que adaptarlo a tu programación, es solo una guia.
Espero que sirva,
saludos!

Última edición por Sevillacode; 03/04/2013 a las 04:40
  #8 (permalink)  
Antiguo 03/04/2013, 05:14
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Muchas gracias Sevillacode!!

Comprendo los pasos que propones pero no me termina de salir...

si tengo una consulta llamada $row_notas, puedo obtener los comentarios de ahí?¿?¿ es decir, esto:

Código PHP:
$array_comentarios $row_notas['nota_id']; 
imagino que también tendría que obtener los adjuntos para $array_adjuntos

  #9 (permalink)  
Antiguo 03/04/2013, 05:39
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Este sería el codigo que tengo actualmente y funciona... pero solo me muestra los adjuntos del 1er comentario/nota...



Código PHP:

<table width="100%" border="0">

<?php do { ?>
<?php 
if ($row_notas['nota_id'] != 0)  { ?>
<tr>
<td width="70" rowspan="4" valign="top">
<a href="/usuarios/perfil.php?q=<?php echo $row_notas['nota_usuario']; ?>"><img src="/usuarios/imagenes/<?php echo ObtenerImagenUsuario ($row_notas['nota_usuario']); ?>" height="60" /></a>
</td>
<td colspan="2"><a href="/usuarios/perfil.php?q=<?php echo $row_notas['nota_usuario']; ?>"><strong><?php echo ObtenerNombreUsuario ($row_notas['nota_usuario']); ?></strong></a></td>
</tr>
<tr>
<td colspan="2"><?php echo $row_notas['nota_contenido']; ?></td>
</tr>
<tr>
<td valign="bottom">

<!-- adjuntos ...  -->
<?php do { ?>
<?php 
if (($row_notas['nota_id']) == ($row_documentos['documento_nota'])) { ?>

<a href="docs_tareas/<?php echo $row_documentos['documento_archivo']; ?>" target="_blank"><img src="docs_tareas/<?php echo $row_documentos['documento_archivo']; ?>" height="60" /></a>

<?php ?>
<?php 
} while ($row_documentos mysql_fetch_assoc($documentos)); ?>
<!-- ... adjuntos -->

</td>
<tr>
<td colspan="2" valign="bottom"><?php echo $row_notas['nota_fecha']; ?> a las <?php echo $row_notas['nota_hora']; ?>
<?php 
if ($_SESSION['MM_usuario_ID'] == $row_notas['nota_usuario']) { ?>
  · <a href="tarea_imagen_nota.php?q=<?php echo $row_notas['nota_id']; ?>">Adjuntar</a> · <a href="nota_editar.php?q=<?php echo $row_notas['nota_id']; ?>"> Editar</a> · <a href="nota_eliminar.php?q=<?php echo $row_notas['nota_id']; ?>">Eliminar</a>
<?php ?></td>
</tr>
<tr>
<td colspan="4" valign="top"><hr /></td>
</tr>
<?php ?>
<?php 
} while ($row_notas mysql_fetch_assoc($notas)); ?>
</table>
  #10 (permalink)  
Antiguo 03/04/2013, 05:54
 
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

No se de donde salen $documentos y $notas, pero parece que estas obteniendo todos los documentos que existen para despues filtrar, correcto?
Creo que es mas optimo realizar el cruce en sql, aun asi, estas seguro que el comentario id 2 tiene asociado algun documento? porque parece correcto...

en el segundo do, comprueba el valor de $row_notas['nota_id'] y de $row_documentos['documento_nota'] a ver si coinciden o por que no. usa var_dump para ver el tipo puede que uno sea numerico y otro no? cosas mas raras pasan...
  #11 (permalink)  
Antiguo 03/04/2013, 07:25
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Pues $notas y $documentos los obtengo de la consulta siguiente:
Código PHP:
$varNota_notas "0";
if (isset(
$row_tareas['tarea_id'])) {
  
$varNota_notas $row_tareas['tarea_id'];
}
mysql_select_db($database_gestion_hydba$gestion_hydba);
$query_notas sprintf("SELECT * FROM db_tareas_notas WHERE db_tareas_notas.nota_tarea = %s ORDER BY db_tareas_notas.nota_crono DESC"GetSQLValueString($varNota_notas"int"));
$notas mysql_query($query_notas$gestion_hydba) or die(mysql_error());
$row_notas mysql_fetch_assoc($notas);
$totalRows_notas mysql_num_rows($notas);

mysql_select_db($database_gestion_hydba$gestion_hydba);
$query_documentos "SELECT * FROM db_documentos  ";
$documentos mysql_query($query_documentos$gestion_hydba) or die(mysql_error());
$row_documentos mysql_fetch_assoc($documentos);
$totalRows_documentos mysql_num_rows($documentos); 
... y si, como bien dices, estoy obteniendo todos los documentos y luego le pido que solo me muestre donde 'documento_nota' coincide con 'nota_id'... pero habia probado filtrando los documentos desde la consulta y el resultado era el mismo... :S

si, estoy seguro de que el comentario id 2 tiene documentos... ademas cuando yo inserto por ejemplo, un comentario id 1 con sus documentos visibles y inserto un nuevo comentario (id 2), los documentos del comentario id 1 que antes eran visibles desaparecen... y me muestra los documentos del comentario id 2... y si elimino comentario id 2, vuelvo a ver el comentario id 1 con sus documentos....

¿es posible que al decir $documento_nota = $nota_id solo quede bien definido para el primer comentario y a partir del comentario id 2 no quede definido que documento va con que nota?

o quiza seria mejor hacerlo con foreach como proponiais, pero en ese caso no se como hacerlo...
  #12 (permalink)  
Antiguo 03/04/2013, 16:11
 
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Pues yo usaria el planteamiento que te propuse.
Prueba a hacerlo de esta manera

Código PHP:
// primero la conexion tal cual de los comentarios
mysql_select_db($database_gestion_hydba$gestion_hydba);
$query_notas sprintf("SELECT * FROM db_tareas_notas WHERE db_tareas_notas.nota_tarea = %s ORDER BY db_tareas_notas.nota_crono DESC"GetSQLValueString($varNota_notas"int"));
$notas mysql_query($query_notas$gestion_hydba) or die(mysql_error());
$row_notas mysql_fetch_assoc($notas);
$totalRows_notas mysql_num_rows($notas);

$n 0;
while(isset(
$row_notas[$n])){
     
/* AQUI POR EJEMPLO EL HTML QUE MONTA LA NOTA EN SI */
     // para obtener los datos debes referirte a $row_notas[$n]['nombredelcampoquequieras']
     
     // por cada uno de los comentarios, obten los adjuntos. 
     // fijate que te he cambiado un poco la sentencia sql
     
mysql_select_db($database_gestion_hydba$gestion_hydba);
     
$query_documentos "SELECT DISTINCT * FROM db_documentos d,  db_tareas_notas t WHERE d.documento_nota = " $row_notas[$n]['nota_id'];
     
$documentos mysql_query($query_documentos$gestion_hydba) or die(mysql_error());
     
$row_documentos mysql_fetch_assoc($documentos);
     
$totalRows_documentos mysql_num_rows($documentos);    
     
     
// ahora solo hay que recorrer el array resultante y mostrar lo requerido
     
$d 0;
     while(isset(
$row_documentos[$d])){
         
/* AQUI EL HTML QUE MONTA LOS ADJUNTOS */
         // para acceder a los datos debes referirte a $row_documentos[$d]['nombredelcampoquequieras']
         
$d++;
    }
     
     unset(
$row_documentos);
     unset(
$totalRows_documentos);
     
$n++:

si sustituyes tu planteamiento por este debe funcionarte
  #13 (permalink)  
Antiguo 04/04/2013, 01:54
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Buahh!!! muchisimas gracias Sevillacode!!

tiene muy buena pinta! pero creo que me estoy dejando algo...

cuando ejecuto me da el error " $n++: "
...he probado de cambiar " $n++: " por " $n++; " y entonces pasa a darme error en:
Código PHP:
$query_notas sprintf("SELECT * FROM db_tareas_notas WHERE db_tareas_notas.nota_tarea = %s ORDER BY db_tareas_notas.nota_crono DESC"
y en:
Código PHP:
$query_documentos "SELECT DISTINCT * FROM db_documentos d,  db_tareas_notas t WHERE d.documento_nota = " $row_notas[$n]['nota_id']; 
ufff algo se me escapaaaa

Este es el codigo completo:

Código PHP:

<?php require_once('../connections/gestion_hydba.php'); 

if (!
function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$varTarea_tareas "0";
if (isset(
$_GET["q"])) {
  
$varTarea_tareas $_GET["q"];
}
mysql_select_db($database_gestion_hydba$gestion_hydba);
$query_tareas sprintf("SELECT * FROM db_tareas WHERE db_tareas.tarea_id = %s"GetSQLValueString($varTarea_tareas"int"));
$tareas mysql_query($query_tareas$gestion_hydba) or die(mysql_error());
$row_tareas mysql_fetch_assoc($tareas);
$totalRows_tareas mysql_num_rows($tareas);

// primero la conexion tal cual de los comentarios 
mysql_select_db($database_gestion_hydba$gestion_hydba); 
$query_notas sprintf("SELECT * FROM db_tareas_notas WHERE db_tareas_notas.nota_tarea = %s ORDER BY db_tareas_notas.nota_crono DESC"GetSQLValueString($varNota_notas"int")); 
$notas mysql_query($query_notas$gestion_hydba) or die(mysql_error()); 
$row_notas mysql_fetch_assoc($notas); 
$totalRows_notas mysql_num_rows($notas); 

// por cada uno de los comentarios, obten los adjuntos.  
// fijate que te he cambiado un poco la sentencia sql 
mysql_select_db($database_gestion_hydba$gestion_hydba); 
$query_documentos "SELECT DISTINCT * FROM db_documentos d,  db_tareas_notas t WHERE d.documento_nota = " $row_notas[$n]['nota_id']; 
$documentos mysql_query($query_documentos$gestion_hydba) or die(mysql_error()); 
$row_documentos mysql_fetch_assoc($documentos); 
$totalRows_documentos mysql_num_rows($documentos);
?>


<?php 

$n 
0
while(isset(
$row_notas[$n])){ 
     
/* AQUI POR EJEMPLO EL HTML QUE MONTA LA NOTA EN SI */ 
     // para obtener los datos debes referirte a $row_notas[$n]['nombredelcampoquequieras'] 
    
$row_notas[$n]['nota_contenido'];
    

     
// ahora solo hay que recorrer el array resultante y mostrar lo requerido 
     
$d 0
     while(isset(
$row_documentos[$d])){ 
         
/* AQUI EL HTML QUE MONTA LOS ADJUNTOS */ 
         // para acceder a los datos debes referirte a $row_documentos[$d]['nombredelcampoquequieras'] 
    
$row_documentos[$d]['documento_archivo'];
         
         
$d++; 
    } 
      
     unset(
$row_documentos); 
     unset(
$totalRows_documentos); 

     
$n++: 
}

?>



<?php
mysql_free_result
($tareas);
?>
  #14 (permalink)  
Antiguo 04/04/2013, 01:57
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

por cierto, por que es necesario mencionar " db_tareas_notas t " en esta linea??
Código PHP:
$query_documentos "SELECT DISTINCT * FROM db_documentos d,  db_tareas_notas t WHERE d.documento_nota = " $row_notas[$n]['nota_id']; 
MUCHAS GRACIAAAS!!!!
  #15 (permalink)  
Antiguo 04/04/2013, 02:47
 
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

El error del ; estaba claro, me equivoque al escribirlo.

ahora, para las sentencias que te dan error, sustituye la sentencia de $query_notas por esta (quitale el sprintf)

Código PHP:
SELECT FROM db_tareas_notas ORDER BY db_tareas_notas.nota_crono DESC 
y la query_documentos por esta

Código PHP:
"SELECT * FROM db_documentos WHERE documento_nota = " $row_notas[$n]['nota_id']; 
replanteando veo que no es necesario un cruce de tablas para lo que necesitas, que es obtener todos los documentos de la nota, simplemente obten los que tienen el id de la nota en documento_nota
Contestando a tu pregunta, es que en la consulta del cruce se me olvido apuntar a esa tabla, seria asi

Código PHP:
"SELECT DISTINCT * FROM db_documentos d,  db_tareas_notas t WHERE d.documento_nota = t." $row_notas[$n]['nota_id']; 
pero te digo que no es necesario pienso yo, si la necesitas ahi la tienes.

Ahora lo mas importante: esa sacada de datos de los documentos tiene que hacerse dentro del while de notas, tal como lo tienes no va a funcionarte creo que te los devolveria todos porque $row_notas[$n]['nota_id'] ahi no es nada. tienes que hacer el while y dentro obtener los documentos, tal como lo he planteado yo.

Eso suponiendo claro que los errores a los que te refieres son erroes de SQL pues no has especificado nada..

Última edición por Sevillacode; 04/04/2013 a las 02:52
  #16 (permalink)  
Antiguo 04/04/2013, 05:00
 
Fecha de Ingreso: marzo-2013
Mensajes: 11
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Tienes razon!!!! ya he corregido las sentencias y he metido el SELECT de documentos en el While de notas y ahora no me sale ningun error... pero me sale la pagina completamente en blanco!! y eso que he puesto el echo tanto en Nota como en Documentos (cosa que tambien se me habia pasado...) no se si es que el echo no se esta ejecutando bien o no se estan obteniendo los datos...


Código PHP:
<?php require_once('../connections/gestion_hydba.php'); 

if (!
function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  if (
PHP_VERSION 6) {
    
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}
}

$varTarea_tareas "0";
if (isset(
$_GET["q"])) {
  
$varTarea_tareas $_GET["q"];
}
mysql_select_db($database_gestion_hydba$gestion_hydba);
$query_tareas sprintf("SELECT * FROM db_tareas WHERE db_tareas.tarea_id = %s"GetSQLValueString($varTarea_tareas"int"));
$tareas mysql_query($query_tareas$gestion_hydba) or die(mysql_error());
$row_tareas mysql_fetch_assoc($tareas);
$totalRows_tareas mysql_num_rows($tareas);

// primero la conexion tal cual de los comentarios 
mysql_select_db($database_gestion_hydba$gestion_hydba); 
$query_notas "SELECT * FROM db_tareas_notas ORDER BY db_tareas_notas.nota_crono DESC "
$notas mysql_query($query_notas$gestion_hydba) or die(mysql_error()); 
$row_notas mysql_fetch_assoc($notas); 
$totalRows_notas mysql_num_rows($notas); 
?>





<?php 

$n 
0
while(isset(
$row_notas[$n])){ 
/* AQUI POR EJEMPLO EL HTML QUE MONTA LA NOTA EN SI */ 
// para obtener los datos debes referirte a $row_notas[$n]['nombredelcampoquequieras'] 
    
echo $row_notas[$n]['nota_contenido'];
    
// por cada uno de los comentarios, obten los adjuntos.  
// fijate que te he cambiado un poco la sentencia sql 
mysql_select_db($database_gestion_hydba$gestion_hydba); 
$query_documentos "SELECT * FROM db_documentos WHERE documento_nota = " $row_notas[$n]['nota_id']; 
$documentos mysql_query($query_documentos$gestion_hydba) or die(mysql_error()); 
$row_documentos mysql_fetch_assoc($documentos); 
$totalRows_documentos mysql_num_rows($documentos);

// ahora solo hay que recorrer el array resultante y mostrar lo requerido 

     
$d 0
     while(isset(
$row_documentos[$d])){ 
/* AQUI EL HTML QUE MONTA LOS ADJUNTOS */ 
// para acceder a los datos debes referirte a $row_documentos[$d]['nombredelcampoquequieras'] 
    
echo $row_documentos[$d]['documento_archivo'];
         
         
$d++; 
    } 
      
     unset(
$row_documentos); 
     unset(
$totalRows_documentos); 
     
$n++;
}

?>



<?php
mysql_free_result
($tareas);
?>
  #17 (permalink)  
Antiguo 04/04/2013, 05:06
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 7 meses
Puntos: 58
Respuesta: Bucle dentro de bucle ¿es posible?

Pues a mi me sorprende este:
Código PHP:
Ver original
  1. while(isset($row_notas[$n])){
No me suena que se pueda hacer una función en el while, y además, cuando avanza el iterador?

Tienes los errores de php activados? te recomiendo activarlos todos quizá no estés viendo alguno de ellos.
  #18 (permalink)  
Antiguo 04/04/2013, 17:14
 
Fecha de Ingreso: abril-2013
Ubicación: Sevilla
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Bucle dentro de bucle ¿es posible?

Ok, activa los errores modificando el php.ini en el servidor o con los comandos en php en el propio documento.

Código PHP:
ini_set("display_errors"1);
error_reporting(E_ALL); 
Estos comandos pueden o no funcionarte dependiendo de la configuracion del servidor.

Con respecto a si se puede usar el isset dentro del while, te aseguro que es la manera de validar que realizo constantemente me parece mas optima que un for en estas situaciones mas que nada porque en caso que no exista ningun registro no genera notice. Y la iteracion avanza al final del while como bien sabras ($n++).

haz eso y haz un print_r al array de notas a verque está obteniendo.
Si solo muestra array{} ejecuta la consulta directamente en el phpmyadmin a ver que sucede. Ve probando.

Etiquetas: bucle, tabla
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 22:35.