Foros del Web » Programando para Internet » PHP »

Implementar un foro

Estas en el tema de Implementar un foro en el foro de PHP en Foros del Web. Buenas, hace tiempo que comencé a implementar un foro similar al que hay en esta web y me ha surgido el siguiente problema: En el ...
  #1 (permalink)  
Antiguo 12/11/2008, 05:58
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Implementar un foro

Buenas,

hace tiempo que comencé a implementar un foro similar al que hay en esta web y me ha surgido el siguiente problema:

En el foro existen varios temas en el que los usuarios registrados pueden participar respondiendo. Además un usuario registrado que haya escrito un tema nuevo o respondido uno ya escrito, también tendrá la opción de EDITAR de nuevo su post.

He aquí mi duda, ¿Cómo relaciono el mensaje con el botón editar?.
Me explico.
Imaginemos un tema titulado: "Nuevo tema".
Dicho tema tiene 3 Posts o Respuestas:

Post 1: Escrito por el Usuario 1
Post 2: Escrito por el Usuario 2
Post 3: Escrito por el Usuario 1

Si el usuario que ha logeado es el Usuario 1 cuando lea los post del tema: "Nuevo Tema", tendrá dos botones: "Editar". Uno debajo de cada Post que escribió.

Si quiere editar uno de los dos, me gustaría que le apareciera un área de texto con el mensaje para que lo edite y lo guarde con el mismo id pero, ¿Cómo sé el id del mensaje?

No sé cómo relacionar cada mensaje, (cada mensaje tiene un id en mi base de datos), con los botones de Editar para que muestre el texto del mensaje que se desea editar.

Por favor, preguntenme si no ha quedado claro.

un saludo.
  #2 (permalink)  
Antiguo 12/11/2008, 06:17
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Implementar un foro

Cita:
Iniciado por Tarzan Ver Mensaje
(..) No sé cómo relacionar cada mensaje, (cada mensaje tiene un id en mi base de datos), con los botones de Editar para que muestre el texto del mensaje que se desea editar (..)
Supongo que todo dependerá de cómo estés manejando los datos y de cómo generes el html. Si los botones están integrados en un formulario, suponiendo que $post_id[$n] es la ID del n-ésimo mensaje mostrado (asignados desde la consulta), entonces...

Código HTML:
<button type="submit" name="editar" value="<?php echo $post_id[$n] ?>">Editar</button> 
...o similar, podría ser una alternativa.

De ese modo, al procesar el formulario, tendrás en $_REQUEST['editar'] la ID del mensaje correspondiente al botón que se haya pulsado.

Es una idea.

Un saludo.
  #3 (permalink)  
Antiguo 12/11/2008, 06:43
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Implementar un foro

MMm... gracias Deschamps pero el botón Editar no lo tengo puesto dentro de ningún formulario. Escribo algo del código para aclarar:

// Consulta SQL
$resultado = "Seleccionar mensajes (de un tema) y usuarios de la base de datos"

foreach ($resultadoMensajesPorTema as $resultado) {


// $resultado es un array de mensajes con su usuario.
// Se Muestra el usuario y el Mensaje. Es un área de texto similar a este foro.

//Usuario X -> Mensaje

// Si el Usuario Logeado es igual al Usuario contenido en $resultado[i],
// mostrar botón EDITAR

if ($_SESSION['Usuario'] == $resultado['Usuario'] {
<a class='btnPost' href='escribePost.php'>RESPONDER</a>
}
}


Imagino que en el href, debería pasarle el id del mensaje o algo así.
En el momento de pintar pintar el mensaje y el botón, tengo el id del mensaje, pero no cuando el usuario pincha sobre el botón editar (puede haber varios).
¿Cómo lo puedo hacer?. ¿Cómo sé el id del mensaje en el momento en el que el usuario pincha sobre el botón editar?

Última edición por Tarzan; 12/11/2008 a las 06:48
  #4 (permalink)  
Antiguo 12/11/2008, 06:55
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Implementar un foro

Cita:
¿Cómo lo puedo hacer?. ¿Cómo sé el id del mensaje en el momento en el que el usuario pincha sobre el botón editar?
Podrías añadir al enlace la referencia del mensaje para poder procesarla con $_GET en la página de destino. Algo como (aprovechando tu pseudo-código):


// Si el Usuario Logeado es igual al Usuario contenido en $resultado[i],
// mostrar botón EDITAR

if ($_SESSION['Usuario'] == $resultado['Usuario'] {
echo "<a class='btnPost' href='escribePost.php?id={$resultado['Post_ID']}'>EDITAR</a>";
}
}


o similar.

Un saludo.
  #5 (permalink)  
Antiguo 12/11/2008, 07:12
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Implementar un foro

Mmm... Creo que ya sé lo que quieres decir,

Pero no estoy seguro de que pueda usar la variable $resultado así.

$resultado es el resultado de un SELECT. Es un array de registros, (donde cada registro contiene 3 campos: idUsuario, idMensaje y Mensaje).

Nos encontramos en el fichero mensajes.php

Yo recorro ese array mostrando todos los registros:

usuario1 -> mensaje
usuario2 -> mensaje
usuario1 -> mensaje


Al mismo tiempo que se muestran en pantalla, se dibuja el boton editar en aquellos mensajes cuyos usuarios coinciden con el logeado.
En este caso, Usuario1

Luego quedaría así:

usuario1 -> mensaje
Editar

usuario2 -> mensaje

usuario1 -> mensaje
Editar



A todo esto, y como dato importante, la URL del fichero mensajes.php:
mensajes.php&idtema=1

Al pulsar, por ejemplo, en el botón EDITAR del primer mensaje, debería quedar una URL así:
mensajes.php&idtema=1&idmensaje=1

Si pulsara sobre el botón EDITAR del mensaje 3 debería quedar
mensajes.php&idtema=1&idmensaje=3

Lo que tú me comentas es que, primero capture el id del mensaje por Post
Pero, te recuerdo que no estoy en un formulario y no sé si eso se podrá hacer.
La variable $resultado contiene todos los mensajes del tema con sus id, pero no sé si puedo obtenerlos al usar el POST.

¿Puedes, por favor, explicarme esto un poco más?
  #6 (permalink)  
Antiguo 12/11/2008, 07:27
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Implementar un foro

No me refería a usar POST. Cuando puse "$resultado['Post_ID']" me refería a lo que tu denominas idMensaje en tu consulta, pero no conozco tus estructuras de datos... y puse ese nombre sólo como referencia.

Pero en esencia es lo mismo. Del mismo modo que identificas al usuario y al mensaje desde tu consulta, también puedes identificar la id cada mensaje para que cuando vuelcas el listado de mensajes y usuarios (imagino que con un bucle), añadas al enlace "editar" un parámetro que te permita identificarlo en la página de destino (la id).

Y si ese dato no está disponible, imagino que redefiniendo las consultas convenientemente, podrás disponer de él.
  #7 (permalink)  
Antiguo 12/11/2008, 07:42
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Implementar un foro

Ahhh Ok.. Deschamps,

perdona mi falta de comprensión. El id de los mensajes está en la variable $resultado, luego lo puedo coger de ahí y dejarlo en el enlace preparado para cuando el usuario lo pulse.

Pero todavía no entiendo cómo es posible hacer esto. Quiero decir, que sólo hay una línea de código para el botón, (está dentro del for), pero puede haber varios botones. Si yo pongo:

echo "<a class='btnPost' href='escribePost.php?id=$resultado['idMensaje']'>EDITAR</a>";

Se quedará almacenado el ÚLTIMO id del mensaje, no?

pero si yo pulso en el primer EDITAR, me saldrá a modificar el último Mensaje del array. ¿Sabes lo que quiero decir?
He ahí mi duda.

Si fuera un mensaje con su botón, pues sin problemas, porque capturo el id del array y listo. pero como puede haber varios mensajes con sus botones, y se dibujan en un for, pues cuando termine de recorrer la variable $resultado, con todos los mensajes, y haya dibujado los botones en aquellos mensajes en los que coincida el usuario con el logeado, todos los botones permitirán modificar el ÚLTIMO mensaje, (último id asignado)

¿Es así?
  #8 (permalink)  
Antiguo 12/11/2008, 09:29
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Implementar un foro

Cita:
Iniciado por Tarzan Ver Mensaje
(..) sólo hay una línea de código para el botón, (está dentro del for), pero puede haber varios botones (..)
No sé si acabo de entender tu duda.

El planteamiento es idéntico al que usas para sacar al usuario y mensaje correspondiente en cada iteración. ¿Cuántas líneas usas para mostrar cada usuario? En este caso es idéntico. En cada iteración, el valor representado por $resultado['idMensaje'] corresponderá al de la fila de la consulta que se esté procesando en ese instante... como sucede con el resto de variables.

Eso suponiendo que $resultado es el array que te devuelve algún mysql_fetch_loquesea después de realizar la consulta apropiada, y que recorras todos los resultados con un bucle (for, foreach, while ... o como desees, que eso es lo de menos).

Un saludo.
  #9 (permalink)  
Antiguo 12/11/2008, 09:45
Avatar de C_Cornell  
Fecha de Ingreso: agosto-2008
Ubicación: Santander
Mensajes: 62
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Implementar un foro

No te valdría esto?

Código PHP:

//for recorre mensajes
for(){
//Visualizar mensaje
if($idUsuarioMensaje==$idSesion){
//<a href="editarRespuesta?idRespuesta=$idRespuesta&idUsuario=$idUsuario">editar</a>
// o si lo prefieres un form y en campos hidden: $idRespuesta, $idUsuario
}

}
//fin for recorre mensajes 
  #10 (permalink)  
Antiguo 12/11/2008, 16:41
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Implementar un foro

Ok chicos, funciona de perlas. Me había atascado con la idea de que no podía pasar el id de cada mensaje!.

Lo paso bien y lo capturo en el archivo escribePost.php


echo "<a class='btnPost' href='escribePost.php?id=$resultado['idMensaje']'>EDITAR</a>";

Ahora sólo me falta una cosa: "El mensaje en sí".
Este mensaje también lo tengo en el array $resultado['mensaje']

¿Cómo lo paso en el href?. Imagino que debería pasarlo por POST para que no apareciera en la URL, pero no sé cómo hacerlo.


Si lo paso en el href como:

echo "<a class='btnPost' href='escribePost.php?id=$resultado['idMensaje']&mensaje=$resultado['mensaje']'>EDITAR</a>";

aparecerá el mensaje entero en la URL, ¿verdad?. Esto no lo quiero.

¿Podéis ayudarme con esto último?.
Sólo necesito esto para capturar el mensaje y reescribirlo en el textarea a editar!

Muchas gracias por la ayuda.
  #11 (permalink)  
Antiguo 13/11/2008, 14:17
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Implementar un foro

Cita:
Iniciado por Tarzan Ver Mensaje
Ok chicos, funciona de perlas. Me había atascado con la idea de que no podía pasar el id de cada mensaje!.
Lo conseguiste a base de intentarlo, y eso es lo que cuenta.

Cita:
Ahora sólo me falta una cosa: "El mensaje en sí".
Este mensaje también lo tengo en el array $resultado['mensaje'](...) ¿Podéis ayudarme con esto último?.
Como dices, pasarlo por URL es un poco chapucero. Así a bote pronto, se me ocurren dos alternativas: (a) Guardar los mensajes de esa página en un array de sesión y acceder a ellos desde la otra página (lo que te permite mostrar todas las respuestas del hilo además de la que se edita, como se hace aquí) ó (b) Realizar una nueva consula con el ID del mensaje que tienes capturado, para recuperar de la tabla el texto del mensaje.

Seguramente habrá otras alternativas.

Un saludo.
  #12 (permalink)  
Antiguo 17/11/2008, 09:48
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: Implementar un foro

Gracias Deschamps!! optaré por la opción del array.
Glup.. Ya avisaré si me surge algún problema, aunque creo que entiendo como hacerlo.

Saludos!!
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 11:25.