Foros del Web » Programando para Internet » PHP »

Script de moderación

Estas en el tema de Script de moderación en el foro de PHP en Foros del Web. ¡Hola a todos! Recientemente estoy realizando una página web, y me atasqué con algo: lo que quiero hacer es un sistema de moderación público, que ...
  #1 (permalink)  
Antiguo 27/02/2012, 12:58
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Script de moderación

¡Hola a todos! Recientemente estoy realizando una página web, y me atasqué con algo: lo que quiero hacer es un sistema de moderación público, que consista en lo siguiente:

-Los usuarios pueden enviar publicaciones, esto es, como comentarios.
-Los comentarios pasan a una tabla de la base de datos ("moderacion"), y luego son leídos por los usuarios, que los aprueban o rechazan, según su opinión.
-Tras aprobar o rechazar un comentario, aparecería la siguiente publicación ante el usuario que modera, y así sucesivamente.
-Las publicaciones que tengan una votación negativa (es decir, que haya más rechazos que aprobados) serían eliminados de la base de datos.
-Las publicaciones aprobadas pasarían a otra tabla "publicados".


Ya tengo la página de moderación, y los botones Aprobar/Rechazar que añaden o restan un punto al campo "puntuación" en la tabla "moderacion".

Mis dudas son:
  • ¿Qué orden debe llevar la base de datos para que vayan cambiando las publicaciones tras aprobarlas/rechazarlas para que aparezcan otras?
  • ¿Cómo puedo hacer que un usuario no vea más de una vez la misma publicación?
  • Esto se haría con Ajax, para no tener que recargar la página, ¿no?
  • ¿Cómo haría para que pasado x tiempo el registro se elimine, si ha sido rechazado, o pase a la tabla publicación, si ha sido aprobado?


Siento tener tantas dudas, es lo que tiene estar aprendiendo.
El caso es que no sé por donde empezar, sólo necesitaría algún empujoncito para ir haciéndolo yo mismo.

Sin más, muchas gracias a todos, por vuestro tiempo y conocimiento.

PD: Si no he sido específico en alguna parte, díganmelo, para que lo exprese mejor.
  #2 (permalink)  
Antiguo 27/02/2012, 14:16
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 3 meses
Puntos: 331
Respuesta: Script de moderación

¿Qué orden debe llevar la base de datos para que vayan cambiando las publicaciones tras aprobarlas/rechazarlas para que aparezcan otras?
No se entiende muy bien la pregunta, pero haces un select de xx publicaciones, ordenado por el campo x y donde el usuario actual no haya votado aún
¿Cómo puedo hacer que un usuario no vea más de una vez la misma publicación?
Necesitas una tabla para guardar la relación usuario-voto. De manera que cada vez que un usuario vota insertar un registra usuario_id / publicación_id y así puedes controlar quién vota qué. Esta tabla te soluciona el problema que planteas en 1.
Esto se haría con Ajax, para no tener que recargar la página, ¿no?
No necesariamente. Utilizar AJAX es tu decisión pero no hace falta.
¿Cómo haría para que pasado x tiempo el registro se elimine, si ha sido rechazado, o pase a la tabla publicación, si ha sido aprobado?
Necesitas un script que elimine los registros según tu criterio y un cronJob que lo ejecute periódicamente.

Sobre cronJobs puedes leer en Google. Lo demás depende un poco de tu aplicación pero en realidad las posibilidades en cuanto a diseño de DB son pocas, lee un poco acerca de diseño de tablas antes de continuar. Saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 27/02/2012, 14:44
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script de moderación

¡Hola! Gracias por contestar. Lo del CronJob no lo conocía, me estoy informando ahora mismo.

Con la primera pregunta, me refiero a qué Select debe contener la sentencia SQL para que las publicaciones vayan cambiando, y aparezca sólo una. Es decir, si le digo que me saque los registros del día de hoy, siempre apaqrece el mismo, necesito alguna variable para que vayan cambiando, así como que no se repitan las mismas ante un usuario: Eso sí, quiero que un "usuario" que no se haya registrado, es decir, un visitante, pueda moderar publicaciones también.

Si a alguien le aporta más información, lo que deseo hacer es algo bastante parecido a la moderación de ascodevida.com, quizá la conozcáis:

http://www.ascodevida.com/moderar

Saludos!
  #4 (permalink)  
Antiguo 27/02/2012, 14:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Script de moderación

