Cargando la página...

Usted está aquí:

Sistema administrable de comentarios con MySQL

Publicado por Pnoexz el 04.12.2008 21:48:42 en PHP - Nivel Intermedio

Avatar de Pnoexz
Avatar de

Usando solamente una tabla de MySQL y varias lineas de codigo PHP, vamos a crear un sistema de comentarios en articulos. Estos comentarios seran aprobados o rechazados por algun administrador o moderador antes de ser mostrados al publico.

Página 01 de 01 | Versión completa

La base de datos

En este caso, vamos a usar una base de datos MySQL llamada comentarios. De cada comentario, necesitamos saber el id unico, a que articulo corresponde, en que fecha fue escrito, quien lo escribio, el comentario en si, y el estado del comentario.

CREATE TABLE `comentarios` (
  `cid` INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `id` INT(6) NOT NULL,
  `unix` INT(12) NOT NULL,
  `autor` VARCHAR(128) NOT NULL,
  `contenido` VARCHAR(1024) NOT NULL,
  `estado` INT(1) NOT NULL
) ENGINE = MYISAM;


Mostrar comentarios y formulario

Para manter el codigo del script principal de la pagina mas limpio, vamos a crear una funcion llamada commentsDisplay(), con la que se mostrara los datos en la base y el formulario HTML.

function commentsDisplay() {
  $result = mysql_query("select * from comentarios where id='$_GET[id]' order by unix asc");
  while($row = mysql_fetch_array($result)) {
    if ($row['estado'] == 1) {
      echo '<div class="comment">
       <div class="h_comment">'.$row[autor].' dijo
       <div class="f_comment">'.fecha($row[unix]).' </div></div>
       <div class="c_comment">'.$row[contenido].'</div>
       </div>';
    }
    else { echo '<div class="comment"><div class="h_comment"><span class="code_ej">Comentario no verificado</span></div></div>'; }
  }

  $form = '<form action="" method="post">
    <table id="addcomment">
      <tr><td>Nombre:</td><td><input type="text" name="autor" /></td></tr>
      <tr><td>Comentario:</td><td><textarea name="contenido" cols="30" rows="6"></textarea></td></tr>
      <tr><td colspan="2"><input type="submit" /></td></tr>
    </table>
    <input type="hidden" name="action" value="add_comment" />
  </form>';

  echo '<div class="comment">
    <div class="h_comment">Agregar un comentario</div>
    <div class="c_comment">'.$form.'</div>
  </div>';
}


Administracion de comentarios

Para administrar los comentarios, vamos a mostrarlo dentro de un <input> o <textarea>, para evitar una posible injeccion de HTML.

function commentsAdmin() {
  $result = mysql_query("SELECT * FROM comentarios WHERE estado=0 ORDER BY unix ASC");
  while($row = mysql_fetch_array($result)) {
    echo '<div class="comment">
      <form action="" method="post">
      <div class="h_comment"><input type="text" name="autor" value="'.$row[autor].'" /></div>
      <div class="c_comment"><textarea name="contenido" cols="52" rows="10">'.$row[contenido].'</textarea>
      <input type="hidden" name="cid" value="'.$row[cid].'" />
      <input type="submit" name="apr_comment" value="Aprobar" style="width:49%" />
      <input type="submit" name="del_comment" value="Borrar" style="width:49%" />
      </div></form>
    </div>';
  }
}


Modificaciones de la base de datos

La primera modificacion que necesitamos, es la de agregar el comentario. Si bien en este ejemplo no hay proteccion contra ataques de injeccion SQL, es muy importante defender tu sitio de estos ataques. Existen mejores defenzas que el uso de la funcion mysql_real_escape_string(), por eso no lo he agregado en el ejemplo.

if($_POST[action] == 'add_comment') {
  $unix = date(U);
  $contenido = $_POST[contenido]; // Agregar defenza contra SQL Injection aca
  mysql_query("insert into comentarios values ('',$_GET[id], $unix, '$_POST[autor]', '$contenido', 0)") or die(mysql_error());
}


Luego tenemos las consultas de administracion de comentarios. Primero la usada para aprovar el comentario.

if ($_POST[apr_comment]) {
  mysql_query("UPDATE comentarios SET estado = '1' WHERE cid=$_POST[cid];") or die(mysql_error());
}


Y la funcion para borrarlos.

if ($_POST[del_comment]) {
  mysql_query("DELETE FROM comentarios WHERE cid=$_POST[cid];") or die(mysql_error());
}


Fuente: http://pnux.org/articulo/9

Página 01 de 01 | Versión completa

Descargas asociadas al artículo:

No existen descargas asociadas

Estadisticas:

Artículo leido 128 veces con un puntaje de 0.00 pts

Comentarios.

Sus comentarios son importantes.

No hay comentarios para listar, si desea puede crear el primer comentario para este artículo.

Debe estar identificado para agregar un comentario