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 ; |
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; |
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.';
}
}
} |
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';");
}
} |
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.