Vamos a crear un sistema para permitir a nuestros usuarios comentar en nuestro sitio, partiremos del hecho de que tenemos algun sistema de noticias o bien que hemos creado algun CMS para nuestro sitio. Si aun no tienes un sistema de noticias en el libro PHP para todos se explica claramente como crear un pequeño CMS para tu sitio.
Ahora, es importante que identifiquemos que deseamos hacer.
Vamos a mostrar los comentarios en cada entrada, ahora lo mas importante es considerar que x o y comentario pertenecera a x o y entrada entonces. A la hora de crear nuestra tabla MySQL vamos a incluir un campo que indique la entrada a la que pertenece el comentario.
Ademas, crearemos un modulo en nuestro panel de administracion para administrar los comentarios en cada entrada. para permitir al administrador borrar o moderar los comentarios.
Entonces, vamos a crear una nueva tabla en nuestra base de datos, Dicha tabla va a contener los siguientes datos:
CREATE TABLE `tusitioya`.`comentarios` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`idnoticia` INT NOT NULL ,
`nombre` TEXT NOT NULL ,
`comentario` TEXT NOT NULL ) ENGINE = MYISAM ;Esta tabla contiene 4 campos, uno para el id del comentario, uno para el id de la noticia, para el autor del comentario y para el comentario en si.
Ahora, vamos a crear un archivo de conexion al que llamaremos conect.php (es probable que algunos ya lo tengan y no haga falta volverlo a escribir)
En el basicamente, vamos a conectarnos con nuestro servidor MySQL y a seleccionar nuestra base de datos:
<?php
//conexion con la base de datos
$conexion = mysql_connect("localhost","root","") or die("Problema de conexion");
//seleccion de la tabla
mysql_select_db("tusitioya",$conexion) or die ("No se pudo conectar con la tabla");
?>
Una vez que hemos creado la tabla, y hemos creado nuestro archivo de conexion, vamos a crear el archivo que ingresa los datos a la tabla, este sera basicamente un formulario muy sencillo con un campo de texto para el nombre del usuario, y uno para el comentario.
Ademas agregaremos un campo oculto que almacene el id de la noticia y un submit, para enviar el comentario. A este archivo le llamaremos coment.php
<form action="index.php" method="post">
Nombre:
<br/>
<input type="text" name="nombre"/>
<br/>
Comentarios:
<br/>
<textarea name="comentario"></textarea>
<br/>
<br/>
<input type="hidden" name="idnoticia" value="<?php echo $_GET['op']?>"/>
<input type="submit" value="Enviar"/>
</form>
Por el momento, es HTML basico y algo de PHP unicamente para obtener el valor de la noticia almacenada en una variable que pasa por URL llamada "op"
Ahora, vamos a escribir el programa que procesara los datos, si estos existen para eso vamos a utlizar la funcion isset,
if (isset($_REQUEST['nombre']) && isset($_REQUEST['comentario'])) {Y si la condicion es verdadera, entonces vamos a insertar los valores de nuestro formulario en nuestra base de datos, de modo que nuestro script quedaria mas o menos asi:
Ya ubicado en nuestro archivo coment.php queda mas o menos asi:if (isset($_REQUEST['nombre']) && isset($_REQUEST['comentario'])) {include("conect.php");mysql_query("INSERT into comentarios(idnoticia,nombre,comentario)values('$_REQUEST[idnoticia]','$_REQUEST[nombre]','$_REQUEST[comentario]')",$conexion) or die(mysql_error());header("location:index.php?op=$_GET[op]");}
<?phpVale, aunque ahorita podrian probarlo.. estos comentarios se ingresarian y no habria un valor para la variable op, por lo que a la hora de procesar el formulario habria un error, pero eso lo veremos mas adelante, ahora vamos a crear un archivo que lea los comentarios acorde al articulo seleccionado.
if (isset($_REQUEST['nombre']) && isset($_REQUEST['comentario'])) {
include("conect.php");
mysql_query("INSERT into comentarios(idnoticia,nombre,comentario)
values('$_REQUEST[idnoticia]','$_REQUEST[nombre]','$_REQUEST[comentario]')",$conexion) or die(mysql_error());
header("location:index.php?op=$_GET[op]");
}
?>
<form action="coment.php?op=<?php echo $_GET['op']?>" method="post">
Nombre:
<br/>
<input type="text" name="nombre"/>
<br/>
Comentarios:
<br/>
<textarea name="comentario"></textarea>
<br/>
<br/>
<input type="hidden" name="idnoticia" value="<?php echo $_GET['op']?>"/>
<input type="submit" value="Enviar"/>
</form>
En este archivo, en principio vamos a procesar los datos UNICAMENTE si existe la variable op, que sera el identificador de la noticia en cuestion, de modo que nuestro script seria:
<?phpif (isset($_GET['op'])) {include("conect.php");$resp = mysql_query("SELECT nombre,comentario FROM comentarios WHERE idnoticia=$_GET[op]",$conexion);while($ext=mysql_fetch_array($resp)) {echo $ext['nombre'];echo "<br/>";echo "<br/>";echo $ext['comentario'];}}?>
Basicamente, estamos mostrando todos los resultados para nombre y comentario donde el idnoticia sea igual al id pasado por URL ´op´ Asi pues, si incluimos estos dos archivos en el archivo que muestra los articulos de esta forma:
<?phpAhora, en nuestro index.php veremos algo como esto:
$opcion = $_GET["op"];
if (isset($opcion)) {
include ("conect.php");
$respuesta = mysql_query("SELECT arto FROM articulos WHERE id = $opcion",$conexion);
while ($existe = mysql_fetch_array($respuesta)) {
echo $existe['arto'];
}
echo "<br/>";
echo "<br/>";
include("leercoment.php");
echo "<br/>";
echo "<br/>";
include ("coment.php");
}
else {
echo "<p>Este es un parrafo de ejemplo. Y este sitio ha sido creado siguiendo el curso tu Sitio Ya de Maurizzio Penalba</p>
<p align='center'><img src='recursos/objetos/equipo.jpg' width='331' height='225' /></p>";
}
?>
Aunque algo tosco, el darle un poco de estilo queda en manos de cada uno, ahora, aunque el sistema de comentarios ha quedado muy prolijo, aun nos hace falta hacer un par de cosas, en primer lugar deseamos mejorar la seguridad del sistema pues asi como esta cualquiera puede ingresar HTML, PHP o cualquier otro script que podria ser malicioso, ademas debemos contar con un area de administracion para eliminar y modificar comentarios
En principio vamos a parsear todo el texto que entre a travez de nuestras areas de texto, esto lo haremos con una funcion, y vamos a incluirla en nuestro archivo coment.php
function parsearhtml($texto) {Con esta funcion, pasamos todas las etiquetas HTML a texto plano, y traducimos cualquier comilla de esta forma evitamos cualquier clase de defase o XSS en nuestro sitio, aunque sean solo comentarios podria representar algun problema en un futuro. Una vez aplicada la seguridad a nuestro script, quedaria mas o menos asi:
return nl2br( htmlentities($texto, ENT_QUOTES) );
}
<?php
function parsearhtml($texto) {
return nl2br( htmlentities($texto, ENT_QUOTES) );
}
$comentario = parsearhtml($_REQUEST['comentario']);
$nombre = parsearhtml($_REQUEST['nombre']);
if (isset($_REQUEST['nombre']) && isset($_REQUEST['comentario'])) {
include("conect.php");
mysql_query("INSERT into comentarios(idnoticia,nombre,comentario)
values('$_REQUEST[idnoticia]','$nombre','$comentario')",$conexion) or die(mysql_error());
header("location:index.php?op=$_GET[op]");
}
?>
<form action="coment.php?op=<?php echo $_GET['op']?>" method="post">
Nombre:
<br/>
<input type="text" name="nombre"/>
<br/>
Comentarios:
<br/>
<textarea name="comentario"></textarea>
<br/>
<br/>
<input type="hidden" name="idnoticia" value="<?php echo $_GET['op']?>"/>
<input type="submit" value="Enviar"/>
</form>
<?php include("llave.php") ?>Y con esto finalmente hemos creado nuestro sistema de comentarios, ahora, voy a dejar los archivos junto al CMS que se ha creado en PHP para todos a modo de que puedan seguir el tuto
<table border="0" cellspacing="4">
<?php
include ("../conect.php");
if (isset($_GET['del'])) {
mysql_query("DELETE from comentarios WHERE id=$_GET[del]",$conexion);
}
$ids = mysql_query("SELECT id,nombre,comentario FROM comentarios",$conexion);
while ($ide = mysql_fetch_array($ids)) {
echo "<tr>";
echo "<td>".$ide['id']."</td>";
echo "<td>".$ide['nombre']."</td>";
echo "<td>".$ide['comentario']."</td>";
echo "<td>"."<a href='editcomment.php?del=$ide[id]'>Eliminar</a>"."</td>";
echo "</tr>";
}
?>
</table>
http://www.mediafire.com/?0gk364njn3397jb
Claro que el sistema puede mejorarse mucho, Por ejemplo podemos agregar un editor de texto enriquecido Pero esto es con caracter educativo.
A la espera de sus comentarios e inquietudes.
Un saludo


13:12
Maurizzio Peñalba









