Hola!
Bueno, con la ayuda de algunos miembros de CCTW he corregido (bueno, ellos corrigieron mejor dicho, yo no hice casi nada jeje) este sistema de noticias en PHP que tenía errores, y lo publico para que podáis usarlo!
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 (En construcción este punto)
---------------------------------------------------------------------------------------------------------------------------
1#
1º) Tenemos que crear en la base de datos una tabla llamada novedades y de campos, los pondremos como los tengo en la siguiente imagen:
2º) Ahora vamos a crear la página donde se visualizarán las novedades/noticias, la llamaremos noticias.php y su código será el siguiente:
3º) Ahora creamos un archivo llamado config.php que tendrá el siguiente código: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" /> <title>Sistema de noticias en PHP</title> <?php //conectamos a la base $connect=mysql_connect("servidor","usuariodelabasededatos" ,"passworddelabasededatos"); //Seleccionamos la base mysql_select_db("tubasededatos",$connect); //hacemos las consultas $result=mysql_query("SELECT * FROM `tubasededatos`.`novedades`", $connect); $totalregistros=mysql_num_rows($result); ?> </head> <body> <?php include ("config.php"); $result = mysql_db_query($database, 'SELECT * FROM `tubasededatos`.`novedades` ORDER BY id_noticia DESC') or die (mysql_error()); if (mysql_num_rows($result)) { while ($qry = mysql_fetch_array($result)) { echo "$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>"; } } ?> </body> </html>
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, aunque de momento no se verá, ya queda poco!Código:<?php // Servidor donde se aloja la base de datos, con poner localhost suele llegar (Si usas el hosting de CCTW pon localhost) $server="servidor"; // Nombre de la base de datos $database = "basededatos"; // Usuario administrador de la base de datos $db_user = "usuario"; // Contraseña del usuario $db_pass = "passworddelabasededatos"; $table = "novedades"; ?>
2#
Si os fijasteis pusimos un enlace llamado <a href="novedad.php?id=$qry[id_noticia]">Deja tu comentario</a>
Eso lo que hará es dejar la página llamada novedad.php?id=id de la noticia
Aquí se verá la noticia seleccionada donde podremos dejar y ver los comentarios puestos en esta
Así que creamos un archivo llamado novedad.php con el siguiente código:
Ahora al guardar el archivo, si ponemos en vuestra página novedad.php?id=1Có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" /> <title>Sistema de noticias en PHP</title> <?php //conectamos a la base $connect=mysql_connect("servidor","usuariodelabasededatos" ,"passworddelabasededatos"); //Seleccionamos la base mysql_select_db("tubasededatos",$connect); //hacemos las consultas $result=mysql_query("SELECT * FROM `tubasededatos`.`novedades`", $connect); $totalregistros=mysql_num_rows($result); ?> </head> <body> <? // Recibimos la variable llamada id, que es la que se pone en la URL (novedad.php?id=ID DE LA NOTICIA) $id = htmlentities($_GET[id]); $id = strip_tags($id); // Conectamos a la base de datos $connect=mysql_connect("servidor","usuariodelabasededatos", "passworddelabasededatos"); // Seleccionamos la base de datos mysql_select_db("tubasededatos",$connect); // Hacemos las consultas para seleccionar la noticia correspondiente $result=mysql_query("select * from `tubasededatos`.`novedades` where id_noticia=$id", $connect) or die (mysql_error()); // Aquí lo que hacemos es que si alguien pone en la url algo así como novedad.php?id=-1 le rediriga a una página en concreto de error, ya que poner el número negativo lo aprovechan los crackers. Este código me lo pasó Rabs, gracias! if ($id<0) { header ("location: URL"); } // Aquí es lo mismo que arriba pero para si ponen de ID el número 0 if ($id==0) { header ("location: URL"); } if (mysql_num_rows($result)) { while ($qry = mysql_fetch_array($result)) { echo "$qry[titulo]<br/>Publicado por $qry[autor] el día $qry[fecha]<br/><br/>$qry[novedad]<br/><br/>"; } } ?> </body> </html>
Se verá la noticia que publicasteis antes en el phpmyadmin
Ahora lo que haremos será modificar el código para mostrar los comentarios escritos en esa noticia, y un formulario para que puedan comentar, claro
Ahora, en la misma base de datos en la que pusimos la tabla novedades, creamos otra tabla llamada comentarios, y los campos deben quedar así:
Ahora abrimos otra vez el archivo llamada novedad.php y añadimos justo al final (antes de la etiqueta </body>) de él el siguiente código:
Ahora crearemos un formulario para comentar esa misma noticia, lo pondremos al final del archivo novedad.php (antes de la etiqueta </body>)Código:<? // Recibimos la variable id por GET para mostrar la novedad correspondiente $id = htmlentities($_GET[id]); $id = strip_tags($id); // Conectamos a la base de datos $connect=mysql_connect("servidor","usuariodelabasededatos", "passworddelabasededatos"); // Seleccionamos la base de datos mysql_select_db("tubasededatos",$connect); // Hacemos las consultas para seleccionar el registro correcto $result3=mysql_query("select * from `tubasededatos`.`comentarios` where id =$id", $connect) or die (mysql_error()); if (mysql_num_rows($result3)) { while ($qry = mysql_fetch_array($result3)) { // Declaramos variables para evitar que inserten código HTML en su nick y puedan obtener datos de la base de datos $nick = strip_tags($qry[nick]); $nick = htmlentities($nick); // Declaramos variables para evitar que inserten código HTML en el comentario y puedan obtener datos de la base de datos $comentario = strip_tags($qry[comentario]); $comentario = htmlentities($comentario); // Esta podéis borrarla si queréis, es para que la primera letra del comentario vaya en mayúscula y los comentarios parezca que tengan mejor ortografía jeje $comentario = ucfirst($comentario); echo "$nick dijo...<br/>$comentario<br/>Publicado el día $qry[fecha] a las $qry[hora]"; } } ?>
Como veis, llamamos al archivo comentar.php para añadir el comentario a la base de datos.Código:<? // Recibimos la variable id por GET para mostrar la novedad correspondiente $id = htmlentities($_GET[id]); $id = strip_tags($id); // Conectamos a la base de datos $connect=mysql_connect("tuservidor","usuariodelabasededatos", "password"); // Seleccionamos la base de datos mysql_select_db("tubasededatos",$connect); // Hacemos las consultas para seleccionar el registro correcto $result3=mysql_query("select * from `tubasededatos`.`comentarios` where id =$id", $connect) or die (mysql_error()); echo "<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='10' /></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>"; ?>
Si os fijáis, pusimos un campo hidden llamado id con la variable de la novedad, para poder poner el comentario en la noticia correspondiente.
Ahora crearemos el archivo llamado comentar.php que tendrá el siguiente código:
3# Crear panel para publicar noticiasCódigo:<? // Declaramos que la hora de envío de comentario se ponga en la hora de España date_default_timezone_set('Europe/Madrid'); // Declaramos las variables para guardar la fecha y hora de envío del comentario $fecha=date("Y/n/d"); $hora=date("H:i:s"); // Declaramos las variables para validar luego el formulario $id = $_POST[id]; $nick = $_POST[nick]; $email = $_POST[email]; $comentario = $_POST[comentario]; // Conectamos a la base de datos $connect=mysql_connect("servidor","tubasededatos","passworddelabasededatos"); // Seleccionamos la base de datos mysql_select_db("tubasededatos",$connect); // Aquí validamos el formulario para saber si completó todos los campos, si no los completó pondrá el mensaje del echo if (!$id || !$nick || !$email || !$comentario) { echo "Tienes que completar todos los campos del formulario para dejar tu comentario!"; } else { // Ingresamos el comentario en la tabla mysql_query ("INSERT INTO `tubasededatos`.`comentarios`(`id`, `nick`, `email`, `comentario`, `fecha`, `hora`) VALUES ('$_POST[id]', '$_POST[nick]', '$_POST[email]', '$_POST[comentario]', '$fecha', '$hora')"); // Volvemos a la novedad en la que estábamos header("location: novedad.php?id=$_POST[id]"); } ?>
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:Código:<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>
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("servidor","usuariodelabasededatos","password"); // Seleccionamos la base de datos mysql_select_db("basededatos",$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 `basededatos`.`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:
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: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("servidor","usuariodelabasededatos" ,"passworddelabasededatos"); //Seleccionamos la base mysql_select_db("tubasededatos",$connect); //hacemos las consultas $result=mysql_query("SELECT * FROM `tubasededatos`.`novedades`", $connect); $totalregistros=mysql_num_rows($result); ?> </head> <body> <?php include ("config.php"); $result = mysql_db_query($database, 'SELECT * FROM `tubasededatos`.`novedades` ORDER BY id_noticia DESC') or die (mysql_error()); if (mysql_num_rows($result)) { while ($qry = mysql_fetch_array($result)) { echo "$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>"; } } ?> </body> </html>
Esta línea es para que la página de moderacion no aparezca en Google, Yahoo, etc... y así nadie sabe la página<meta name="robots" content="noindex,nofollow" />
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!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("servidor","usuariodelabasededatos","passwordelabasededatos"); // Seleccionamos la base de datos mysql_select_db("basededatos"); // 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); ?>
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 noticiaCó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("servidor","usuariodelabasededatos" ,"passworddelabasededatos"); //Seleccionamos la base mysql_select_db("tubasededatos",$connect); //hacemos las consultas $result=mysql_query("SELECT * FROM `tubasededatos`.`novedades`", $connect); $totalregistros=mysql_num_rows($result); ?> </head> <body> <?php include ("config.php"); $result = mysql_db_query($database, 'SELECT * FROM `tubasededatos`.`novedades` ORDER BY id_noticia DESC') or die (mysql_error()); if (mysql_num_rows($result)) { while ($qry = mysql_fetch_array($result)) { echo "$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> | <a href='editar.php?id=$qry[id_noticia]'>Editar</a>"; } } ?> </body> </html>
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: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("servidor","usuariodelabasededatos","passworddelabasededatos"); // Seleccionamos la base de datos mysql_select_db("basededatos"); // Seleccionamos la noticia correspondiente dependiendo del ID especificado en la URL $result=mysql_query("SELECT * FROM `tubasededatos`.`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>
--------------------------------------------------------------------------------------------------------------------------------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("servidor","usuariodelabasededatos","passworddelabasededatos"); // Seleccionamos la base de datos mysql_select_db("basededatos"); // 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); ?>
Ahora sólo quiero deciros que no me tenéis que dar puntos de reputación a mí por este mensaje, si no a Rabs, skaparate o serverdns que fueron los que realmente hicieron este sistema.





Citar
hehe. Ya espero lo demás HEHE! Suerte escribiendo tanto. Por cierto, has slucionado el problema de seguridad de incluir HTML en los comentarios?



Marcadores