Bueno pues después de todo esto tiempo y lo que he aprendido, he creado este simple sistema de noticias con posibilidad de que los lectores puedan poner comentarios y he decidido compartirlo con vosotros para que podáis modificarlo (está sin estilos css así que hay un mundo que mejorar xD) y para que los nuevos vayan aprendiendo cómo funciona :)
Al final del post he dejado una descarga de una carpeta que contiene todos los archivos publicados en este tema.
AVISO: TEMA EDITADO A MEDIAS, LOS ARCHIVOS DE LOS DOS PRIMEROS PUNTOS HAN SIDO ACTUALIZADOS Y SU DESCARGA YA ESTÁ DISPONIBLE, CUANDO PUEDA ACABARÉ EL RESTO.
Aquí os dejo de lo que consta este tutorial:
1# Creación de una página en la que se visualizarán todas las noticias de la base de datos
2# Creación de una página en la que se verá la noticia que el usuario seleccione, y podrá comentarla y ver los comentarios de la noticia seleccionada
3# Creación de un panel para publicar las noticias
4# Creación de un panel para administrar las noticias (editarlas/borrarlas)
---------------------------------------------------------------------------------------------------------------------------
1#
1º) Tenemos que crear en la base de datos una tabla llamada noticias y de campos, los pondremos como están en la siguiente imagen:
[contenido no disponible]
2º) Ahora vamos a crear la página donde se visualizarán todas las noticias publicadas, la llamaremos noticias.php y su código será el siguiente:
3º) Ahora creamos un archivo llamado config.php que será el que almacene la información de la base de datos y tendrá el siguiente código:
Bien, un poco más tarde crearemos una especie de panel con el que podremos publicar noticias, pero de momento para publicarlas vamos al PhpMyAdmin, le damos a la pestaña Insert y ahí publicaremos las noticias (de momento). Podéis publicar una de prueba si queréis para ver cómo va la cosa.
2#
Si os fijasteis pusimos un enlace en el que si pinchamos accederemos a una página llamada noticia.php?id=id de la noticia
Aquí se verá la noticia seleccionada donde podremos dejar y ver los comentarios puestos en esta.
Ahora, en la misma base de datos en la que pusimos la tabla noticias, creamos otra tabla llamada comentarios, y los campos deben quedar así:
[contenido no disponible]
Ahora que ya tenemos la tabla donde almacenaremos todos los comentarios, crearemos el archivo noticia.php para ver cada una de las noticias que el usuario quiera y poder comentarlas y ver sus comentarios, así que creamos el archivo noticia.php con el código:
3# Crear panel para publicar noticias
Bueno, ampliamos el tutorial para crear una especie de panel en el que podamos publicar las noticias.
1º) Crearemos un archivo llamado publicar.php que tendrá el siguiente código: (El Doctype, los estilos, la codificación, etc... se los tenéis que poner vosotros jeje)
2º) Como visteis en el código, con el formulario llamamos a enviar.php para que guarde los datos en la base de datos, así que este archivo se llamará enviar.php y tendrá el siguiente código:
4# Crear panel de administración de las noticias (En construcción)
Ahora crearemos un panel en el que podremos administrar todas las noticias, para editarlas o borrarlas sin tener que acceder todo el rato a la base de datos.
Por cierto, primero de todo, nadie puede saber la página en la que estará este panel, no vaya a ser que salte la seguridad que le pongamos (poca, pero ya le iremos añadiendo más jeje) y haga una catástrofe en nuestra web.
Vale, empezamos!
1º) Crearemos un directorio o carpeta, lo llamaremos, hmm... moderacion, se llamará moderacion (sin la tilde en la o!)
2º) Ahora crearemos un archivo en el directorio moderacion que se llamará index.php, y este archivo tendrá el siguiente código:
Si os fijáis, es el mismo código que el que tenemos para mostrar todas las noticias en la página principal, pero en este tenemos dos líneas de código nuevas:
Y la otra línea es un enlace que pone Borrar (<a href='borrar.php?id=$qry[id_noticia]'>Borrar</a>)
Entonces, en esa línea vemos que llamamos al archivo borrar.php, así que ahora crearemos un archivo llamado borrar.php y tendrá el siguiente código:
Bien, ahora podemos borrar cualquier noticia con un sólo click!
Ahora lo que haremos será poder editar las noticias desde este panel, en el archivo index.php del directorio moderacion, cambiamos el código que teníamos por este:
Lo único que hemos hecho es añadir otro enlace al lado del de Borrar, y el enlace es editar.php?id=id de la noticia
así que ahora creamos un archivo llamado editar.php y tendrá el siguiente código:
Y como veis llamamos al archivo actualizar.php en el formulario, así que ahora crearemos un archivo llamado actualizar.php y tendrá el siguiente código:
Al final del post he dejado una descarga de una carpeta que contiene todos los archivos publicados en este tema.
AVISO: TEMA EDITADO A MEDIAS, LOS ARCHIVOS DE LOS DOS PRIMEROS PUNTOS HAN SIDO ACTUALIZADOS Y SU DESCARGA YA ESTÁ DISPONIBLE, CUANDO PUEDA ACABARÉ EL RESTO.
Aquí os dejo de lo que consta este tutorial:
1# Creación de una página en la que se visualizarán todas las noticias de la base de datos
2# Creación de una página en la que se verá la noticia que el usuario seleccione, y podrá comentarla y ver los comentarios de la noticia seleccionada
3# Creación de un panel para publicar las noticias
4# Creación de un panel para administrar las noticias (editarlas/borrarlas)
---------------------------------------------------------------------------------------------------------------------------
1#
1º) Tenemos que crear en la base de datos una tabla llamada noticias y de campos, los pondremos como están en la siguiente imagen:
[contenido no disponible]
2º) Ahora vamos a crear la página donde se visualizarán todas las noticias publicadas, la llamaremos noticias.php y su código será el siguiente:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Lista de noticias publicadas</title>
<meta charset="iso-8859-1" />
</head>
<body>
<?php
include_once("config.php");
$result = mysql_query("SELECT * FROM $tabla ORDER BY id_noticia DESC") or die(mysql_error());
if(!mysql_num_rows($result)){
echo "Todavía no ha sido publicada ninguna noticia";
} else {
while($qry = mysql_fetch_array($result)){
echo "$qry['titulo']<br/><small>Publicado por $qry['autor'] el día $qry['fecha']</small><br/>$qry['novedad']<br/><small>Publicado en $qry['categoria'] / <a href='noticia.php?id=".$qry['id_noticia']."'>Dejar un comentario</a></small>";
echo "<hr/>";
}
}
?>
</body>
</html>3º) Ahora creamos un archivo llamado config.php que será el que almacene la información de la base de datos y tendrá el siguiente código:
<?php
# Sistema de noticias por Doodleo para la comunidad de CCTW. Todas las líneas con # al principio pueden ser borradas ya que son solamente comentarios.
# Servidor donde se aloja la base de datos
$servidor = "localhost";
# Base de datos
$db = "db";
# Usuario de la base de datos
$usuario = "root";
# Contraseña del usuario
$pass = "contraseña";
# Tabla donde se guardan las noticias
$tabla = "noticias";
# Selección y conexión a la base de datos
mysql_connect($servidor, $usuario, $pass) or die(mysql_error());
mysql_select_db($db) or die(mysql_error());
?>Bien, un poco más tarde crearemos una especie de panel con el que podremos publicar noticias, pero de momento para publicarlas vamos al PhpMyAdmin, le damos a la pestaña Insert y ahí publicaremos las noticias (de momento). Podéis publicar una de prueba si queréis para ver cómo va la cosa.
2#
Si os fijasteis pusimos un enlace en el que si pinchamos accederemos a una página llamada noticia.php?id=id de la noticia
Aquí se verá la noticia seleccionada donde podremos dejar y ver los comentarios puestos en esta.
Ahora, en la misma base de datos en la que pusimos la tabla noticias, creamos otra tabla llamada comentarios, y los campos deben quedar así:
[contenido no disponible]
Ahora que ya tenemos la tabla donde almacenaremos todos los comentarios, crearemos el archivo noticia.php para ver cada una de las noticias que el usuario quiera y poder comentarlas y ver sus comentarios, así que creamos el archivo noticia.php con el código:
<!DOCTYPE html><html lang="es"> <head> <title>Comentarios de la noticia</title> <meta charset="iso-8859-1" /> </head> <body><?php
include_once("config.php");
// Almacenamos en la variable la ID de la noticia que queremos ver y comprobamos que es válido$id = strip_tags($_GET["id"]);if(!is_numeric($id) OR $id<=0){header("location: noticias.php");return false;}
$result = mysql_query("SELECT * FROM $tabla WHERE id_noticia=$id") or die(mysql_error());
if(mysql_num_rows($result)){while($qry = mysql_fetch_array($result)){
echo "$qry['titulo']<br/><smal>Publicado por $qry['autor'] el día $qry['fecha']</small><br/><br/>$qry['novedad']<br/><h1><u>Comentarios</u></h1>";
$comentarios = mysql_query("SELECT * FROM comentarios WHERE id=$id") or die(mysql_error());if(mysql_num_rows($comentarios)){while($infocoment = mysql_fetch_array($comentarios){
$nick = strip_tags($infocoment["nick"]);$comentario = strip_tags($infocoment["comentario"]);$fecha = $infocoment["fecha"];$hora = $infocoment["hora"];
echo "$nick dijo...<br/>$comentario<br/><small>Publicado el día $fecha a las $hora</small><hr/>";
}}
echo "<br/><br/><form method='post' action='comentar.php'><input type='hidden' name='id' id='id' value='$id'><label>Nick<br/><input type='text' name='nick' id='nick' maxlength='20' /></label><br/><label>Tu email (No será publicado)<br/><input type='text' name='email' id='email' maxlength='255' /></label><b /><label>Tu comentario<br/><textarea name='comentario' id='comentario'></textarea></label><br/><button type='submit'>Enviar comentario</button></form>";
}}?> </body></html>Ahora crearemos el archivo llamado comentar.php que tendrá el siguiente código:<?php
# Configuramos la zona horaria para que sea la de Españadate_default_timezone_set('Europe/Madrid');
# Guardamos en las variables la fecha y hora de envío del comentario$fecha = date("Y/m/d/");$hora = date("H:i:s");
# Información enviada por el usuario$id = strip_tags($_POST["id"]);$nick = strip_tags($_POST["nick"]);$email = strip_tags($_POST["email"]);$comentario = strip_tags($_POST["comentario"]);
include_once("config.php");
# Validamos el comentarioif(!is_numeric($id) OR $id<=0 OR !$id OR !$nick OR !$email OR !$comentario){echo "Te faltó completar algo! ;(";return false;}
# Ingremos el comentario en la base de datosmysql_query("INSERT INTO comentarios (`id`, `nick`, `email`, `comentario`, `fecha`, `hora`) VALUES ('$id', '$nick', '$email', '$comentario', '$fecha', '$hora')");
# Volvemos a la noticiaheader ("location: noticia.php?id=$id");
?>3# Crear panel para publicar noticias
Bueno, ampliamos el tutorial para crear una especie de panel en el que podamos publicar las noticias.
1º) Crearemos un archivo llamado publicar.php que tendrá el siguiente código: (El Doctype, los estilos, la codificación, etc... se los tenéis que poner vosotros jeje)
<html>
<head>
</head>
<body>
<form method="post" action="enviar.php">
<label>Autor de la noticia<br/><input type="text" name="autor" maxlength="255" /></label><br/><br/>
<label>Título de la noticia<br/><input type="text" name="titulo" maxlength="255" /></label><br/><br/>
<label>Categoría<br/><input type="text" name="categoria" maxlength="255" /></label><br/><br/>
<label>Noticia<br/><textarea name="novedad"></textarea></label><br/><br/>
<button type="submit">Publicar noticia</button>
</form>
</body>
</html>2º) Como visteis en el código, con el formulario llamamos a enviar.php para que guarde los datos en la base de datos, así que este archivo se llamará enviar.php y tendrá el siguiente código:
<?
// Declaramos la variable para guardar la fecha en la que se publicó la noticia
$fecha=date("Y/n/d");
// Conectamos a la base de datos
$connect=mysql_connect("[COLOR=red]servidor[/COLOR]","[COLOR=red][COLOR=red]usuariodelabasededatos[/COLOR][/COLOR]","[COLOR=red]password[/COLOR]");
// Seleccionamos la base de datos
mysql_select_db("[COLOR=red]basededatos[/COLOR]",$connect);
// Aquí lo que hacemos es que si algún listillo quiere ir directamente al archivo enviar.php para publicar una noticia en blanco, le salte un error
if (!$autor || !$titulo|| !$categoria|| !$novedad) { echo "¡Tienes que completar todos los campos para publicar tu noticia!"; }
else {
// Ingresamos la noticia en la base de datos
mysql_query ("INSERT INTO `[COLOR=red]basededatos[/COLOR]`.`novedades`(`autor`, `titulo`, `categoria`, `fecha`, `novedad`) VALUES ('$_POST[autor]', '$_POST[titulo]', '$_POST[categoria]', '$fecha', '$_POST[novedad]')");
}
?>4# Crear panel de administración de las noticias (En construcción)
Ahora crearemos un panel en el que podremos administrar todas las noticias, para editarlas o borrarlas sin tener que acceder todo el rato a la base de datos.
Por cierto, primero de todo, nadie puede saber la página en la que estará este panel, no vaya a ser que salte la seguridad que le pongamos (poca, pero ya le iremos añadiendo más jeje) y haga una catástrofe en nuestra web.
Vale, empezamos!
1º) Crearemos un directorio o carpeta, lo llamaremos, hmm... moderacion, se llamará moderacion (sin la tilde en la o!)
2º) Ahora crearemos un archivo en el directorio moderacion que se llamará index.php, y este archivo tendrá el siguiente código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="noindex,nofollow" />
<title>Sistema de noticias en PHP</title>
<?php
//conectamos a la base
$connect=mysql_connect("[COLOR=red]servidor[/COLOR]","[COLOR=red]usuariodelabasededatos[/COLOR]" ,"[COLOR=red]passworddelabasededatos[/COLOR]");
//Seleccionamos la base
mysql_select_db("[COLOR=red]tubasededatos[/COLOR]",$connect);
//hacemos las consultas
$result=mysql_query("SELECT * FROM `[COLOR=red]tubasededatos[/COLOR]`.`novedades`", $connect);
$totalregistros=mysql_num_rows($result);
?>
</head>
<body>
<?php
include ("config.php");
$result = mysql_db_query($database, 'SELECT * FROM `[COLOR=red]tubasededatos[/COLOR]`.`novedades` ORDER BY id_noticia DESC') or die (mysql_error());
if (mysql_num_rows($result)) {
while ($qry = mysql_fetch_array($result)) {
echo "[COLOR=red]$qry[titulo]<br/>Publicado por $qry[autor] el día $qry[fecha]<br/><br/>$qry[novedad]<br/><br/>Publicado en $qry[categoria] | <a href='novedad.php?id=$qry[id_noticia]'>Deja tu comentario</a> | <a href='borrar.php?id=$qry[id_noticia]'>Borrar</a>[/COLOR]";
}
}
?>
</body>
</html>Si os fijáis, es el mismo código que el que tenemos para mostrar todas las noticias en la página principal, pero en este tenemos dos líneas de código nuevas:
<meta name="robots" content="noindex,nofollow" />Esta línea es para que la página de moderacion no aparezca en Google, Yahoo, etc... y así nadie sabe la página
Y la otra línea es un enlace que pone Borrar (<a href='borrar.php?id=$qry[id_noticia]'>Borrar</a>)
Entonces, en esa línea vemos que llamamos al archivo borrar.php, así que ahora crearemos un archivo llamado borrar.php y tendrá el siguiente código:
<?php
// Declaramos la variable ID en la que recibimos el ID que pusimos en la URL, por tanto, recibimos el ID de la noticia que queremos borrar
$id = $_GET[id];
// Conectamos a la base de datos
mysql_connect("[COLOR=red]servidor[/COLOR]","[COLOR=red]usuariodelabasededatos[/COLOR]","[COLOR=red]passwordelabasededatos[/COLOR]");
// Seleccionamos la base de datos
mysql_select_db("[COLOR=red]basededatos[/COLOR]");
// Ahora creamos la sentencia SQL para borrar la noticia correspondiente
$sSQL="DELETE FROM novedades WHERE id_noticia=$id";
// Ahora ejecutamos la sentencia SQL de arriba en la que borramos la noticia
mysql_query($sSQL);
?>Bien, ahora podemos borrar cualquier noticia con un sólo click!
Ahora lo que haremos será poder editar las noticias desde este panel, en el archivo index.php del directorio moderacion, cambiamos el código que teníamos por este:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="noindex,nofollow" />
<title>Sistema de noticias en PHP</title>
<?php
//conectamos a la base
$connect=mysql_connect("[COLOR=red]servidor[/COLOR]","[COLOR=red]usuariodelabasededatos[/COLOR]" ,"[COLOR=red]passworddelabasededatos[/COLOR]");
//Seleccionamos la base
mysql_select_db("[COLOR=red]tubasededatos[/COLOR]",$connect);
//hacemos las consultas
$result=mysql_query("SELECT * FROM `[COLOR=red]tubasededatos[/COLOR]`.`novedades`", $connect);
$totalregistros=mysql_num_rows($result);
?>
</head>
<body>
<?php
include ("config.php");
$result = mysql_db_query($database, 'SELECT * FROM `[COLOR=red]tubasededatos[/COLOR]`.`novedades` ORDER BY id_noticia DESC') or die (mysql_error());
if (mysql_num_rows($result)) {
while ($qry = mysql_fetch_array($result)) {
echo "[COLOR=red]$qry[titulo]<br/>Publicado por $qry[autor] el día $qry[fecha]<br/><br/>$qry[novedad]<br/><br/>Publicado en $qry[categoria] | <a href='novedad.php?id=$qry[id_noticia]'>Deja tu comentario</a> | <a href='borrar.php?id=$qry[id_noticia]'>Borrar</a>[/COLOR] | <a href='editar.php?id=$qry[id_noticia]'>Editar</a>";
}
}
?>
</body>
</html>Lo único que hemos hecho es añadir otro enlace al lado del de Borrar, y el enlace es editar.php?id=id de la noticia
así que ahora creamos un archivo llamado editar.php y tendrá el siguiente código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="robots" content="noindex,nofollow" />
<title>Editar noticia</title>
</head>
<body>
<?php
// Declaramos la variable ID en la que recibimos el ID que pusimos en la URL, por tanto, recibimos el ID de la noticia que queremos borrar
$id = $_GET[id];
// Conectamos a la base de datos
mysql_connect("[COLOR=red]servidor[/COLOR]","[COLOR=red]usuariodelabasededatos[/COLOR]","[COLOR=red]passworddelabasededatos[/COLOR]");
// Seleccionamos la base de datos
mysql_select_db("[COLOR=red]basededatos[/COLOR]");
// Seleccionamos la noticia correspondiente dependiendo del ID especificado en la URL
$result=mysql_query("SELECT * FROM `[COLOR=red]tubasededatos[/COLOR]`.`novedades` WHERE id_noticia=$id", $connect) or die (mysql_error());
if (mysql_num_rows($result)) {
while ($qry = mysql_fetch_array($result)) {
// Mostramos un formulario con los datos de la noticia puestos en inputs para poder modificarlos
echo "<form method='post' action='actualizar.php'>
<input type='hidden' name='id' id='id' value='$id' />
Título de la noticia: <input type='text' name='titulo' id='titulo' value='$qry[titulo]' /><br />
Autor de la noticia: <input type='text' name='autor' id='autor' value='$qry[autor]' /><br />
Categoría de la noticia: <input type='text' name='categoria' id='categoria' value='$qry[categoria]' /><br />
Fecha de la noticia (Tienes que ponerla en formato AÑO-MES-DÍA): <input type='text' name='fecha' id='fecha' value='$qry[fecha' /><br />
Contenido de la noticia: <textarea name='novedad' id='novedad'>$qry[novedad]</textarea><br />
<button type='submit'>Editar noticia</button>
</form>";
}
}
?>
</body>
</html>Y como veis llamamos al archivo actualizar.php en el formulario, así que ahora crearemos un archivo llamado actualizar.php y tendrá el siguiente código:
<?php
// Declaramos las variables enviadas por el formulario
$id = $_POST[id];
$titulo = $_POST[titulo];
$autor = $_POST[autor];
$categoria = $_POST[categoria];
$fecha = $_POST[fecha];
$novedad = $_POST[novedad];
// Conectamos a la base de datos
mysql_connect("[COLOR=red]servidor[/COLOR]","[COLOR=red]usuariodelabasededatos[/COLOR]","[COLOR=red]passworddelabasededatos[/COLOR]");
// Seleccionamos la base de datos
mysql_select_db("[COLOR=red]basededatos[/COLOR]");
// Creamos las sentencias SQL para editar todos los campos de la noticia seleccionada
$sSQL="UPDATE titulo SET titulo='$titulo' WHERE id_noticia=$id";
$sSQL="UPDATE autor SET autor='$autor' WHERE id_noticia=$id";
$sSQL="UPDATE categoria SET categoria='$categoria' WHERE id_noticia=$id";
$sSQL="UPDATE fecha SET fecha='$fecha' WHERE id_noticia=$id";
$sSQL="UPDATE novedad SET novedad='$novedad' WHERE id_noticia=$id";
// Ejecutamos las sentencias anteriores para modificar lo campos de la noticia seleccionada
mysql_query($sSQL);
?>
hehe. Ya espero lo demás HEHE! Suerte escribiendo tanto. Por cierto, has slucionado el problema de seguridad de incluir HTML en los comentarios?