Foros del Web » Programando para Internet » PHP »

Comenatrios debajo del registro

Estas en el tema de Comenatrios debajo del registro en el foro de PHP en Foros del Web. Hola a todos, Me he encontrado con el siguiente problema. tengo 1 tabla "citas" en la que almaceno unas frases que los usuarios insertan, luego ...
  #1 (permalink)  
Antiguo 14/12/2009, 04:11
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Comenatrios debajo del registro

Hola a todos,
Me he encontrado con el siguiente problema.
tengo 1 tabla "citas" en la que almaceno unas frases que los usuarios insertan, luego tengo otra tabla "comentarios" en la que la gente hace comentarios sobre las citas.
Ahora lo que quiero es que cada comentario que se haga sobre una cita, salga justo debajo de su comentario.
En la tabla comentarios hay un campo que se relaciona con la tabla "citas".
Alguien me podria echar una mano?
Gracias
  #2 (permalink)  
Antiguo 14/12/2009, 04:22
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Respuesta: Comenatrios debajo del registro

Hola. ¿Qué quiere decir "Ahora lo que quiero es que cada comentario que se haga sobre una cita, salga justo debajo de su comentario."?
  #3 (permalink)  
Antiguo 14/12/2009, 04:24
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Respuesta: Comenatrios debajo del registro

Perdon. Pues quiero que cada cita que se haga, justo debajo salgan sus comentarios.
  #4 (permalink)  
Antiguo 14/12/2009, 04:50
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Respuesta: Comenatrios debajo del registro

Supongo que tienes las dos tablas relacionadas por la id de la cita. En ese caso, simplemente haces una query pidiendo los datos de la cita y luego otra pidiendo todos los comentarios que tengan el id de la cita.

Algo así como:

Código PHP:
$query1 "SELECT * FROM citas WHERE id = " $id_cita;

$query2 "SELECT * FROM comentarios WHERE cita = " $id_cita
  #5 (permalink)  
Antiguo 14/12/2009, 05:42
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Respuesta: Comenatrios debajo del registro

Pero el caso es el siguiente.
Yo repito todos los registros de la tabla citas, y a la hora de repetir sus comentarios lo que me hace es.
Primero me imprime todas las citas y despues me repite todos los comentarios y yo lo que quiero es que me imprima los comentarios justo debajo de cada cita.
Por ejemplo:
CITA ID1: mañana veras como llueve
COMENTARIO ID1: ya veras que si.
COMENTARIO ID2: Saldra el sol, ya veras.
CITA ID2: hace buen tiempo hoy
COMENATRIO ID5: pues será donde tu estes
COMENTARIO ID35: Aqui nio hace nada de calor

Un saludo y gracias
  #6 (permalink)  
Antiguo 14/12/2009, 05:51
 
Fecha de Ingreso: junio-2006
Ubicación: Antofagasta
Mensajes: 216
Antigüedad: 18 años, 5 meses
Puntos: 7
Respuesta: Comenatrios debajo del registro

no se si se podrá pero creo que entonces la segunda consulta (obtener los comentario) tendrias que meterla dentro del while que haces para recorrer e imprimir cada cita.

no se si se pueda hacer eso, solo se me ocurrio en el momento.

saludos
  #7 (permalink)  
Antiguo 14/12/2009, 06:11
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Busqueda Respuesta: Comenatrios debajo del registro

Exacto, tú usarás un bucle para repetir las citas, entonces en cada vuelta de ese bucle tienes que meter la segunda query que te puse. La id de la cita será diferente en cada vuelta del bucle.

Algo así:

Código PHP:
$query1 "SELECT * FROM citas";
$stmt $conn->prepare($query1);
$stmt->execute();
$citas $stmt->fetchAll();

foreach (
$citas as $cita) {

    echo 
"CITA ID" $cita["id"] . ": " $cita["texto"] . "<br />";

    
$query2 "SELECT * FROM comentarios WHERE cita =:cita";  
    
$stmt $conn->prepare($query2);
    
$stmt->bindParam(":cita"$cita["id"]);
    
$stmt->execute();
    
$comentarios $stmt->fetchAll();

    foreach (
$comentarios as $comentario) {
        echo 
"COMENTARIO ID" $comentario["id"] . ": " $comentario["texto"] . "<br />";
    }


  #8 (permalink)  
Antiguo 14/12/2009, 07:08
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Respuesta: Comenatrios debajo del registro

Perdona pero no me aclaro con tu codigo. Te coloco aqui el codigo que tengo y si puedes me gustaria que me dijeras como colocarlo segun este codigo, que es mas o menos el que controlo un poco.
Código PHP:
<?php require_once('../Connections/noscasa.php'); ?>
<?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;
}
}

