PHP con MySQL: Sistema de comentarios simple con moderación

Crear un sistema de comentarios es más facil de lo que podemos pensar en un principio, necesitaremos guardar muy pocos datos con el nombre el email y el texto del comentario nos será suficiente.

Un ejemplo es el que os pongo a continuación donde creariamos en musql una tabla con los campos id, idarticuloasociado, nombre, email, texto,activo:

CREATE TABLE IF NOT EXISTS `prefijo_comentarios` (
  `id` INT(10) NOT NULL AUTO_INCREMENT,
  `idarticuloasociado` INT(10) UNSIGNED NOT NULL,
  `nombre` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
  `email` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
  `texto` text COLLATE utf8_unicode_ci NOT NULL,
  `activo` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idartista` (`idartista`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=0 ;

No debemos olvidarnos de poner idarticuloasociado como clave foranea del artículo donde se comente:

ALTER TABLE `comentarios`
  ADD CONSTRAINT `prefijo_comentarios_1` FOREIGN KEY (`idarticuloasociado`) REFERENCES `prefijo_articulo` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Ahora las dos funciones que usaremos en PHP para moderar los comentarios son en primer lugar:

function enviarcomentario($mysqli,$nombre,$email,$texto,$articuloid) {
	if (!ereg("^([a-zA-Z0-9._]+)@([a-zA-Z0-9.-]+).([a-zA-Z]{2,4})$",$email)){ 
	        return 'Email incorrecto'; 
	} else { 
		 $envio = $mysqli->query("INSERT INTO prefijo_comentarios (`id`, `idartista`, `nombre`, `email`, `texto`, `activo`) VALUES (NULL, '$articuloid', '$nombre', '$email', '$texto','0');");
		$subject = "Comentario";
		$mensaje = "--------------------------------------------------- \n";
		$mensaje.= "                      Comentario                    \n";
		$mensaje.= "--------------------------------------------------- \n";
		$mensaje.= "NOMBRE:   ".$nombre."\n";
		$mensaje.= "EMAIL:    ".$email."\n";
		$mensaje.= "FECHA:    ".date("d/m/Y")." a las ".date("h:i:s a")."\n";
		$mensaje.= "IP:       ".$_SERVER['REMOTE_ADDR']."\n\n";
		$mensaje.= "--------------------------------------------------- \n\n";
		$mensaje.= $texto."\n\n";
		$mensaje.= "--------------------------------------------------- \n";
		$mensaje.= "Enviado desde http://conocimiento.invbit.com \n";
                $mensaje.= "Activar: http://www.midominio.com/moderacomentario.php?accion=activar&id=xx  \n";
		$mensaje.= "Eliminar: http://www.midominio.com/moderacomentario.php?accion=eliminar&id=xx \n";
		$headers = "From: ".$email."\r\n";
		if (mail('moderador@midominio.com', $subject, $mensaje, $headers)) {
			return 'Se ha guardado pero no se ha podido avisar al moderador de su envio.';
		} else {
			return 'Enviado correctamente y esperando moderación.'; 
		}	
	} 
}

Aquí lo que realizamos es introducir las variables que recojemos en el formulario HTML que tengamos en la página web para posteriormente guardarlo en la base de datos y enviar un email al moderador que se va formando en la variable $mensaje con el resto de valores recogidos.

Finalmente para activar o rechazar el comentario usaremos la función:

function moderarcomentario($mysqli,$idcomentario,$accion) {
	if ($accion=='activar') {
		$envio = $mysqli->query("UPDATE prefijo_comentarios SET activo='1' WHERE id = '$idcomentario';");	
	} elseif($accion=='eliminar') {
		$envio = $mysqli->query("DELETE FROM prefijo_comentarios WHERE id = '$idcomentario';");	
	}
 
}

Es recomendable que esta función este protegida por usuario y contraseña pro lo que lo propio es que se ponga dentro del panel de administración de la página web.

4 comentarios sobre “PHP con MySQL: Sistema de comentarios simple con moderación”

  1. muy bueno tu aporte pero creo que no lo logre entender del todo. donde hay que insertar cada uno de los códigos?

  2. Buenas, es que me dejaron tarea de crear una pagina web, sin embargo la tarea se trata de crear noticias, noticias me refiero como sucesos, tecnologías, entretenimiento, etc, algo así y necesito que la noticia venga para comentar los lectores pero antes debe crea un tabla de usuario, comentario y noticias, esas deben ir relacionada con las llaves primaria, obviamente también creó la tabla categoría pero no iría relacionada con la tabla comentario solo con la noticia. La tabla comentario tengo: consecutic_noticias,cod_usuarios,fecha y comentario. La tabla de usuario es: cod_usuarios,nombre,contraseña,tipo,e_mail. La tabla noticias tengo: titulo, descripción,info_general,imagen,mime,consecutivo,cod_categoría. La de categoría tengo: código,nombre.E l usuario también que tenga para que el periodista registre las noticias.

Los comentarios están cerrados.