Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/08/2012, 17:58
PepeF
 
Fecha de Ingreso: julio-2012
Mensajes: 276
Antigüedad: 11 años, 9 meses
Puntos: 27
Mensaje [APORTE] Sistema de Noticias y Comentarios Con MYSQLI

¿Que es este sistema?
Con este sistema puedes crear tus propias noticias y agregarles comentarios.

¿Pero me puedes hacer inyeccion html?
No, porque he puesto un sistema que al insertar codigos html los imprime pero no se ejecutan.

¿Como agrego las noticias?
Te tienes que ir al index.php poner el nombre y contraseña y desde hay podras crear las noticias

¿Cual es el nombre y la contraseña?
Por defecto
El nombre: admin
La contraseña: admin
Puedes cambiar el nombre y la contraseña en el archivo llamado index.php

¿Cuantos archivos son?
Son 4 archivos
1- Comentarios.php
2- Conectar.php
3- Index.php
4- Noticias.php

¿Cual es el archivo para modificar la conexion a la base de dato?
El archivo se llama conectar.php

¿Este sistema tiene filtros?
Si, y son los siguientes:

Para crear una noticia:
1- El titulo debe tener como minimo 6 caracteres.
2- El contenido debe tener como minimo 20 caracteres.
3- El titulo y el contenido no pueden estar en blanco.

Para publicar un comentario:
1- El nombre debe tener como minimo 5 caracteres.
2- El mensaje debe tener como minimo 10 caracteres.
3- El nombre y el mensaje no pueden estar en blanco.

¿Para ver los nuevos comentario tengo que reiniciar la pagina?
No, he puesto un sistema para que cada segundo reinicia la pagina (Tu no te daras ni cuenta) por eso si alguien comenta al segundo lo veras en la pagina.

¿Que tengo que añadir en mi base de dato?
Añade estos codigos en tu base de dato:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `comentarios` (
  2.   `Id_Comentarios` varchar(40) NOT NULL,
  3.   `Autor` text NOT NULL,
  4.   `Comentario` text NOT NULL,
  5.   `Fecha` varchar(40) NOT NULL,
  6.   `Ip` varchar(40) NOT NULL,
  7.   PRIMARY KEY (`Id`)
  8. )
  9.  
  10. CREATE TABLE IF NOT EXISTS `ip` (
  11.   `Ip` varchar(40) NOT NULL DEFAULT '',
  12.   PRIMARY KEY (`Ip`)
  13. )
  14.  
  15. CREATE TABLE IF NOT EXISTS `noticias` (
  16.   `Titulo` text NOT NULL,
  17.   `Contenido` text NOT NULL,
  18.   `Categoria` varchar(40) NOT NULL,
  19.   `Fecha` varchar(40) NOT NULL,
  20.   `Ip` varchar(40) NOT NULL,
  21.   PRIMARY KEY (`Id`)
  22. )

Codigo:

Comentarios.php
Código PHP:
Ver original
  1. <?php
  2. include ("conectar.php");
  3. ?>
  4.  
  5. <?php
  6. $comentarios = mysqli_query($conexion, "SELECT Autor,Comentario,Fecha FROM comentarios WHERE Id_Comentarios = '$_GET[noticia]' ORDER BY Fecha DESC");
  7.     echo "<h2>Los comentarios</h2>";
  8.     while($comentar = mysqli_fetch_array($comentarios)){
  9.     echo "<b>$comentar[Autor]</b> $comentar[Fecha]h <br> <div style='word-wrap:break-word; width:500px;'>$comentar[Comentario]<br></div><br>";
  10.     }
  11. echo "<h2>Añadir Comentario</h2>";
  12. echo "<font color='red'>";
  13. if(isset($_POST['enviar'])){
  14.     if(strlen($_POST['nombre']) <= "4"){
  15.     echo "El nombre debe tener como minimo 5 caracteres.";
  16.     }else{
  17.     if(strlen($_POST['mensaje']) <= "9"){
  18.     echo "El mensaje debe tener como minimo 10 caracteres.";
  19.     }else{
  20.     if($_POST['nombre'] == "" | $_POST['mensaje'] == ""){
  21.     echo "Rellena los campos en blanco.";
  22.     }else{
  23.     $_POST[mensaje] = strip_tags($_POST['mensaje']);
  24.     mysqli_query($conexion, "INSERT INTO comentarios(Id,Id_Comentarios,Autor,Comentario,Fecha,Ip) VALUES ('', '$_GET[noticia]', '$_POST[nombre]', '$_POST[mensaje]', NOW(), '$_SERVER[REMOTE_ADDR]')");
  25.     echo "<script>setTimeout(document.location.reload(),1);</script>";
  26.     }}}
  27. }
  28. echo "</font>";
  29. ?>
  30.  
  31. <form action="" method="post">
  32.   <input name="nombre"><br>
  33.   <textarea name="mensaje" rows="6" cols="37"></textarea><br>
  34.   <input name="enviar" type="submit">
  35. </form>

Conectar.php
Código PHP:
Ver original
  1. <?php
  2. $conexion = mysqli_connect(".............","..............",".................");
  3. mysqli_select_db($conexion, "............");
  4. ?>

Index.php
Código PHP:
Ver original
  1. <?php
  2. include ("conectar.php");
  3. ?>
  4. <?php
  5. // Verifica si el usuario y la contraseña es correcta //
  6. if(isset($_POST['enviar'])){
  7.     $nombre = "admin"; // Cambia aqui el nombre
  8.     $contraseña = "admin"; // Cambia aqui la contraseña
  9.     if($_POST['nombre'] == $nombre AND $_POST['contraseña'] == $contraseña){
  10.     setcookie("nombre","caca");
  11.     header('Location: index.php');
  12.     }else{
  13.     echo "La contraseña no es correcta";
  14.     }
  15. }
  16. ?>
  17. <?php
  18. // Crea la noticia y te desconecta //
  19. if($_COOKIE['nombre']){
  20.     if(isset($_POST['enviando'])){
  21. echo "<font color='red'>";
  22.         if(strlen($_POST['titulo']) <= "5"){
  23.         echo "El titulo debe tener como minimo 6 caracteres<br>";
  24.         }else{
  25.         if(strlen($_POST['contenido']) <= "19"){
  26.         echo "El contenido tiene que tener como minimo 20 caracteres<br>";
  27.         }else{
  28.         if($_POST['titulo'] == "" | $_POST['contenido'] == ""){
  29.         echo "Rellena todos los campos en blanco<br>";
  30.         }else{
  31.         mysqli_query($conexion, "INSERT INTO noticias(Id,Titulo,Contenido,Categoria,Fecha,Ip) VALUES ('', '$_POST[titulo]', '$_POST[contenido]', '$_POST[categoria]', NOW(), '$_SERVER[REMOTE_ADDR]')");
  32.         echo "<font color='green'>Noticia generada con exito</font><br>";
  33.         }}}
  34. echo "</font>";
  35.     }
  36.     if(isset($_POST['desconectar'])){
  37.     setcookie("nombre");
  38.     header('Location: index.php');
  39.     }
  40. ?>
  41.  
  42. <form action="" method="post">
  43.   Titulo: <input name="titulo"><br>
  44.   Contenido: <br> <textarea name="contenido" rows="6" cols="37"></textarea><br>
  45.   Categoria: <select name="categoria"><option>Futbol<option>Baloncesto</option></select><br>
  46.   <input name="enviando" type="submit" value="Publicar noticia">
  47. </form>
  48.  
  49. <form action="" method="post">
  50. <input name="desconectar" type="submit" value="Desconectar">
  51. </form>
  52.  
  53. <?php
  54. // Lo que sale si no estas registrado //
  55. }else{
  56. echo '
  57. <form action="" method="post">
  58.  Nombre: <input name="nombre"><br>
  59.  Contraseña: <input name="contraseña"><br>
  60.  <input name="enviar" type="submit">
  61. </form>
  62. <a href="noticias.php">Ver noticias</a>';
  63. }
  64. ?>

Noticias.php
Código PHP:
Ver original
  1. <?php
  2. include ("conectar.php");
  3. ?>
  4. <?php
  5. $noticias = mysqli_query($conexion, "SELECT Categoria FROM noticias");
  6.  
  7. if($_GET['noticia'] <> ""){
  8.     $noticia = mysqli_query($conexion, "SELECT Titulo,Contenido,Fecha FROM noticias WHERE Id = '$_GET[noticia]'");
  9.     if($not = mysqli_fetch_array($noticia)){
  10.     echo "<b>$not[Titulo]</b> $not[Fecha]<br><br> <div style='word-wrap:break-word; width:500px;'>$not[Contenido]<br></div>";
  11.     include ("comentarios.php");
  12.     }else{
  13.     echo "La noticia no existe.";
  14.     }
  15. }elseif($_GET['categoria'] == ""){
  16.     echo "¿De que te gustan las notcias? <br>";
  17.     if($not = mysqli_fetch_array($noticias)){
  18.     $noticia = mysqli_query($conexion, "SELECT DISTINCT Categoria FROM noticias");
  19.     while($not = mysqli_fetch_array($noticia)){
  20.     echo "<br> <a href='?categoria=$not[Categoria]'>$not[Categoria]</a>";
  21.     }}
  22. }elseif($_GET['categoria'] <> "'"){
  23.     $noticias = mysqli_query($conexion, "SELECT * FROM noticias WHERE Categoria = '$_GET[categoria]'");
  24.     echo "Aqui estan todas las noticias de <b>$_GET[categoria]</b>";
  25.     while($not = mysqli_fetch_array($noticias)){
  26.     echo "<br><a href='?noticia=$not[Id]'>$not[Titulo]</a>";
  27.     }
  28. }else{
  29.     mysqli_query($conexion, "INSERT INTO ip(Ip) VALUES ('$_SERVER[REMOTE_ADDR]')");
  30. }
  31. ?>

Última edición por PepeF; 16/08/2012 a las 18:10