No existe una sentencia SQL para que las publicaciones vayan cambiando, SQL es una cosa y tu pagina (el HTML) es otra cosa.

Lo que tienes que hacer es un SELECT a tu tabla donde el usuario todavía no haya votado ordenado por día, y como ya te dijo repara2, necesitas otra tabla donde guardes que usuario ya voto un comentario, aunque sean visitantes tienes que generar algo para indentificarlos, como una cookie donde guardes una cadena que indique a ese visitante, posteriormente vas seleccionado los comentarios con un NOT IN() con los votos, por ejemplo:

Código MySQL:
Ver original
  1. SELECT comentario FROM comentarios WHERE id_comentario NOT IN (SELECT id_comentario FROM votos WHERE id_usuario='$el_usuario') AND date='$today' ORDER BY date DESC

Todo con esto usas AJAX, y no necesitas dos tablas, puedes usar la misma tabla, simplemente agrega un estatus de 1 = publicado 0=por moderar, y cada x "puntos" pues se publica, o con un cron job cada hora por ejemplo pasas los de por moderar a publicado en base al número de votos.

Saludos.
  #5 (permalink)  
Antiguo 28/02/2012, 06:01
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script de moderación

Gracias por tu respuesta GatorV.
Al final he decidido, al menos de momento, no usar el CronJob y emplear sentencias SQL que añadan la publicacion a la tabla "publicados" si tiene x aprobados, y después la elimine de la tabla "moderacion", y lo mismo si tiene x negativos, es eliminada pero no publicada.

Esto al menos ya lo he conseguido, con un condicional, de forma simple.

Por el momento se me sigue resistiendo conseguir que un visitante no vea dos veces la misma publicación. Estoy pensando en el diseño de la tabla, pero ¿Saben si hay alguna manera de hacerlo con sesiones, sin tener que utilizar bases de datos?

Saludos
  #6 (permalink)  
Antiguo 28/02/2012, 21:51
Avatar de waldragon  
Fecha de Ingreso: mayo-2010
Mensajes: 735
Antigüedad: 14 años, 6 meses
Puntos: 55
Respuesta: Script de moderación

Cita:
Iniciado por m3cubo Ver Mensaje
Por el momento se me sigue resistiendo conseguir que un visitante no vea dos veces la misma publicación. Estoy pensando en el diseño de la tabla, pero ¿Saben si hay alguna manera de hacerlo con sesiones, sin tener que utilizar bases de datos?

Saludos
No creo que pueda hacerse con sessiones, para mi, tienes que usar si o si una base de datos, para lograrlo tienes que crear por ejemplo una tabla vistas con los campos necesarios para guardar la ip del visitante y el id de la publicacion, entonces cuando un visitante vio una publicacion guardas un registro con esos datos y al momento de mostrar las publicaciones, haces una comparacion con la tabla vistas, con eso mas o menos tiene que funcionar, si fueran usuarios registrados en lugar de guardar la ip (que a veces varia) podrias guardar su id de usuario (que nunca varia), suerte.
  #7 (permalink)  
Antiguo 29/02/2012, 12:36
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script de moderación

Hola a todos!

Al final he logrado que un mismo visitante no vea dos veces la misma publicación, utilizando la IP del visitante. No es el método más perfecto, pero me servirá de momento.

He creado una tabla "visitantes" con:
  • id_visitante
  • ip
  • id_publicacion

En la página "moderación" utiliza un NOT IN para sacar publicaciones que no tengan la misma IP y ya hayan sido vistas, y al votar, guarda la IP.

Por ahora me funciona bien, pero más adelante intentaré mejorar el sistema, sobre todo la forma de "registrar" al visitante, que no sea mediante su IP; ya que puede cambiar, coincidir, etc.

Si a alguien se le ocurren maneras mejorar la aplicación (tanto a nivel de seguridad como de funcionalidad) estaré encantado de seguir sus pasos y escucharle.


Gracias a todos los que contestaron.

Saludos.
  #8 (permalink)  
Antiguo 29/02/2012, 12:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Script de moderación

No te recomendaría que usaras la IP, porque muchos usuarios entran en un café internet o una red interna, y comparten la misma IP externa, mejor usa una cookie con un identificador.

Saludos.
  #9 (permalink)  
Antiguo 29/02/2012, 13:00
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script de moderación

Cita:
Iniciado por GatorV Ver Mensaje
No te recomendaría que usaras la IP, porque muchos usuarios entran en un café internet o una red interna, y comparten la misma IP externa, mejor usa una cookie con un identificador.

Saludos.
Sin embargo hay navegadores que tienen las cookies desactivadas. ¿Esto funcionaría en estos casos?

¿Podría generar una sesión, asignarle un valor random y guardarlo así? De forma que cuando se cierre la sesión, se vuelva a generar otro valor, o algo así.
  #10 (permalink)  
Antiguo 29/02/2012, 23:20
Avatar de waldragon  
Fecha de Ingreso: mayo-2010
Mensajes: 735
Antigüedad: 14 años, 6 meses
Puntos: 55
Respuesta: Script de moderación

Cita:
Iniciado por m3cubo Ver Mensaje
¿Podría generar una sesión, asignarle un valor random y guardarlo así? De forma que cuando se cierre la sesión, se vuelva a generar otro valor, o algo así.
Pero eso solo serviria hasta que el usuario cierre la pagina o caduque la session, insisto que lo mejor es un registro de usuarios para usar su id de usuario, despues de todo, es mejor que moderen los usuarios y no los visitantes, en mi opinion.
  #11 (permalink)  
Antiguo 01/03/2012, 09:47
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script de moderación

Cita:
Iniciado por waldragon Ver Mensaje
Pero eso solo serviria hasta que el usuario cierre la pagina o caduque la session, insisto que lo mejor es un registro de usuarios para usar su id de usuario, despues de todo, es mejor que moderen los usuarios y no los visitantes, en mi opinion.
El caso es que quiero permitir que los visitantes también puedan enviar y moderar publicaciones. Desde el punto de vista de la sencillez, hubiese preferido hacerlo así, pero quiero mantener la web lo más abierta posible.

De todos modos, tampoco me importaría que se volviesen a ver las mismas publicaciones al cerrar el navegador, etc.
¿Cómo podría hacer esto?

Como el diseño de las tablas ya funciona bien, lo único que cambiaría sería la variable que aparezca en la columna "registro", así que a partir de ahora es fácil crear otros modelos de registro, ya sea mediante sesiones, etc.

¿Cómo podría crear la sesión, de forma que guarde durante toda la visita un número random o algo parecido?


Saludos!
  #12 (permalink)  
Antiguo 01/03/2012, 10:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Script de moderación

Pues simplemente:
Código PHP:
Ver original
  1. $_SESSION['id'] = uniqid();
  #13 (permalink)  
Antiguo 01/03/2012, 11:41
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script de moderación

Cita:
Iniciado por GatorV Ver Mensaje
Pues simplemente:
Código PHP:
Ver original
  1. $_SESSION['id'] = uniqid();
Hola, GatorV! Gracias por el código. Lo he probado, pero cada vez que recargo la página, la id cambia.
Entonces al enviar la votación cambiaría también esta id, (ya que primero accede a un archivo PHP y luego vuelve), y no reconocería al visitante como si fuera el mismo.

¿Cómo puedo solucionar esto?

Saludos
  #14 (permalink)  
Antiguo 01/03/2012, 12:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Script de moderación

Pues solamente generalo una vez, y posteriormente lo usas, es algo simple:
Código PHP:
Ver original
  1. <?php
  2. if (!isset($_SESSION['codigo'])) {
  3.        $_SESSION['codigo'] = uniqid();
  4. }
  5.  
  6. echo $_SESSION['codigo'];
  #15 (permalink)  
Antiguo 01/03/2012, 13:12
m3cubo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Script de moderación

Cita:
Iniciado por GatorV Ver Mensaje
Pues solamente generalo una vez, y posteriormente lo usas, es algo simple:
Código PHP:
Ver original
  1. <?php
  2. if (!isset($_SESSION['codigo'])) {
  3.        $_SESSION['codigo'] = uniqid();
  4. }
  5.  
  6. echo $_SESSION['codigo'];
Perfecto, con esto ya me funciona perfectamente y la sesión sirve bastante bien: aunque se cierre el navegador, se conserva, y dura bastante tiempo.

Muchas gracias GatorV, por tu tiempo, código y conocimiento.
Doy por terminada (al menos en versión beta) esta parte de mi aplicación.

Gracias a todos! Saludos!

Etiquetas: moderación, registro, tabla, usuarios
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 23:00.