Regresar a la página ComoCrearTuWeb.com
Resultados 1 al 12 de 12

Tema: [APLICACION] Sistema de Noticias con fotos

  1. #1
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18

    Post [APLICACION] Sistema de Noticias con fotos

    Estimados, este es mi aporte a la comunidad de foreros que nos manejamos en el php+MySQL: un sistema de gestión de noticias, con administrador y método para subir fotos y el apoyo de una clase para darle dimensión proporcional a las imágenes que acompañan a cada publicación.

    He desarrollado el script pensando en el paradigma "menos es más", o sea, soy minimalista y opino que mientras un sistema utilice pocos recursos para hacer lo mismo que otros scripts similares, pues nada mejor!

    El script es modificable y el código, obviamente, susceptible de ser mejorado. Las rutinas mysql podrían ser pasadas a mysqli y usar PDO, etc. No lo he hecho porque no me manejo en ese nuevo paradigma. SI alguien quiere hacerlo, bienvenido sea y solo pido que comparta su trabajo, tal como yo he hecho con el mío.

    En el frontend hay solo dos archivos, index.php y thumbs.php que es la clase que redimensiona al vuelo las imágenes o fotos que acompañan a cada texto.

    index.php

    Código PHP:
    <?php
    require ('includes/conexion.php'); // Incluimos nuestro archivo de conexión con la base de datos 
    $noRegistros 3//Registros por página
    $pagina 1//Por default, página = 1
    if(isset($_GET["pagina"]) && is_numeric($_GET['pagina'])) //Si hay página por ?pagina=valor, lo asigna
        
    $pagina $_GET["pagina"];
    ?>
    <!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">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>NOTICIAS :::.</title>
    <link rel="stylesheet" href="css/estilo.css" type="text/css" />

    <script language="JavaScript" type="text/javascript" src="ajax.js"></script>
    </head>

    <body>
    <div id="contenido">
    <div id="menu">
    <?php
    //include("conexion.php"); // Incluimos nuestro archivo de conexión con la base de datos'.$_SERVER['PHP_SELF'].'
    $query mysql_query("SELECT * FROM ".$db_cat.""); // Ejecutamos la consulta
    echo '<a href="./">Inicio</a>';
    while(
    $columna mysql_fetch_assoc($query)) // Realizamos un bucle que muestre todas las noticias, utilizando while. 
        

    echo 
    '&nbsp;|&nbsp;<a href="?categoria='.$columna['categoria'].'"><strong>'.$columna['categoria'].'</a>';
        } 

        {
    ?>
    </div>

    <?php
    //Obtenemos el grupo de noticias que están en una categoria, mediante el GET
    if(isset($_GET['categoria'])) 
            {
        
    $categoria mysql_real_escape_string($_GET['categoria']);
        
    $query mysql_query("SELECT * FROM ".$db_not." WHERE categoria = '".$categoria."' "); // Ejecutamos la consulta
        
    $num_rows mysql_num_rows($query);
            if (
    $num_rows == 0){
        echo 
    '<div align="center"><strong><h3>Esta Sección no tiene contenido</h3></strong></div>';
            exit;
            }
        
    $limite 555// Número de carácteres a mostrar antes de el "Leer más"    
        
    while($row mysql_fetch_assoc($query)){ // Realizamos un bucle que muestre todas las noticias, utilizando while.
    echo '<div class="separador"></div>';        
    echo 
    '<div id="contenedor">';
    echo 
    '<div class="flotar-de">';
    echo 
    '<h2 style="text-align: left;"><span style="font-weight: bold; text-shadow: rgba(23, 23, 23, 0.976563) 0px 0px 12px; font-size: 24px; color: #000000;">'.$row['titulo'].' </span></h2>'
    echo 
    '<span style="font-family: Arial; font-size: 13px; font-weight: bold; color: rgb(0, 0, 0); text-shadow: rgb(70, 46, 27) 0px 0px 6px;">'.substr($row['texto'], 0$limite).'';
    echo 
    '&nbsp;[...]<br><br></span>';
    echo 
    '<div id="separador"></div>';
    echo 
    '<a href="?id='.$row['id'].'"><img src="img/leer_mas.png" /></a></span></div>';
    echo 
    '<div class="flotar-iz">';
    echo 
    '<a href="uploads/'.$row['foto'].'" rel="lightbox" >';
    echo 
    '<img src="thumb.php?src=uploads/'.$row['foto'].'" class="foto" /></a></div></div>';
    //echo '<img src="uploads/'.$row['foto'].'" class="foto" /></a></div></div>';
    echo '<div class="separador"></div>';
        }
    } else { 

    if(isset(
    $_GET['id'])) { 
    if(!empty(
    $_GET['id'])) { // Si el valor de "noticia" no es NULL, continua con el proceso 
    $id = (int) mysql_real_escape_string($_GET['id']); 
    $query_noticias mysql_query("SELECT * ,DATE_FORMAT(fecha,'%d-%m-%Y') AS fecha FROM ".$db_not." WHERE id = '".$id."' LIMIT 1"); // Ejecutamos la consulta 
    if(mysql_num_rows($query_noticias) > 0// Si existe la noticia, la muestra 
            

      while(
    $row mysql_fetch_assoc($query_noticias)) // Realizamos un bucle que muestre todas las noticias, utilizando while. 
                

    echo 
    '<div id="contenedor">';
    echo 
    '<div class="flotar-de">';
    echo 
    '<h1>'.$row['titulo'].'</h1>';
    echo 
    '<p>'.$row['fecha'].'&nbsp;/&nbsp;'.$row['categoria'].'</p><br>';
    echo 
    nl2br("$row[texto]");
    echo 
    '<a href="javascript:history.back();">Volver</a>';
    echo 
    '</div>';
    echo 
    '<div class="flotar-iz">';
    echo 
    '<img src="thumb.php?src=uploads/'.$row['foto'].'" class="foto" /></div>';
    echo 
    '</div>';
                }        
            } else {
    echo 
    'La noticia que solicitas, no existe. <br /> <a href="index.php">Volver</a>'// Si no, muestra un error
            
    }
        } else {
    echo 
    'Debes seleccionar una noticia. <br /> <a href="index.php">Volver</a>'// Si GET no recibe ningún valor, muestra un error
        
    }
    } else {

    $query_noticias mysql_query("SELECT *,DATE_FORMAT(fecha,'%d-%m-%Y, %h:%i:%s') AS fecha FROM ".$db_not." ORDER BY fecha DESC LIMIT ".($pagina-1)*$noRegistros.",$noRegistros"$conexion); // Ejecutamos la consulta
    $limite 555// Número de carácteres a mostrar antes de el "Leer más" nl2br
        
    while($row mysql_fetch_assoc($query_noticias)) // Realizamos un bucle que muestre todas las noticias, utilizando while.
        
    {
    echo 
    '<div id="contenedor">';
    echo 
    '<div class="flotar-de">';
    echo 
    '<span style="font-weight: bold; text-shadow: rgba(23, 23, 23, 0.976563) 0px 0px 12px; font-size: 24px; color: #000000;">'.$row['titulo'].'</span><br>';
    echo 
    '<p>'.substr($row['texto'], 0$limite).'&nbsp;&nbsp; [&nbsp;...&nbsp;]</p><br>';
    echo 
    '<a href="?id='.$row['id'].'">Leer más</a>&nbsp;|&nbsp;Publicado el:&nbsp;'.$row['fecha'].'&nbsp;En:&nbsp;'.$row['categoria'].'';
    echo 
    '</div>';
    echo 
    '<div id="separador"></div>';
    echo 
    '<div class="flotar-iz">';
    echo 
    '<a href="uploads/'.$row['foto'].'" rel="lightbox">';
    echo 
    '<img src="thumb.php?src=uploads/'.$row['foto'].'" class="foto" /></a></div>';
    //echo '<img src="uploads/'.$row['foto'].'" class="foto" /></a></div>';
    echo '</div>';
    }
            }
    }

    ?>
    <?php
    //Imprimiendo páginas
    $query_noticias "SELECT count(*) FROM ".$db_not.""//Cuento el total de registros
    $result mysql_query($query_noticias);
    $row mysql_fetch_array($result);
    $totalRegistros $row["count(*)"]; //Almaceno el total en una variable
    echo '<div id="paginacion" align="center"><td width="20%">';
    echo 
    "Total registros: ".$totalRegistros."&nbsp;/&nbsp;Pagina:";
    $noPaginas $totalRegistros/$noRegistros//Determino la cantidad de páginas
    for($i=1$i<$noPaginas+1$i++) { //Imprimo las páginas
        
    if($i == $pagina)
    echo 
    '<td width="2%" align="left">'.$i.''//A la página actual no le pongo link
        
    else
    echo 
    '<td width="2%" align="left"><a href="?pagina='.$i.'">&nbsp;'.$i.'&nbsp;</a></td></div>';
            }
    }

    ?>
    </div>
    <?php mysql_close($conexion); // cierra la conexion con la base de datos ?>

      </body>
     </html>
    El front está paginado.

    El documento de conexión está en una carpeta o directorio llamado includes.

    conexion.php
    Código PHP:
    <?php 
    // Realizamos la conexión con la base de datos 
      
    $db_host "localhost";                    // Servidor donde está alojada la base de datos 
    $db_name "noticias";                    // Nombre de la base de datos 
    $db_user "admin";                    // Usuario de la base de datos 
    $db_password "password";                // Contrasena de la base de datos 
    $db_not "noticias";           // Nombre de la tabla de la base de datos
    $db_cat "categorias";            //Nombre de la tabla de las categorias
    $conexion mysql_connect($db_host$db_user$db_password) or die("No se ha podido realizar la conexión con la base de datos. Error: ".mysql_error()); 
    mysql_select_db($db_name$conexion); 
      
    ?>
    Última edición por Dragon; 28/12/2014 a las 13:49

  2. #2
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18
    En el backend o gestor de contenidos está todo para publicar y subir las fotos. Descarguen el adjunto y verán de qué se trata.

    Saludos!

  3. #3
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18
    Voy a subir el comprimido a otro server, acá como usuario común no se me permite :(

  4. #4
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Hola!

    Gracias por el aporte :)!

    La página se está utilizando sin escapar, así que deberías validarla un poco más:

    Código PHP:
    if ( isset( $_GET["pagina"] ) && is_numeric$_GET['pagina'] ) ) //Si hay página por ?pagina=valor, lo asigna
    $pagina $_GET["pagina"]; 
    De esta forma ya no pueden insertar código SQL.

    Saludos!

  5. #5
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18
    Hola, Skaparate!

    ¿Hay que hacer lo mismo con los demás if(isset($_GET['id'])) .... etc ?

    Gracias por tu valioso comentario!

  6. #6
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    No es necesario porque estas utilizando mysql_real_escape con las demás. En general, siempre que vayas a incluir una variable que pueda ser manipulada por el usuario (información enviada desde el navegador), debes validar que lo esperado coincida con el tipo que necesitas o, en su defecto, escapar lo que sea potencialmente dañino.

    En el caso de los tipos de datos, un claro ejemplo es el de la página, donde esta no puede ser otra cosa que un número y de no serlo, simplemente queda en 1. Por otro lado, si lo que esperas es una cadena de caracteres (string) no tienes cómo saber que contendrá, por lo que mysql_real_escape es una buena forma de prevenir las inyecciones SQL.

    Por último, para mejorar aún más el script, podrías modificarlo para usar la extensión de PHP MySQLi en lugar de sólo MySQL, puesto que esta última está obsoleta -> http://php.net/manual/es/intro.mysqli.php.

  7. #7
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18
    Cita Iniciado por skaparate Ver Mensaje
    No es necesario porque estas utilizando mysql_real_escape con las demás. En general, siempre que vayas a incluir una variable que pueda ser manipulada por el usuario (información enviada desde el navegador), debes validar que lo esperado coincida con el tipo que necesitas o, en su defecto, escapar lo que sea potencialmente dañino.

    En el caso de los tipos de datos, un claro ejemplo es el de la página, donde esta no puede ser otra cosa que un número y de no serlo, simplemente queda en 1. Por otro lado, si lo que esperas es una cadena de caracteres (string) no tienes cómo saber que contendrá, por lo que mysql_real_escape es una buena forma de prevenir las inyecciones SQL.

    Por último, para mejorar aún más el script, podrías modificarlo para usar la extensión de PHP MySQLi en lugar de sólo MySQL, puesto que esta última está obsoleta -> http://php.net/manual/es/intro.mysqli.php.
    Oki, vale, gracias por tus consejos y ayuda, estimado Skaparate. Lo del mysqli es lo que necesito aprender y he estado haciendo ya algo, pero no me ha resultado. Llevé el mismo código de arriba, sin la paginación, al mysqli. Y es con categorías, pero no hay caso de que me funcione el asunto. Dame un correo y te envío la aplicación que menciono más arriba y lo que llevo hecho -con la misma aplicación y filosofía de trabajo- al paradigma mysqli.

    Saludos!

  8. #8
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18
    Con ese script, me pasa que pincho una de las categorías (Tecnología, en ese caso) y me sale la información que está filtrada por esa categoría. Pero no así en las otras, siendo que sí hay información filtrada por otras categorías. Por más que he analizado el asunto, no hay caso, no he podido descubrir dónde está el problema. Claro, en otro foro me dijeron que el código estaba muy mal construido, pero como suele suceder, nadie aportó ni me dijeron dónde reside el problema y menos cómo mejorar el código.

    Espero que acá no suceda lo mismo! jajajaja

    Saludos

  9. #9
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    Creo que estamos mezclando los temas. Puesto que tu script funciona, deberías crear otro tema para analizar este nuevo script, así no confundiremos a nadie ¿te parece?

    Después actualizas el código a MySQLi (luego de que entiendas como funciona).

  10. #10
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18
    Cita Iniciado por skaparate Ver Mensaje
    Creo que estamos mezclando los temas. Puesto que tu script funciona, deberías crear otro tema para analizar este nuevo script, así no confundiremos a nadie ¿te parece?

    Después actualizas el código a MySQLi (luego de que entiendas como funciona).
    De acuerdo, voy a abrir otro post. El anterior creo que está resuelto, solo que no he encontrado un servidor donde subir el comprimido y creo que lo mejor es que quien se interese de verdad, me mande un mensaje y me diga a la casilla a la cual quiere que yo le envíe el script.

  11. #11
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,046
    Poder de Reputación
    27
    ¿Por qué no usas Dropbox? También podrías usar sourceforge :)

  12. #12
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    18
    Cita Iniciado por skaparate Ver Mensaje
    ¿Por qué no usas Dropbox? También podrías usar sourceforge :)
    Aquí está, en Dropbox :)

    https://dl.dropboxusercontent.com/u/...noticias19.rar

Temas Similares

  1. Respuestas: 1
    Último Mensaje: 19/08/2008, 20:46
  2. sistema de noticias
    Por AnGeL_NoCtUrNo en el foro Foro General
    Respuestas: 7
    Último Mensaje: 05/02/2008, 12:33
  3. Sistema de noticias
    Por aorkis en el foro Foro General
    Respuestas: 13
    Último Mensaje: 07/12/2006, 13:14

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •