Foros del Web » Programando para Internet » PHP »

mostrar mensajes y respuestas

Estas en el tema de mostrar mensajes y respuestas en el foro de PHP en Foros del Web. Gente: programé un script para que los usuarios de un sitio puedan dejar un mensaje, y los clientes, logueándose, puedan responderlos. Los mensajes y las ...
  #1 (permalink)  
Antiguo 31/01/2011, 10:40
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 20 años, 1 mes
Puntos: 1
mostrar mensajes y respuestas

Gente: programé un script para que los usuarios de un sitio puedan dejar un mensaje, y los clientes, logueándose, puedan responderlos.
Los mensajes y las respuestas se guardan en un tabla en mysql, así:

id, id_usuario, id_cliente, fecha, mensaje, estado, id_origen

en donde estado es "pendiente" o"respondido" e id_origen guarda el id del mensaje original al cuál se está respondiendo (es decir, si un usuario deja un mensaje se graba con id 1 y queda con estado "pendiente" e id_origen vacío, y cuando el cliente responde, grabándose con id 2 e id_origen pasa a tener el valor 1 (es decir, el del id del mensaje original del cuál éste es la respuesta). Además, el mensaje originario, con id 1, pasa su estado a "respondido".
A su vez, si el usuario re-responde, esta respuesta tendrá un id 3, con estado "pendiente" y el id_origen va a ser el id 2, mientras que el mensaje con id pasará su estado a "respondido" y así sucesivamente.

Mi pregunta es, de qué manera puedo hacer una consulta que los liste, pero muestre los mensajes y sus respuestas debajo, como en algunos foros, con una tabulación o "bullets" o algo así.

Puedo hacer la consulta común tipo


Código:
$sql="SELECT *, men.nombre as nombre_mensaje, men.id as idmen, men.email as email_mensaje, un.nombre as nombre_unidad, prop.nombre as nombre_propiedad from pactemos_mensajes men
inner join pactemos_unidades un
on men.id_unidad=un.id

inner join pactemos_propiedades prop
on un.id_propiedad=prop.id

where prop.id_usuario='$user_id' order by $orden";
Pero no se me ocurre cómo combinar esto con las respuestas en la consulta, ni mucho menos cómo mostrarlo en php.

quizá alguien hizo algo parecido y me pueda ayudar.

Gracias a todos.
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #2 (permalink)  
Antiguo 31/01/2011, 11:56
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años, 7 meses
Puntos: 39
Respuesta: mostrar mensajes y respuestas

Mi estimado creoq ue te complicaste mucho la vida al hacer una tabla para preguntas y respuestas por lo regular tienes una de preguntas y otra de respuestas pero en fin ya lo hiciste y ahora el caso es resolver tu problema.


Aqui el problema de tu tabla es que no podemos identificar que registro es pregunta y que registro es respuesta.

Deberias de poner un campo mas que identifique si es pregunta o respuesta de perdida.

PAra asi poder hacer un query ordenado


yo le agregaria un campo

i_Tipo

donde si es una pregunta se registre 1 y si es respuesta se registre un 0 ejemplo


asi podriamos obtener primero todas las preguntas y despues las respuestas..


saludos.
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #3 (permalink)  
Antiguo 31/01/2011, 12:36
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: mostrar mensajes y respuestas

Gracias Potro! En realidad, primero había hecho dos tablas, pero luego dejé sólo una y le agregué el campo id_origen.
Luego repensaré todo con dos tablas diferentes nuevamente, a ver si queda mejor.
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #4 (permalink)  
Antiguo 31/01/2011, 15:36
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años, 7 meses
Puntos: 39
Respuesta: mostrar mensajes y respuestas

Si sera lo mejor, asi te acostumbraras a manejar entidad de relacion
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/
  #5 (permalink)  
Antiguo 01/02/2011, 07:29
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: mostrar mensajes y respuestas

Potro: volví a las dos tablas, y con la siguiente programación, no logro ver las respuestas
a ver qué opinas:
Código:
<span class="ubica_menu">Listar mensajes</span><br /><?php 
?>

<table width="700" border="0">
<tr>
<td>Fecha
<a href="listar.php?que=<?php echo $que; ?>&orden=fecha asc"><img border="0" src="elementos/up.gif" width="14" height="10"></a>
<a href="listar.php?que=<?php echo $que; ?>&orden=fecha desc"><img border="0" src="elementos/down.gif" width="14" height="10"></a></td>
<td>nombre
<a href="listar.php?que=<?php echo $que; ?>&orden=nombre_mensaje asc"><img border="0" src="elementos/up.gif" width="14" height="10"></a>
<a href="listar.php?que=<?php echo $que; ?>&orden=nombre_mensaje desc"><img border="0" src="elementos/down.gif" width="14" height="10"></a></td>
<td>Unidad
<a href="listar.php?que=<?php echo $que; ?>&orden=nombre_unidad asc"><img border="0" src="elementos/up.gif" width="14" height="10"></a>
<a href="listar.php?que=<?php echo $que; ?>&orden=nombre_unidad desc"><img border="0" src="elementos/down.gif" width="14" height="10"></a></td>
<td>Propiedad
<a href="listar.php?que=<?php echo $que; ?>&orden=nombre_unidad asc"><img border="0" src="elementos/up.gif" width="14" height="10"></a>
<a href="listar.php?que=<?php echo $que; ?>&orden=nombre_unidad desc"><img border="0" src="elementos/down.gif" width="14" height="10"></a></td>

<td>Estado
<a href="listar.php?que=<?php echo $que; ?>&orden=estado asc"><img border="0" src="elementos/up.gif" width="14" height="10"></a>
<a href="listar.php?que=<?php echo $que; ?>&orden=estado desc"><img border="0" src="elementos/down.gif" width="14" height="10"></a></td>

<td>responder</td>
</tr>
<?php 
if ($orden=="")
{$orden="men.fecha";}
else
{$orden=$orden;}
$sql="SELECT *, men.nombre as nombre_mensaje, men.id as idmen, men.email as email_mensaje, un.nombre as nombre_unidad, prop.nombre as nombre_propiedad from pactemos_mensajes men
inner join pactemos_unidades un
on men.id_unidad=un.id

inner join pactemos_propiedades prop
on un.id_propiedad=prop.id

where prop.id_usuario='$user_id' order by $orden";

$result = mysql_query($sql, $conexion);
while ($row=mysql_fetch_array($result))
{




$id=$row['idmen'];
$nombre_mensaje=$row['nombre_mensaje'];
$nombre_unidad=$row['nombre_unidad'];
$nombre_propiedad=$row['nombre_propiedad'];
$mensaje=$row['consulta'];
$fecha=$row['fecha'];
$email=$row['email_mensaje'];
$estado=$row['estado'];
?>
<tr>
<td style="border-bottom:1px solid #CCCCCC;"><?php echo $fecha; ?></td>
<td style="border-bottom:1px solid #CCCCCC;"><?php echo $nombre_mensaje; ?></td>
<td style="border-bottom:1px solid #CCCCCC;"><?php echo $nombre_unidad; ?></td>
<td style="border-bottom:1px solid #CCCCCC;"><?php echo $nombre_propiedad; ?></td>
<td style="border-bottom:1px solid #CCCCCC;"><?php echo $estado; ?></td>
<td><?php if ($estado=="pendiente") {?><a href="responder.php?id=<?php echo $id; ?>&nombre=<?php echo $nombre_mensaje; ?>&mensaje=<?php echo $mensaje; ?>">Responder</a> <?php } ?></td>
</tr>
<tr>
<td cellspacing="3" cellpadding="5"></td>
<td  colspan="5" cellspacing="3" cellpadding="5"><?php echo $mensaje; ?></td>
</tr>

<?php

	$sql3="SELECT *, res.respuesta as respuesta, res.fecha as fecha_respuesta, 
	where id_mensaje='$id'";
	echo $sql3;	
	$result3 = mysql_query($sql3, $conexion);
	while ($rowb=mysql_fetch_array($result3))
	{
	$fecha_respuesta=$rowb['fecha_respuesta'];
	$respuesta=$rowb['respuesta'];
	?>
	<tr>
	<td colspan="6" style="border-bottom:1px solid #CCCCCC;">Respuesta</td>
	<td style="border-bottom:1px solid #CCCCCC;"><?php echo $fecha_respuesta; ?></td>
	<td colspan="5" style="border-bottom:1px solid #CCCCCC;"><?php echo $respuesta; ?></td>
	</tr>
	
	<?php
	}


}	  
?>
</table>
Por otro lado, esto de usar dos tablas, implica que cada mensaje sólo puede tener una respuesta, no puede haber un diálogo como si usara el formato que comento en el post original, pero de todos modos no sé cómo resolver.

¿alguna idea?

gracias!
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #6 (permalink)  
Antiguo 01/02/2011, 10:39
Avatar de arielcasanova  
Fecha de Ingreso: octubre-2004
Ubicación: Bahía Blanca - Argentina
Mensajes: 332
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: mostrar mensajes y respuestas

gracias pup, pero no me sirve ya que no hay respuesta y contrarespuesta de lo susuarios.

no sé si se ntiende lo que necesito
la idea es que quede escalonado algoa sí:

----- Mesaje: Hola

---------- Respuesta: Hola, qué tal?

--------------- Contrarespuesta: Muy bien, y tú?

-------------------- Contra-contrarespuesta: de maravillas.


y así...
__________________
Ariel Casanova
diseño y desarrollo web estratégico
www.emporia.com.ar
  #7 (permalink)  
Antiguo 01/02/2011, 11:05
Avatar de Potro  
Fecha de Ingreso: abril-2001
Mensajes: 2.249
Antigüedad: 23 años, 7 meses
Puntos: 39
Respuesta: mostrar mensajes y respuestas

Cita:
Por otro lado, esto de usar dos tablas, implica que cada mensaje sólo puede tener una respuesta, no puede haber un diálogo como si usara el formato que comento en el post original, pero de todos modos no sé cómo resolver.

¿alguna idea?

gracias!
No mi estimado un mensaje puede tener infinidad de respuestas solo es la logica de como imprimir el HTML...


ejemplo ilustrativo no quiere decir que sea tu html:


Código PHP:
Ver original
  1. <?PHP
  2. $query = "select * from preguntas";
  3. $sql = mysql_query($query);
  4. ?>
  5.  
  6.  
  7. <table>
  8. <tr><td>Usuario</td><td>Pregunta</td><td>Fecha</td></tr>
  9. <?PHP
  10. while($row = mysql_fetch_array($sql)){
  11.  
  12. echo "<tr><td>".$row["usuario"]."</td><td>".$row["pregunta"]."</td><td>".$row["fecha"]."</td></tr>"
  13.  
  14. }
  15.  
  16. ?>
  17.  
  18. </table>

Estamos que con ese codigo pintamos todas las preguntas...


Ahora como debemos de llamar a las respuestas de cada pregunta...


Código PHP:
Ver original
  1. <?PHP
  2. while($row = mysql_fetch_array($sql))
  3.  
  4. echo "<tr><td>".$row["usuario"]."</td><td>".$row["pregunta"]."</td><td>".$row["fecha"]."</td></tr>"
  5.  
  6.  
  7. $query1 = "select * from respuestas where id_Pregunta = ".$row["id_Pregunta"];
  8. $sql1 = mysql_query($query1);
  9.  
  10. while($row1 = mysql_fetch_array($sql1)){
  11.  
  12. echo "<tr><td>".$row1["usuario"]."</td><td>".$row["respuesta"]."</td><td>".$row["fecha"]."</td></tr>"
  13.  
  14. }
  15.  
  16. ?>

Entonces con esto obtendrias tu pagina como la quieres...


asi luciria todo el codigo del ejemplo...



Código PHP:
Ver original
  1. <?PHP
  2. $query = "select * from preguntas";
  3. $sql = mysql_query($query);
  4. ?>
  5.  
  6.  
  7. <?PHP
  8. while($row = mysql_fetch_array($sql))
  9.  
  10. echo "<tr><td>".$row["usuario"]."</td><td>".$row["pregunta"]."</td><td>".$row["fecha"]."</td></tr>"
  11.  
  12.  
  13. $query1 = "select * from respuestas where id_Pregunta = ".$row["id_Pregunta"];
  14. $sql1 = mysql_query($query1);
  15.  
  16. while($row1 = mysql_fetch_array($sql1)){
  17.  
  18. echo "<tr><td>".$row1["usuario"]."</td><td>".$row["respuesta"]."</td><td>".$row["fecha"]."</td></tr>"
  19.  
  20. }
  21.  
  22. ?>


Solo es la logica de como pintamos los registros..
__________________
Paginación en FLASH,

http://www.forosdelweb.com/f62/pagin...o-aqui-540241/

Etiquetas: mensajes, respuestas
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 18:41.