$maxRows_citas 10;
$pageNum_citas 0;
if (isset(
$_GET['pageNum_citas'])) {
  
$pageNum_citas $_GET['pageNum_citas'];
}
$startRow_citas $pageNum_citas $maxRows_citas;

mysql_select_db($database_noscasa$noscasa);
$query_citas "SELECT * FROM piensas, gente WHERE piensas.piusuario=gente.id_gente ORDER BY  id_piensas DESC";
$query_limit_citas sprintf("%s LIMIT %d, %d"$query_citas$startRow_citas$maxRows_citas);
$citas mysql_query($query_limit_citas$noscasa) or die(mysql_error());
$row_citas mysql_fetch_assoc($citas);

if (isset(
$_GET['totalRows_citas'])) {
  
$totalRows_citas $_GET['totalRows_citas'];
} else {
  
$all_citas mysql_query($query_citas);
  
$totalRows_citas mysql_num_rows($all_citas);
}
$totalPages_citas ceil($totalRows_citas/$maxRows_citas)-1;

mysql_select_db($database_noscasa$noscasa);
$query_comenta "SELECT * FROM comentarios, piensas, gente WHERE comentarios.idpiensas=piensas.id_piensas AND comentarios.cousuario=gente.id_gente";
$comenta mysql_query($query_comenta$noscasa) or die(mysql_error());
$row_comenta mysql_fetch_assoc($comenta);
$totalRows_comenta mysql_num_rows($comenta);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<?php do { ?>
  <p><?php echo $row_citas['piensas']; ?><?php echo $row_citas['nombre']; ?> <?php echo $row_citas['apellidos']; ?></p>
  <?php } while ($row_citas mysql_fetch_assoc($citas)); ?>
<?php 
do { ?>
  <p><?php echo $row_comenta['cocomenatario']; ?> <?php echo $row_comenta['nombre']; ?> <?php echo $row_comenta['apellidos']; ?></p>
    <?php } while ($row_comenta mysql_fetch_assoc($comenta)); ?>
</body>
</html>
<?php
mysql_free_result
($citas);

mysql_free_result($comenta);
?>
Aqui lo que hago primero es repetir 10 veces los datos de la tabla "piensas" y lo que no se hacer es colocar los registros de la tabla comentario debajo de cada uno de sus citas.
Gracias de nuevo
  #9 (permalink)  
Antiguo 14/12/2009, 07:32
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Respuesta: Comenatrios debajo del registro

Tú haces dos bucles do...while. Se trata de que el segundo bucle no esté después del primero, sino dentro del primero. Pero además, la consulta que haces para obtener los comentarios también debe estar dentro de ese primer bucle.

Código PHP:
<body>
<?php do { ?>
  <p><?php echo $row_citas['piensas']; ?><?php echo $row_citas['nombre']; ?> <?php echo $row_citas['apellidos']; ?></p>
       <?php do {
       
mysql_select_db($database_noscasa$noscasa);
       
$query_comenta "SELECT * FROM comentarios, piensas, gente WHERE comentarios.idpiensas=" $row_citas["id_piensas"] . " AND comentarios.cousuario=gente.id_gente";
       
$comenta mysql_query($query_comenta$noscasa) or die(mysql_error());
       
$row_comenta mysql_fetch_assoc($comenta);
       
$totalRows_comenta mysql_num_rows($comenta); 
        
?>
        <p><?php echo $row_comenta['cocomenatario']; ?> <?php echo $row_comenta['nombre']; ?> <?php echo $row_comenta['apellidos']; ?></p>
      <?php } while ($row_comenta mysql_fetch_assoc($comenta)); ?>
  <?php } while ($row_citas mysql_fetch_assoc($citas)); ?>
</body>
No he revisado que esté bien lo que te he copiado, pero es para que comprendas la idea.

La teoría es:

1º: Consulto a la base de datos y le pido todas las citas.
2º: Hago un bucle para imprimir todas las citas que me ha devuelto la base de datos.
3º: Para cada vuelta de ese bucle, consulto a la base de datos y le pido todos los comentarios de la cita actual (la que se corresponde con esa vuelta del bucle).
4º: Hago un bucle para imprimir todos los comentarios que me ha devuelto la base de datos.
5º: Cierro el bucle de los comentarios.
6º: Cierro el bucle de las citas
  #10 (permalink)  
Antiguo 14/12/2009, 08:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Respuesta: Comenatrios debajo del registro

Pues lo que me hace es un bucle sin parar, me saca el primer registro de cada una de las tablas y me los repite indefinidamente.
Como lo parooooo?!
Gracias
  #11 (permalink)  
Antiguo 14/12/2009, 08:28
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Respuesta: Comenatrios debajo del registro

Prueba con esto, el orden de algunas líneas estaba mal:

Código PHP:
<body>
<?php do {
       
mysql_select_db($database_noscasa$noscasa);
       
$query_comenta "SELECT * FROM comentarios, piensas, gente WHERE comentarios.idpiensas=" $row_citas["id_piensas"] . " AND comentarios.cousuario=gente.id_gente";
       
$comenta mysql_query($query_comenta$noscasa) or die(mysql_error());
       
$row_comenta mysql_fetch_assoc($comenta);
       
$totalRows_comenta mysql_num_rows($comenta); 
?>
  <p><?php echo $row_citas['piensas']; ?><?php echo $row_citas['nombre']; ?> <?php echo $row_citas['apellidos']; ?></p>
       <?php do { ?>
        <p><?php echo $row_comenta['cocomenatario']; ?> <?php echo $row_comenta['nombre']; ?> <?php echo $row_comenta['apellidos']; ?></p>
      <?php } while ($row_comenta mysql_fetch_assoc($comenta)); ?>
  <?php } while ($row_citas mysql_fetch_assoc($citas)); ?>
</body>
De todos modos, no te doy el código para que lo copies (no lo he probado), sino para que entiendas lo que te quiero decir y lo apliques.
  #12 (permalink)  
Antiguo 14/12/2009, 08:57
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Respuesta: Comenatrios debajo del registro

Pues no, me saca esto:
"registro de la BB.DD piensas" ¿Que estas pensando?

registro de la BB.DD comentarios" pues anda que a mi Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" a ver si ahora sale algo Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" pues anda que a mi Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" a ver si ahora sale algo Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" pues anda que a mi Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" a ver si ahora sale algo Miguel Angel Reverte Zapata

registro de la BB.DD piensas" Pues yo pensaba


registro de la BB.DD piensas" ya estamos que nos tiramos de las orejas

registro de la BB.DD comentarios" esto parece que va bien Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" como funcione ya veras que ostia Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" esto parece que va bien Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" como funcione ya veras que ostia Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" esto parece que va bien Miguel Angel Reverte Zapata

registro de la BB.DD comentarios" como funcione ya veras que ostia Miguel Angel Reverte Zapata

para que te hagas una idea.

Los registros de la BB.DD comentarios 8 y 9 (pues anda que a mi, a ver si ahora sale algo) estan relacionadas con el registro de la BB.DD piensas 1 (¿Que estas pensando?)

A ver si esto te sirve de ayuda
Gracias de nuevo
  #13 (permalink)  
Antiguo 14/12/2009, 09:52
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Respuesta: Comenatrios debajo del registro

Esto me suena más a cómo enlazas las tablas entre sí en tus consultas SQL.

No he probado tu código ni tampoco el que yo te copié a partir del tuyo. Lo que pretendo es explicarte la teoría de cómo se hace para que tú la apliques a tu código, que lo entiendes mejor. No puedo revisar tu código de arriba a abajo, lo siento.

En resumen:
Haz una primera consulta que te devuelva las citas. Haz un bucle para imprimir esas citas. En cada vuelta de ese bucle, usa la id de cita correspondiente para hacer una consulta que te devuelva los comentarios de esa cita.
Ten cuidado al enlazar las tablas en tus consultas, si no las enlazas bien puedes obtener resultados repetidos, como te está pasando. Te aconsejo que las enlaces mediante INNER JOIN, LEFT JOIN o RIGHT JOIN (aquí tienes una explicación).
  #14 (permalink)  
Antiguo 14/12/2009, 10:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Respuesta: Comenatrios debajo del registro

Ok, muhas gracias, voy a ver si consigo algo.
  #15 (permalink)  
Antiguo 15/12/2009, 04:11
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 9 meses
Puntos: 5
Respuesta: Comenatrios debajo del registro

Bueno al final ya lo he solucionado. El problema estaba en que le faltaba agruparlos. Muchas gracias mariogl84 por la ayuda.
Un saludo
  #16 (permalink)  
Antiguo 15/12/2009, 04:20
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Respuesta: Comenatrios debajo del registro

Menos mal, me alegro.
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:08.