Regresar a la página www.ComoCrearTuWeb.com
Página 1 de 3 123 ÚltimoÚltimo
Resultados 1 al 15 de 32

Tema: Sistema de Noticias php+mysqli

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

    Post Sistema de Noticias php+mysqli

    Similar al anterior script. Con categorías, solo que no funciona bien. El "Leer Más..." opera bien, sin problemas, pero cuando filtro por las categorías, curiosamente lee una de ellas y las otras no; de hecho, toma la última categoría que está en la tabla categorías de la base de datos.

    La tabla categorías de la base de datos :

    Código:
    -- phpMyAdmin SQL Dump
    -- version 3.4.5
    -- http://www.phpmyadmin.net
    --
    -- Servidor: localhost
    -- Tiempo de generación: 28-12-2014 a las 18:03:55
    -- Versión del servidor: 5.5.16
    -- Versión de PHP: 5.3.8
    
    
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    
    --
    -- Base de datos: `noticias18`
    --
    
    
    -- --------------------------------------------------------
    
    
    --
    -- Estructura de tabla para la tabla `categorias`
    --
    
    
    CREATE TABLE IF NOT EXISTS `categorias` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `categoria` varchar(190) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
    
    
    --
    -- Volcado de datos para la tabla `categorias`
    --
    
    
    INSERT INTO `categorias` (`id`, `categoria`) VALUES
    (1, 'Astronomia'),
    (2, 'Deportes'),
    (3, 'Politica'),
    (4, 'Arte'),
    (5, 'Tecnologia');
    
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    El documento de conexión:

    conectar.php

    Código:
    <?php
    
    error_reporting(0);
    $conexion = mysqli_connect("localhost","admin","password");
    mysqli_select_db($conexion, "noticias18");
    
    ?>
    Última edición por Dragon; 28/12/2014 a las 17:39

  2. #2
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    El index.php

    Código:
    <?php include ("includes/conectar.php");?>
    <!doctype html>
    <html>
    <head>
    <meta charset="iso-8859-2">
    <title>NOTICIAS :::.</title>
    <link href="css/estilo.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <div id="contenedor">
    <?php
    //include("conexion.php"); // Incluimos nuestro archivo de conexión con la base de datos
    $categorias = mysqli_query($conexion,"SELECT * FROM categorias"); // Ejecutamos la consulta
    echo '<a href="./">Inicio</a>';
    while($columna = mysqli_fetch_assoc($categorias)) // Realizamos un bucle que muestre todas las noticias, utilizando while. 
    	{ 
    echo '&nbsp;|&nbsp;<a href="?categoria='.$columna['categoria'].'"><strong>'.$columna['categoria'].'</a>';
    	} 
    
    
    ?>
    
    
    <?php
    //Obtenemos el grupo de noticias que están en una categoria, mediante el GET
    if(isset($_GET['categoria'])) 
    		{
    	$categoria = mysqli_real_escape_string($conexion,$_GET['categoria']);
    	$query = mysqli_query($conexion,"SELECT * FROM noticias WHERE categoria = '".$categoria."' "); // Ejecutamos la consulta
    	$row = mysqli_num_rows($query);
    		if ($row == 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 = $query->fetch_assoc()){ // Realizamos un bucle que muestre todas las noticias, utilizando while.
    echo '<div class="separador"></div>';		
    echo '<div id="contenedornoti">';
    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['contenido'], 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['imagen'].'" rel="lightbox" >';
    echo '<img src="thumb.php?src=uploads/'.$row['imagen'].'" 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 = mysqli_real_escape_string($conexion,$_GET['id']); 
    $query_noticias = mysqli_query($conexion, "SELECT * ,DATE_FORMAT(fecha,'%d-%m-%Y') AS fecha FROM noticias WHERE id = '".$id."'"); // Ejecutamos la consulta 
    if(mysqli_num_rows($query_noticias) > 0) // Si existe la noticia, la muestra 
            { 
      while($row = mysqli_fetch_assoc($query_noticias)) // Realizamos un bucle que muestre todas las noticias, utilizando while. 
                { 
    echo '<div id="contenedornoti">';
    echo '<h1>'.$row['titulo'].'</h1>';
    echo '<p>'.$row['fecha'].'&nbsp;/&nbsp;'.$row['categoria'].'</p><br>';
    echo '<img src="uploads/'.$row['imagen'].'" />';
    //echo nl2br("$row[contenido]");
    echo '<p>'.$row['contenido'].'</p>';
    echo '<a href="javascript:history.back();">Volver</a>';
    include("comentarios.php");
    echo '</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 = mysqli_query($conexion, "SELECT *,DATE_FORMAT(fecha,'%d-%m-%Y, %h:%i:%s') AS fecha FROM noticias ORDER BY fecha DESC"); // Ejecutamos la consulta
    $limite = 555; // Número de carácteres a mostrar antes de el "Leer más" nl2br
    	while($row = mysqli_fetch_assoc($query_noticias)) // Realizamos un bucle que muestre todas las noticias, utilizando while.
    	{
    echo '<div id="contenedornoti">';
    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['contenido'], 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['imagen'].'" rel="lightbox">';
    echo '<img src="thumb.php?src=uploads/'.$row['imagen'].'" class="foto" /></a></div>';
    //echo '<img src="uploads/'.$row['foto'].'" class="foto" /></a></div>';
    echo '</div>';
    		}
    	}
    }
    /* cerrar la conexión */
    mysqli_close($conexion )
    ?>
    
    
    </div>
    </body>
    </html>
    Última edición por Dragon; 28/12/2014 a las 20:06

  3. #3
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    Y el publicar.php

    Código:
    <?php
    include ("includes/conectar.php");
    ?>
    
    
    
    
    <!doctype html>
    <html>
    <head>
    <meta charset="iso-8859-2">
    <title>Publicar Noticia :::.</title>
    <link href="css/estilo.css" rel="stylesheet" type="text/css">
    
    
    </head>
    <body>
    <?php
    $query = 'SELECT * FROM categorias';
    $result = $conexion->query($query);
    ?>
    <?php
    
    
    if(isset($_POST['enviando'])){ // Si el boton de "anadir" fué presionado ejecuta el resto del código | $_POST['imagen']
        $titulo = $_POST['titulo']; // Recibimos el valor del <input name="titulo"... 
        $contenido = $_POST['contenido'];   // Recibimos el valor de la <textarea name="titulo"
        $fecha = $_POST['fecha'];
        $imagen = $ruta = $_FILES['imagen']['name'];
            echo $ruta;
       // if(!empty($titulo) && !empty($contenido) && !empty($imagen)  && !empty($fecha)){ // Comprobamos que los valores recibidos no son NULL 
        {
                if(is_uploaded_file($_FILES['imagen']['tmp_name'])) { // verifica haya sido cargado el archivo
    $ruta= "uploads/".$_FILES['imagen']['name']; // Se guardaría dentro de "fotos" con el nombre original
    // $ruta= "carpeta/nuevo_nombre.jpg"; si también se quiere renombrar
    move_uploaded_file($_FILES['imagen']['tmp_name'], $ruta);
         if(move_uploaded_file($_FILES['imagen']['tmp_name'], $_FILES['imagen']['name'])) { // se coloca en su lugar final
    echo "<b>Upload exitoso!. Datos:</b><br>";
    echo "Nombre: <i><a href=\"".$_FILES['imagen']['name']."\">".$_FILES['imagen']['name']."</a></i><br>";
    echo "Tipo MIME: <i>".$_FILES['imagen']['type']."</i><br>";
    echo "Peso: <i>".$_FILES['imagen']['size']." bytes</i><br>";
    echo '<br /><br /><a href="'.$_SERVER['PHP_SELF'].'">Refrescar p&aacute;gina</a><br /><br /></div>';
    echo "<br><hr><br>";
            }
    // }
            mysqli_query($conexion, "INSERT INTO noticias(id,titulo,contenido,categoria,imagen,fecha,ip)
            VALUES ('', '$_POST[titulo]', '$_POST[contenido]', '$_POST[categoria]', '$imagen', NOW(), '$_SERVER[REMOTE_ADDR]')");
            echo '<div align="center"<font color="green"><strong>Noticia generada con exito</strong></font></div><br>';
            echo '<a href="'.$_SERVER['PHP_SELF'].'">Refrescar p&aacute;gina</a>';
        
            }}}
    //echo "</font>";
    //    }
    
    
    ?>
    <div id="contenedor">
    <form action="" method="post" enctype="multipart/form-data" >
      Titulo:<br>
      <input name="titulo" size="100"><br><br>
    
    
      Contenido: <br> <textarea name="contenido" rows="15" cols="100"></textarea><br><br>
    
    
      Categoria: 
      <br>
    <select name="categoria" id="categoria">
    <?php echo '<option value="">Escoger de la Lista</option>';?>
    <?php while ( $row = $result->fetch_array() ) { ?>
    <option value=" <?php echo $row['categoria'] ?> " >
    <?php echo $row['categoria']; ?>
    </option>
    <?php } ?>        
    </select>
    <br>
    <br>
    <br><input name="imagen" type="file" required id="imagen" class="button" />
    <br>
    <br>
    <br>
    <input name="enviando" type="submit" value="Publicar noticia">
    <input type="reset" name="reset" id="reset" value="Restablecer">
    </form>
    </div>
    </body>
    </html>

  4. #4
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    El documento estilos.css

    Código:
    @charset "iso-8859-2";
    /* CSS Document */
    
    
    
    
    h1
    {
    	color: #000000;
    	text-align: left;
    	text-shadow: 1px 1px 2px #CCCCCC;
    	font: bold 36px Baskerville, "Palatino Linotype", Palatino, "Century Schoolbook L", "Times New Roman", serif;
    }
    h2
    {
    	color: #003366;
    	text-align: left;
    	text-shadow: 1px 1px 2px #CCCCCC;
    	font: bold 20px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", Verdana, sans-serif;
    }
    h3
    {
    	color: #003366;
    	font: bold 18px Arial;
    	text-align: left;
    	text-shadow: 1px 2px 4px #999999;
    }
    h4
    {
    	color: #003366;
    	font: bold normal 16px Arial;
    	text-align: left;
    	text-shadow: 1px 2px 4px #666666;
    }
    p
    {
    	color: #000000;
    	font-variant: normal;
    	font-size: 14px;
    	text-align: left;
    	text-shadow: -2px 2px 5px #333333;
    	text-indent: 18px;
    }
    /* Begin Additional CSS Styles */
    #paginacion
    {
    	margin: 40px auto 25px;
    	clear: both;
    	color: #000000;
    	padding-left: auto;
    	padding-right: auto;
    	text-shadow: 1px 1px 3px #CCCCCC;
    }
    .foto{
    	background: #ccc;
    	border: 5px solid white;
    	position: relative;
    	box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
    	-moz-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
    	-webkit-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
    	padding-bottom: 0px;
    	width: 140px;
    	height: 140px;
    	margin: 10px 5px 9px 0px;
    }
    .foto2{
    	background: #ccc;
    	border: 5px solid white;
    	position: relative;
    	box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
    	-moz-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
    	-webkit-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
    	width: auto;
    	height: auto;
    	margin: 5px auto 10px;
    	bottom: 10px;
    	top: 5px;
    }
    .recuadrofoto
    	{
    	border-collapse: separate;
    	border: 5px solid #FFFFFF;
    	background-color: #FFFFFF;
    	-webkit-box-shadow: 1px 1px 3px 4px #CCCCCC;
    	box-shadow: 1px 1px 3px 4px #CCCCCC;
    	margin-bottom: 50px;
    	border-radius: 5px;
    	margin-right: auto;
    	width: auto;
    	height: auto;
    	margin-left: auto;
    	clear: none;
    	float: none;
    	display: table;
    	}
    #contenedornoti{
    	width: 90%;
    	text-align: justify;
    	display: table;
    	margin: 15px auto;
    	height: auto;
    	float: none;
    	clear: both;
    	border-collapse: separate;
    	background-image: -webkit-gradient(linear, 50.00% 0.00%, 50.00% 100.00%, color-stop( 0% , rgba(233,235,255,1.00)),color-stop( 100% , rgba(255,255,255,1.00)));
    	background-image: -webkit-linear-gradient(270deg,rgba(233,235,255,1.00) 0%,rgba(255,255,255,1.00) 100%);
    	background-image: linear-gradient(180deg,rgba(233,235,255,1.00) 0%,rgba(255,255,255,1.00) 100%);
    	padding: 25px;
    	border: thin dotted #003366;
    	border-radius: 7px;
    }
    #contenedor{
    	width: 70%;
    	text-align: justify;
    	display: table;
    	margin: 15px auto;
    	height: auto;
    	float: none;
    	clear: both;
    	border-collapse: separate;
    	border: thin solid #003366;
    	border-radius: 9px;
    	background-color: #FFFFFF;
    	padding: 20px 30px 30px;
    }
    #contenedor3{
    	width: 95%;
    	text-align: justify;
    	display: table;
    	margin: 15px auto;
    	height: auto;
    	float: none;
    	clear: both;
    	border-collapse: separate;
    	border: thin solid #CCCCCC;
    	border-radius: 9px;
    	background-color: #FFFFFF;
    	padding: 20px 30px 30px;
    }
    
    
    .flotar-iz {
    	float: left;
    	margin: 15px 15px 20px auto;
    	padding-top: 35px;
    	padding-left: 40px;
    }
    .flotar-de {
    	float: right;
    	width: 74%;
    	margin-bottom: 15px;
    	margin-right: 15px;
    	margin-top: 40px;
    }
    .separador
    {
    	width: 100%;
    	height: 25px;
    	margin: 25px auto;
    }
    .franjacomentarios
    {
    	width: 90%;
    	height: auto;
    	background-color: #CCCCCC;
    	border-radius: 7px;
    	color: #000000;
    	font: bold 13px Arial;
    	text-align: left;
    	text-shadow: 1px 1px 2px #CCCCCC;
    	padding: 20px;
    }
    
    
    /*****************************************
    body
    {
    	background-image: -webkit-gradient(linear, 50.00% 0.00%, 50.00% 100.00%, color-stop( 0% , rgba(161,161,161,1.00)),color-stop( 100% , rgba(195,195,195,1.00)));
    	background-image: -webkit-linear-gradient(270deg,rgba(161,161,161,1.00) 0%,rgba(195,195,195,1.00) 100%);
    	background-image: linear-gradient(180deg,rgba(161,161,161,1.00) 0%,rgba(195,195,195,1.00) 100%);
    	background-repeat: repeat-y;
    	background-attachment: fixed;
    }
    /****************************************
    .registrarse{
    	width: 20%;
    	text-align: justify;
    	display: table;
    	float: none;
    	clear: both;
    	border-collapse: separate;
    	border: thin solid #003366;
    	border-radius: 9px;
    	background-color: #FFFFFF;
    	margin: 150px auto 15px;
    	padding: 40px;
    }
    }
    
    
    em {
        font-style:none;
        font-weight:bold;
    }
    
    
    a:link,a:visited,a:active {
        padding:5px;
        text-decoration:none;
        font-size:16px;
    }
    
    
    a:hover{
        color:white;
        background-color:#246DB5;
    }
    
    
    .content {
        text-align:left;
    }
    
    
    .content {
        background-color:white;
        width:400px;
        padding:20px;
        border:1px solid #CFCFCF;
        -moz-border-radius: 15px;
        -webkit-border-radius: 15px;
    }
    
    
    .messages {
        color:#246DB5;
    }
    ***********************************/
    .fecha
    {
    	color: #000000;
    	font-family: Arial;
    	font-weight: bold;
    	text-align: left;
    	text-indent: 15px;
    }
    .comentarios
    {
    	width: 70%;
    	height: auto;
    	margin-left: auto;
    	margin-right: auto;
    	padding: 35px;
    	color: #000000;
    	font: bold normal 13px Arial;
    	text-align: left;
    	text-shadow: 1px 2px 4px #666666;
    	border-collapse: separate;
    	border: thin dotted #CCCCCC;
    	border-radius: 9px;
    	background-color: #F4E39F;
    	margin-bottom: 25px;
    }
    .formucomentarios
    {
    	width: 70%;
    	height: auto;
    	margin-left: auto;
    	margin-right: auto;
    	padding: 35px;
    	color: #000000;
    	font: bold normal 13px Arial;
    	text-align: left;
    	text-shadow: 1px 2px 4px #666666;
    	border-collapse: separate;
    	border: thin dotted #CCCCCC;
    	border-radius: 9px;
    	margin-bottom: 25px;
    }
    .nombre
    {
    	color: #003366;
    	font: bold normal 16px Arial;
    	text-align: left;
    	text-shadow: 1px 2px 4px #666666;
    }body
    {
    	color: #000000;
    	font: normal 13px Arial;
    	text-align: left;
    	text-decoration: none;
    	text-shadow: -1px 2px 4px #666666;
    	background-image: -webkit-gradient(linear, 50.00% 0.00%, 50.00% 100.00%, color-stop( 21.76% , rgba(0,92,255,1.00)),color-stop( 100% , rgba(212,224,255,1.00)));
    	background-image: -webkit-linear-gradient(270deg,rgba(0,92,255,1.00) 21.76%,rgba(212,224,255,1.00) 100%);
    	background-image: linear-gradient(180deg,rgba(0,92,255,1.00) 21.76%,rgba(212,224,255,1.00) 100%);
    	background-repeat: repeat;
    	background-attachment: fixed;
    }

  5. #5
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    El script usa esta clase: thumbs.php ... Y tienen que crear un directorio que se llame cache para que opere el redimensionado de las fotos:

    Código:
    <?php
    
    
    /*
    Title:      Thumb.php
    URL:        http://github.com/jamiebicknell/Thumb
    Author:     Jamie Bicknell
    Twitter:    @jamiebicknell
    */
    
    
    define('THUMB_CACHE',           'cache/');    // Path to cache directory (must be writeable)
    define('THUMB_CACHE_AGE',       86400);         // Duration of cached files in seconds
    define('THUMB_BROWSER_CACHE',   true);          // Browser cache true or false
    define('SHARPEN_MIN',           12);            // Minimum sharpen value
    define('SHARPEN_MAX',           28);            // Maximum sharpen value
    define('ADJUST_ORIENTATION',    true);          // Auto adjust orientation for JPEG true or false
    
    
    $src = isset($_GET['src']) ? $_GET['src'] : false;
    $size = isset($_GET['size']) ? str_replace(array('<', 'x'), '', $_GET['size']) != '' ? $_GET['size'] : 140 : 140;
    $crop = isset($_GET['crop']) ? max(0, min(1, $_GET['crop'])) : 1;
    $trim = isset($_GET['trim']) ? max(0, min(1, $_GET['trim'])) : 0;
    $zoom = isset($_GET['zoom']) ? max(0, min(1, $_GET['zoom'])) : 0;
    $align = isset($_GET['align']) ? $_GET['align'] : false;
    $sharpen = isset($_GET['sharpen']) ? max(0, min(100, $_GET['sharpen'])) : 0;
    $gray = isset($_GET['gray']) ? max(0, min(1, $_GET['gray'])) : 0;
    $ignore = isset($_GET['ignore']) ? max(0, min(1, $_GET['ignore'])) : 0;
    $path = parse_url($src);
    
    
    if (isset($path['scheme'])) {
        $base = parse_url('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
        if (preg_replace('/^www\./i', '', $base['host']) == preg_replace('/^www\./i', '', $path['host'])) {
            $base = explode('/', preg_replace('/\/+/', '/', $base['path']));
            $path = explode('/', preg_replace('/\/+/', '/', $path['path']));
            $temp = $path;
            $part = count($base);
            foreach ($base as $k => $v) {
                if ($v == $path[$k]) {
                    array_shift($temp);
                } else {
                    if ($part - $k > 1) {
                        $temp = array_pad($temp, 0 - (count($temp) + ($part - $k) - 1), '..');
                        break;
                    } else {
                        $temp[0] = './' . $temp[0];
                    }
                }
            }
            $src = implode('/', $temp);
        }
    }
    
    
    if (!extension_loaded('gd')) {
        die('GD extension is not installed');
    }
    if (!is_writable(THUMB_CACHE)) {
        die('Cache not writable');
    }
    if (isset($path['scheme']) || !file_exists($src)) {
        die('File cannot be found');
    }
    if (!in_array(strtolower(substr(strrchr($src, '.'), 1)), array('gif', 'jpg', 'jpeg', 'png'))) {
        die('File is not an image');
    }
    
    
    $file_salt = 'v1.0.3';
    $file_size = filesize($src);
    $file_time = filemtime($src);
    $file_date = gmdate('D, d M Y H:i:s T', $file_time);
    $file_type = strtolower(substr(strrchr($src, '.'), 1));
    $file_hash = md5($file_salt . ($src.$size.$crop.$trim.$zoom.$align.$sharpen.$gray.$ignore) . $file_time);
    $file_temp = THUMB_CACHE . $file_hash . '.img.txt';
    $file_name = basename(substr($src, 0, strrpos($src, '.')) . strtolower(strrchr($src, '.')));
    
    
    if (!file_exists(THUMB_CACHE . 'index.html')) {
        touch(THUMB_CACHE . 'index.html');
    }
    if (($fp = fopen(THUMB_CACHE . 'index.html', 'r')) !== false) {
        if (flock($fp, LOCK_EX)) {
            if (time() - THUMB_CACHE_AGE > filemtime(THUMB_CACHE . 'index.html')) {
                $files = glob(THUMB_CACHE . '*.img.txt');
                if (is_array($files) && count($files) > 0) {
                    foreach ($files as $file) {
                        if (time() - THUMB_CACHE_AGE > filemtime($file)) {
                            unlink($file);
                        }
                    }
                }
                touch(THUMB_CACHE . 'index.html');
            }
            flock($fp, LOCK_UN);
        }
        fclose($fp);
    }
    
    
    if (THUMB_BROWSER_CACHE && (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH']))) {
        if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $file_date && $_SERVER['HTTP_IF_NONE_MATCH'] == $file_hash) {
            header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
            die();
        }
    }
    
    
    if (!file_exists($file_temp)) {
        list($w0, $h0, $type) = getimagesize($src);
        $data = file_get_contents($src);
        if ($ignore && $type == 1) {
            if (preg_match('/\x00\x21\xF9\x04.{4}\x00(\x2C|\x21)/s', $data)) {
                header('Content-Type: image/gif');
                header('Content-Length: ' . $file_size);
                header('Content-Disposition: inline; filename="' . $file_name . '"');
                header('Last-Modified: ' . $file_date);
                header('ETag: ' . $file_hash);
                header('Accept-Ranges: none');
                if (THUMB_BROWSER_CACHE) {
                    header('Cache-Control: max-age=604800, must-revalidate');
                    header('Expires: ' . gmdate('D, d M Y H:i:s T', strtotime('+7 days')));
                } else {
                    header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
                    header('Expires: ' . gmdate('D, d M Y H:i:s T'));
                    header('Pragma: no-cache');
                }
                die($data);
            }
        }
        $oi = imagecreatefromstring($data);
        if (ADJUST_ORIENTATION && $type == 2) {
            // I know supressing errors is bad, but calling exif_read_data on invalid
            // or corrupted data returns a fatal error and there's no way to validate
            // the EXIF data before calling the function.
            $exif = @exif_read_data($src, EXIF);
            if (isset($exif['Orientation'])) {
                $degree = 0;
                $mirror = false;
                switch ($exif['Orientation']) {
                    case 2:
                        $mirror = true;
                        break;
                    case 3:
                        $degree = 180;
                        break;
                    case 4:
                        $degree = 180;
                        $mirror = true;
                        break;
                    case 5:
                        $degree = 270;
                        $mirror = true;
                        $w0 ^= $h0 ^= $w0 ^= $h0;
                        break;
                    case 6:
                        $degree = 270;
                        $w0 ^= $h0 ^= $w0 ^= $h0;
                        break;
                    case 7:
                        $degree = 90;
                        $mirror = true;
                        $w0 ^= $h0 ^= $w0 ^= $h0;
                        break;
                    case 8:
                        $degree = 90;
                        $w0 ^= $h0 ^= $w0 ^= $h0;
                        break;
                }
                if ($degree > 0) {
                    $oi = imagerotate($oi, $degree, 0);
                }
                if ($mirror) {
                    $nm = $oi;
                    $oi = imagecreatetruecolor($w0, $h0);
                    imagecopyresampled($oi, $nm, 0, 0, $w0 - 1, 0, $w0, $h0, -$w0, $h0);
                    imagedestroy($nm);
                }
            }
        }
        list($w,$h) = explode('x', str_replace('<', '', $size));
        $w = ($w != '') ? floor(max(8, min(1500, $w))) : '';
        $h = ($h != '') ? floor(max(8, min(1500, $h))) : '';
        if (strstr($size, '<')) {
            $h = $w;
            $crop = 0;
            $trim = 1;
        } elseif (!strstr($size, 'x')) {
            $h = $w;
        } elseif ($w == '' || $h == '') {
            $crop = 0;
            $trim = 1;
        }
        $trim_w = ($trim) ? 1 : ($w == '') ? 1 : 0;
        $trim_h = ($trim) ? 1 : ($h == '') ? 1 : 0;
        if ($crop) {
            $w1 = (($w0 / $h0) > ($w / $h)) ? floor($w0 * $h / $h0) : $w;
            $h1 = (($w0 / $h0) < ($w / $h)) ? floor($h0 * $w / $w0) : $h;
            if (!$zoom) {
                if ($h0 < $h || $w0 < $w) {
                    $w1 = $w0;
                    $h1 = $h0;
                }
            }
        } else {
            $w = ($w == '') ? ($w0 * $h) / $h0 : $w;
            $h = ($h == '') ? ($h0 * $w) / $w0 : $h;
            $w1 = (($w0 / $h0) < ($w / $h)) ? floor($w0 * $h / $h0) : floor($w);
            $h1 = (($w0 / $h0) > ($w / $h)) ? floor($h0 * $w / $w0) : floor($h);
            $w = floor($w);
            $h = floor($h);
            if (!$zoom) {
                if ($h0 < $h && $w0 < $w) {
                    $w1 = $w0;
                    $h1 = $h0;
                }
            }
        }
        $w = ($trim_w) ? (($w0 / $h0) > ($w / $h)) ? min($w, $w1) : $w1 : $w;
        $h = ($trim_h) ? (($w0 / $h0) < ($w / $h)) ? min($h, $h1) : $h1 : $h;
        if ($sharpen) {
            $matrix = array (
                array(-1, -1, -1),
                array(-1, SHARPEN_MAX - ($sharpen * (SHARPEN_MAX - SHARPEN_MIN)) / 100, -1),
                array(-1, -1, -1));
            $divisor = array_sum(array_map('array_sum', $matrix));
        }
        $x = strpos($align, 'l') !== false ? 0 : (strpos($align, 'r') !== false ? $w - $w1 : ($w - $w1) / 2);
        $y = strpos($align, 't') !== false ? 0 : (strpos($align, 'b') !== false ? $h - $h1 : ($h - $h1) / 2);
        $im = imagecreatetruecolor($w, $h);
        $bg = imagecolorallocate($im, 255, 255, 255);
        imagefill($im, 0, 0, $bg);
        switch ($type) {
            case 1:
                imagecopyresampled($im, $oi, $x, $y, 0, 0, $w1, $h1, $w0, $h0);
                if ($sharpen && version_compare(PHP_VERSION, '5.1.0', '>=')) {
                    imageconvolution($im, $matrix, $divisor, 0);
                }
                if ($gray) {
                    imagefilter($im, IMG_FILTER_GRAYSCALE);
                }
                imagegif($im, $file_temp);
                break;
            case 2:
                imagecopyresampled($im, $oi, $x, $y, 0, 0, $w1, $h1, $w0, $h0);
                if ($sharpen && version_compare(PHP_VERSION, '5.1.0', '>=')) {
                    imageconvolution($im, $matrix, $divisor, 0);
                }
                if ($gray) {
                    imagefilter($im, IMG_FILTER_GRAYSCALE);
                }
                imagejpeg($im, $file_temp, 100);
                break;
            case 3:
                imagefill($im, 0, 0, imagecolorallocatealpha($im, 0, 0, 0, 127));
                imagesavealpha($im, true);
                imagealphablending($im, false);
                imagecopyresampled($im, $oi, $x, $y, 0, 0, $w1, $h1, $w0, $h0);
                if ($sharpen && version_compare(PHP_VERSION, '5.1.0', '>=')) {
                    $fix = imagecolorat($im, 0, 0);
                    imageconvolution($im, $matrix, $divisor, 0);
                    imagesetpixel($im, 0, 0, $fix);
                }
                if ($gray) {
                    imagefilter($im, IMG_FILTER_GRAYSCALE);
                }
                imagepng($im, $file_temp);
                break;
        }
        imagedestroy($im);
        imagedestroy($oi);
    }
    
    
    header('Content-Type: image/' . $file_type);
    header('Content-Length: ' . filesize($file_temp));
    header('Content-Disposition: inline; filename="' . $file_name . '"');
    header('Last-Modified: ' . $file_date);
    header('ETag: ' . $file_hash);
    header('Accept-Ranges: none');
    if (THUMB_BROWSER_CACHE) {
        header('Cache-Control: max-age=604800, must-revalidate');
        header('Expires: ' . gmdate('D, d M Y H:i:s T', strtotime('+7 days')));
    } else {
        header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
        header('Expires: ' . gmdate('D, d M Y H:i:s T'));
        header('Pragma: no-cache');
    }
    
    
    readfile($file_temp);

  6. #6
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    Y la base de datos noticias.sql

    Código:
    -- phpMyAdmin SQL Dump
    -- version 3.4.5
    -- http://www.phpmyadmin.net
    --
    -- Servidor: localhost
    -- Tiempo de generación: 28-12-2014 a las 18:34:37
    -- Versión del servidor: 5.5.16
    -- Versión de PHP: 5.3.8
    
    
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    
    --
    -- Base de datos: `noticias`
    --
    
    
    -- --------------------------------------------------------
    
    
    --
    -- Estructura de tabla para la tabla `noticias`
    --
    
    
    CREATE TABLE IF NOT EXISTS `noticias` (
      `id` mediumint(9) NOT NULL AUTO_INCREMENT,
      `titulo` text NOT NULL,
      `contenido` text NOT NULL,
      `categoria` varchar(40) NOT NULL,
      `imagen` varchar(200) NOT NULL,
      `fecha` datetime NOT NULL,
      `ip` varchar(40) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
    
    
    --
    -- Volcado de datos para la tabla `noticias`
    --
    
    
    INSERT INTO `noticias` (`id`, `titulo`, `contenido`, `categoria`, `imagen`, `fecha`, `ip`) VALUES
    (4, 'Las Computadoras de la nueva era: seran frías, pequeñas y de carbono', '<p>Ingenieros de la Universidad de Stanford han inaugurado una era de la electrónica alternativa, basada en nanotubos de carbono. Las nuevas computadoras serán más delgadas, más eficientes y no se calentarán.</p>\r\n<p>\r\nEl silicio es un elemento tan importante en la fabricación de los aparatos electrónicos actuales (ordenadores, teléfonos, robots y otras máquinas inteligentes) como lo es para los seres vivos el carbono, la base de las proteínas que nos componen.</p>\r\n<p>\r\nAhora el carbono tiene la oportunidad de sustituir al silicio en la electrónica. Hace ya 15 años que se habla de la posibilidad de que la nanotecnología de carbono permita crear ordenadores más potentes y con un menor consumo de energía. Finalmente un equipo de ingenieros pudo desarrollar en un laboratorio de la Universidad de Stanford un ordenador (todavía bastante primitivo) a partir de chips que funcionan con nanotubos de carbono. Los detalles del invento están recogidos en la revista ‘Nature’.</p>\r\n<p>\r\nLos investigadores han logrado progresos significativos desde que crearon transistores de nanotubos (moléculas con forma de cilindro) individuales de carbono. Posteriormente obtuvieron circuitos electrónicos conectando estos transistores entre sí, y finalmente construyeron un computador completo usando transistores de bajo consumo de energía. Aunque el rendimiento del prototipo todavía no se puede comprar al de las actuales computadoras de silicio, el ordenador puede realizar cualquier cálculo si tiene el tiempo suficiente.</p>\r\n<p>\r\nLa primera nanocomputadora desarrollada en Stanford se compone de solo 178 transistores. “Es, por supuesto, una cantidad muy pequeña”, dijo en una entrevista con el portal ruso Slon Max Shulaker, coautor del proyecto, que añadió: “Pero es lo máximo que podemos conseguir en un laboratorio universitario. Sin embargo, si la misma tecnología se aplica a escala industrial, se podrá lograr mucho más. Lo importante es que nuestro ordenador de un bit no difiere en nada de los modernos equipos de 64 bits; simplemente es mucho más pequeño”.\r\n</p>\r\n<h3>¿Por qué carbono?</h3>\r\n<p>\r\nEl principal inconveniente de los transistores actuales es que se calientan. Y, cuanto más potente es el equipo, más transistores integra, por lo que más se calienta la unidad de sistema. Esta desventaja, que ha sufrido cualquier usuario de un teléfono inteligente o de un ordenador portátil, supone un obstáculo importante para el desarrollo de la tecnología del silicio.</p>\r\n<p>\r\nLos nanotubos de carbono pueden iniciar una tendencia alternativa en la evolución digital gracias a una propiedad muy valiosa: no se calientan (o, en cualquier caso, se calientan mucho menos que el silicio).</p>\r\n<p>\r\nLos expertos de todo el mundo ya han afirmado en reiteradas ocasiones que vivimos en un momento crucial en lo referente a las tecnologías digitales a base de carbono, un elemento fundamental a la hora de desarrollar aparatos no solo más eficientes, sino también más ligeros, compactos, baratos y, lo más importante, que funcionarán sin calentarse y que, en consecuencia, no consumirán tanta energía.</p>\r\n<p>\r\nEn este momento, los líderes industriales son capaces de producir circuitos de silicio de 22 nanómetros, y se cree que en 2020 se habrá conseguido reducir su tamaño hasta 5 nanómetros.</p>', 'Tecnologia', 'computadoras-de-la-nueva-era.png', '2014-12-23 14:46:39', '127.0.0.1'),
    (5, 'MIRA lo que sucede dentro de tu cuerpo cuando consumes Coca Cola', 'La Coca Cola está llena de compuestos que son nocivos para nuestra salud, los cuales pueden derivar problemas a corto y largo plazo. Basta con saber que una sola lata o botella contiene 10 cucharadas de azúcar, además de otros químicos que afectan diferentes órganos importantes de nuestro cuerpo. \r\n\r\nLo que sucede cuando consumes Coca Cola A los 10 minutos: el recibir 10 cucharadas de azúcar de un solo golpe provoca un efecto devastador en nuestro organismo. La razón por la que no vomitamos se debe a la producción de ácido fosfórico que provee nuestro organismo. A los 20 minutos: la glucosa hace que los niveles de insulina aumenten haciendo que el hígado transforme toda la azúcar en grasa. Recordemos que una sola lata o botella contiene hasta 10 cucharadas de azúcar. A los 40 minutos: nuestro organismo habrá absorbido por lo completo la cafeína. En consecuencia, las pupilas se dilatan, se eleva la presión sanguínea y el hígado libera más azúcar en el torrente. Esto a su vez provoca que los receptores de adenosina (molécula predominante en el proceso del sue&#241;o) se bloqueen e impida que nos dé sue&#241;o. A los 45 minutos: nuestro cuerpo empieza a producir más dopamina, sustancia que estimula nuestros centros de placer cerebrales. Este tipo de efecto es comparado con el que produce la heroína.\r\n\r\nA los 60 minutos: . Lo que no sabemos es que al orinar estaremos evacuando el calcio, magnesio y zinc, que estaban dirigidos hacia los huesos, entre otras sustancias importantes que no pudieron ser absorbidas por nuestro cuerpo. A medida que pasa el tiempo se comienza a tener un bajón de azúcar y es probable que el consumidor esté lento con sus actividades y tenga pereza.', ' Deportes ', 'cuando-consumes-Coca-Cola.png', '2014-12-23 19:35:00', '127.0.0.1'),
    (13, 'El FBI hackeó y reveló las identidades de usuarios de la red anónima Tor', '<p>El FBI hackeó a los usuarios de la red anónima Tor, que oculta las direcciones IP de sus usuarios, para revelar su identidad, según la revista ‘Wired’. El FBI se apoderó de tres páginas web de pornografía infantil en la red oscura, y logró desсubrir al menos a 25 de sus visitantes, algunos de los cuales pudieron haber llegado a las páginas por error.</p>\r\n<p>\r\nNo es la primera vez que el FBI usa herramientas de piratería electrónica, pero sí es la primera ocasión que lleva a cabo un ‘hackeo’ masivo contra todos los visitantes de ciertas páginas web y no a ciertos usuarios en ataques individuales.</p>\r\n<p>\r\nEl FBI usó un código abierto de la herramienta Metasploit Decloaking Engine, un programa de seguridad informática que ‘ataca’ los sistemas, buscando en ellos vulnerabilidades y quebrando el anonimato. Por esa razón puede ser utilizado tanto por delincuentes que buscan ‘hackear’ sistemas, como por especialistas de seguridad que tengan por misión mejorarlas.</p>\r\n<p>\r\nEn 2006 los usuarios de la red anónima Tor supieron que, gracias al Decloaking Engine, fue desarrollado un código para el complemento (plug-in) de la aplicación Adobe Flash, que puede conectarse directamente a la Red, burlando la protección de Tor, y revelar las direcciones IP de sus usuarios. Los usuarios de Tor aprendieron a sortear esta aplicación a través de nuevas versiones de dicha red, o simplemente no instalándola. No obstante, en 2012 el FBI decidió usar el código para la aplicación Flash en su Operación Torpedo.</p>\r\n<p>\r\nEl FBI se apoderó de tres páginas de pornografía infantil en la red anónima, y ‘convenció’ a algunos de los visitantes para que instalaran la aplicación Flash, revelando de esta manera las identidades de 25 personas dentro de EE.UU. y un número desconocido de visitantes de fuera. El problema reside en el hecho de que a través de un mecanismo tan anticuado y conocido por los usuarios de Tor, el FBI logró identificar solo los usuarios con menos experiencia, y no a los delincuentes más veteranos, según ‘Wired’.</p>\r\n<p>\r\nLa herramienta que aplicó el FBI hace dos a&#241;os era muy poco sofisticada, pero desde entonces dicha agencia ha aprendido métodos mucho más desarrollados, según la revista. El a&#241;o pasado llevó a cabo un ataque muy similar, pero en aquella ocación utilizó las vulnerabilidades relativamente nuevas del browser Firefox, y logró recabar no solo las direcciones IP, sino también las direcciones MAC (las direcciones físicas) de las computadoras.</p>', ' Tecnologia ', 'El-FBI-Tor.png', '2014-12-23 21:30:28', '127.0.0.1'),
    (14, 'PROXIMAS DETENCIONES EN CURSO  ! INMINENTE &#161;', '<p>El reloj est&aacute; haciendo tictac Ahora!&nbsp;<br />\r\npor Tom Heneghan, Internacional de Inteligencia de Expertos</p>\r\n\r\n<p>Estados Unidos - ahora puede ser informado que el Departamento de la tesorer&iacute;a y un gran jurado militar operando en Charlotte, Carolina del norte pronto ordenar&aacute; la detenci&oacute;n de toda la familia del sindicato del crimen Bush-Clinton y la detenci&oacute;n forzada del mu&ntilde;eco t&iacute;tere activador de la familia Bush-Clinton, Banco t&iacute;tere Barack Hussein Obama-Soetoro.</p>\r\n\r\n<p>Inteligencia secreta y documentos previamente clasificados de manera ilegal por el Departamento de Justicia de Estados Unidos ya se han puesto a disposici&oacute;n del Departamento del Tesoro de Estados Unidos, los militares del Gran Jurado y el pueblo estadounidense.</p>\r\n\r\n<p>PS El contexto de la investigaci&oacute;n de la siguiente manera:</p>\r\n\r\n<p>CSIS, servicios de investigaci&oacute;n secreto canadiense en Ottawa, que ha estado en comunicaci&oacute;n directa con el Vicepresidente Albert Gore Jr. y ex asesor de casa blanca, ahora informante del FBI Director del FBI William Sessions, Vince Foster, trabajando en el tema siguiente.</p>\r\n\r\n<p>Criminal desv&iacute;o de impuestos de Canad&aacute; y Estados Unidos que involucra la cuenta AmeriTrust de Suiza, que previamente hab&iacute;a sido atado para el control administrativo del Embajador Leo Wanta, el presidente Ronald Wilson Reagan junto con el ex primer ministro israel&iacute; Yitzhak Rabin y ahora se hab&iacute;a convertido en un &uacute;nico beneficiario de no la administraci&oacute;n Clinton-Gore pero la Administraci&oacute;n NAZI Paperclip Bush-Clinton con la total complicidad del actual Administrador de la Oficina de Administraci&oacute;n y Presupuesto, Leon Panetta, Hillary Clinton Rodenhurst t&iacute;tere Laura D&#39;Andrea Tyson, la cuenta Maipollo propietaria de la CIA, la cual es el &uacute;nico beneficiario del secretario del Tesoro Lloyd Benson y el pap&aacute; Bush CIA administr&oacute; BWI Group y el Ministerio de Finanzas en Tokio, Jap&oacute;n (c&oacute;digo: Tosititlkaitcu yenes).</p>\r\n\r\n<p>Referencia: Paramount Pictures de Hollywood.<br />\r\nPPS As&iacute; que el robo de $ 70,000,000,000 del Tesoro de Estados Unidos se hizo para acomodar la transferencia de estos fondos a los terroristas financiero George Soros a trav&eacute;s de las cuentas bancarias de Bulgaria, junto con la naci&oacute;n de Ir&aacute;n, con el prop&oacute;sito de dar a Corea del Norte capacidad nuclear.</p>\r\n\r\n<p>Referencia: La cuenta AmeriTrust, que fue creado inicialmente por el presidente Ronald Wilson Reagan y el entonces Primer Ministro de Israel Yitzhak Rabin para la re-asentamiento palestino se convirti&oacute; en una alcanc&iacute;a para la familia del crimen de Bush-Clinton Syndicate y el lavado de dinero de la CIA &quot;El Fondo para la Defensa de los Ni&ntilde;os &quot;.</p>\r\n\r\n<p>Para terminar, esta evidencia se present&oacute; a ambos entonces Secretario del Departamento de Defensa Les Aspin, representante de los EEUU Dick Armey, el senador John McCain, y el senador estadounidense Sam Nunn, dem&oacute;crata de Georgia.</p>\r\n\r\n<p>Lo que dio como resultado, la gente, fue el asesinato del abogado de la Casa Blanca y actual informante del FBI Vince Foster, el despido del entonces director del FBI William Sessions, y una amenaza directa de Bush Delito Familia Stooges Bill y Hillary Clinton que tendr&iacute;an entonces vicepresidente Albert Gore Jr. (quien eligi&oacute; a estos pedazos de mierda para empezar) tratado si no dejaba de perseguir la verdad.</p>\r\n\r\n<p>Entonces vicepresidente Albert Gore Jr. respondi&oacute; a Clinton le dijo directamente que iba a patear la mierda viva fuera de &eacute;l en el estacionamiento de la Casa Blanca y que &eacute;l y su esposa son nada m&aacute;s los t&iacute;teres de la CIA de Bush.<br />\r\nUna semana m&aacute;s tarde el vicepresidente Albert Gore Jr., ahora claramente a&ntilde;o 2000 nato, debidamente elegido Presidente Albert Gore Jr., trat&oacute; de que Marc Rich (Bush-Clinton banquero t&iacute;tere) arrestado.<br />\r\nFue asistido por un abogado de la Casa Blanca Vince Foster. Ahora sabemos por qu&eacute; Vince Foster fue asesinado y la presidencia de Albert Gore Jr. fue robado en el a&ntilde;o 2000.</p>\r\n\r\n<p>Por &uacute;ltimo, el pueblo estadounidense no han olvidado y estamos dispuestos a declarar un libelo de sangre Robespierre contra la l&iacute;nea de sangre NAZI Paperclip Bush-Clinton Delito Familia.</p>\r\n', ' Politica ', '1452563_749652201778950_142026513657682533_n.jpg', '2014-12-23 21:58:42', '127.0.0.1');
    
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

  7. #7
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    Por si a alguien no le quedó claro, la base de datos noticias.sql tiene esta estructura:

    Código:
    --
    -- Estructura de tabla para la tabla `categorias`
    --
    
    
    
    
    CREATE TABLE IF NOT EXISTS `categorias` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `categoria` varchar(190) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
    
    
    
    
    --
    -- Estructura de tabla para la tabla `noticias`
    --
    
    
    
    
    CREATE TABLE IF NOT EXISTS `noticias` (
      `id` mediumint(9) NOT NULL AUTO_INCREMENT,
      `titulo` text NOT NULL,
      `contenido` text NOT NULL,
      `categoria` varchar(40) NOT NULL,
      `imagen` varchar(200) NOT NULL,
      `fecha` datetime NOT NULL,
      `ip` varchar(40) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

  8. #8
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,044
    Poder de Reputación
    21
    Ahora sí :).

    Revisé todo y está funcionando bien :P. Modifica, en el archivo conectar.php, la línea

    Código PHP:
    error_reporting); 
    por

    Código PHP:
    error_reportingE_ALL ); 
    Esto es para mostrar los errores que existen. Además debes prevenir la inyección SQL utilizando mysqli_real_escape u otras formas.

  9. #9
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    Cita Iniciado por skaparate Ver Mensaje
    Ahora sí :).

    Revisé todo y está funcionando bien :P. Modifica, en el archivo conectar.php, la línea

    Código PHP:
    error_reporting); 
    por

    Código PHP:
    error_reportingE_ALL ); 
    Esto es para mostrar los errores que existen. Además debes prevenir la inyección SQL utilizando mysqli_real_escape u otras formas.

    OK, revisa, he corregido y modifiqué mi post de más arriba, sobre el index.php

    Lo curioso es que me sigue dando problemas cuando clico las categorías, en el sentido que me sale la información publicada bajo una de ellas, pero no pasa nada con las otras. De veras no entiendo nada

  10. #10
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,044
    Poder de Reputación
    21
    Encontré tu problema: tu script es demasiado específico.

    Cuando uno hace clic sobre "Deportes", se ejecuta esta consulta:

    Código:
    SELECT * FROM noticias WHERE categoria = 'Deportes'
    Lo cual está bien. El problema es que en la base de datos, la categoría se llama _Deportes_, donde cada _ es un espacio, entonces MySQL está comparando una categoría llamada Deportes sin espacios, con una llamada _Deportes_ (nuevamente, reemplazando los _ por un espacio), por lo que no hay coincidencias. La solución es eliminar los espacios innecesarios al momento de crear una categoría y/o noticia (y también eliminar los espacios de los registros actuales).

    Otra cosa que debes mejorar es la relación entre las tablas. La forma correcta debería ser así:

    Código:
    CREATE TABLE noticia (
      id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
      /* otros datos */
    );
    
    CREATE TABLE categoria (
      id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
      nombre ...
    );
    
    CREATE TABLE categoria_noticia (
      noticia_id INTEGER NOT NULL,
      categoria_id INTEGER NOT NULL
      PRIMARY KEY (noticia_id, categoria_id),
      FOREIGN KEY (noticia_id) REFERENCES noticia (id),
      FOREGIN KEY (categoria_id) REFERENCES categoria (id)
    );
    
    /* Este modelo sólo es válido si se piensa que una noticia puede tener más de una categoría y una categoría puede estar presente en más de una noticia. */
    Esta forma es más compleja, pero es la forma correcta de hacerlo (no permite duplicados y permite la ampliación del sistema en el futuro). Aprende sobre el modelo de datos relacional para que entiendas lo que digo :).

  11. #11
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    Hola, amigo, Skaparate

    Vale, he aplicado los cambios. Eso de los espacios, claro, increíble cómo un detalle como ése genea todo un problema. Los espacios están creo en el formulario. Algo a revisar.

    Y lo de las bases de datos, sí, todavía estoy en pañales en mis conocimientos. Solo que no se cuál sería el uso de esa tabla categoría_noticia. Sorry por mi ignorancia, tengo mucho que aprender, todavía!

  12. #12
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,044
    Poder de Reputación
    21
    Yo sé que parece inútil, pero la verdad es que disminuye mucho la cantidad de datos guardados y por ende el tamaño de la base de datos.

    El tener una tercera tabla para enlazar otras tablas se utiliza para impedir que se dupliquen los datos. Todo tiene sentido cuando se aprende a normalizar una base de datos.

    El ejemplo más común es el de un usuario y su información de contacto. Hay dos formas de hacerlo:

    Una tabla para todo

    Código:
    CREATE TABLE usuario (
      id PRIMARY KEY,
      nombre,
      apellido_paterno,
      apellido_materno,
      id_tributario,
      email,
      telefono,
      /* otros campos */
    );
    Lo anterior funciona sin problemas. Pero, ¿qué pasa cuando un usuario posee más de un email y/o teléfono? Tendría que duplicar la información del usuario tantas veces como emails y/o teléfonos tenga! Suponiendo que el usuario tuviera los emails pedro@gmail.com y pedro_aguirre@gmail.com, y los teléfonos 1234567 (teléfono fijo) y 12345678 (móvil), entonces tendría algo así:

    id nombre apellido_paterno apellido_materno id_tributario email telefono
    1 Pedro Aguirre Cerda 1-9 pedro@gmail.com 1234567
    2 Pedro Aguirre Cerda 1-9 pedro_aguirre@gmail.com 12345678

    Esto no parece mal al comienzo, pero a medida de que tu base de datos crece, tener muchos registros repetidos será un problema.

    Una mejor forma de hacerlo es esta:

    Código:
    CREATE TABLE usuario (
      id PRIMARY KEY,
      nombre,
      apellido_paterno,
      apellido_materno,
      id_tributario,
      /* otros campos */
    );
    
    CREATE TABLE info_contacto_usuario (
      id PRIMARY KEY,
      tipo,
      valor,
      usuario_id FOREIGN KEY REFERENCES usuario (id)
    );
    De esta forma podríamos tener algo así:

    usuario
    id nombre apellido_paterno apellido_materno id_tributario
    1 Pedro Aguirre Cerda 1-9

    info_contacto_usuario
    id tipo valor usuario_id
    1 Teléfono Móvil 12345678 1
    2 Teléfono Fijo 1234567 1
    1 Email pedro@gmail.com 1
    1 Email pedro_aguirre@gmail.com 1

    De esta forma se disminuyen los duplicados y la información es más precisa.

  13. #13
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    Comprendo, estimado Skaparate. Bueno, lo ya dicho, tengo mucho que seguir aprendiendo.

    A todo esto, quiero pedirte ayuda con este formulario, mediante el cual estoy tratando de actualizar el registro, o sea, una noticia, por ejemplo, con un título inadecuado y una foto que no era la apropiada, cosas así. Pero a cada rato me arroja problemas y llevo horas haciendo cambios y buscando soluciones y nada, siempre me sale el mensaje:

    Notice: indefined index:foto ..... etc y me indica la línea 21 que es ésta:

    $foto = mysqli_real_escape_string($conexion,$_POST['foto']);

    De veras el asunto me tiene bien mosqueado, algo debo estar haciendo muy mal para que me joda tanto ...

    Este es mi formulario:

    Código:
    <?php
    $query = 'SELECT * FROM categorias';
    $result = $conexion->query($query);
    ?>
    <?php
    
    if(isset($_POST['modificar'])){ // Si el boton de "anadir" fué presionado ejecuta el resto del código | $_POST['imagen']
    
    //chequeo que lleguen todas los datos
    if (!empty ($_POST['modificar'])){
         //creo las variables
        $id = mysqli_real_escape_string($conexion,$_POST['id']);
        $titulo = mysqli_real_escape_string($conexion,$_POST['titulo']); // Recibimos el valor del <input name="titulo"... 
        $texto = mysqli_real_escape_string($conexion,$_POST['texto']);   // Recibimos el valor de la <textarea name="titulo"
        $categoria = mysqli_real_escape_string($conexion,$_POST['categoria']);
        $fecha = mysqli_real_escape_string($conexion,$_POST['fecha']);}
        $foto =  mysqli_real_escape_string($conexion,$_POST['foto']);
        $foto = $ruta = $_FILES['foto']['name'];
        echo $ruta; 
        {
        if(is_uploaded_file($_FILES['foto']['tmp_name'])) { // verifica haya sido cargado el archivo
        $ruta= "../uploads/".$_FILES['foto']['name']; // Se guardaría dentro de "fotos" con el nombre original
        move_uploaded_file($_FILES['foto']['tmp_name'], $ruta);
        if(move_uploaded_file($_FILES['foto']['tmp_name'], $_FILES['foto']['name'])) { // se coloca en su lugar final
        echo "<b>Upload exitoso!. Datos:</b><br>";
        echo "Nombre: <i><a href=\"".$_FILES['foto']['name']."\">".$_FILES['foto']['name']."</a></i><br>";
        echo "Tipo MIME: <i>".$_FILES['foto']['type']."</i><br>";
        echo "Peso: <i>".$_FILES['foto']['size']." bytes</i><br>";
        echo '<br /><br /><a href="'.$_SERVER['PHP_SELF'].'">Refrescar p&aacute;gina</a><br /><br /></div>';
        echo "<br><hr><br>";
        }
    
    //modifico los datos  
       $sql= mysqli_query ($conexion,"UPDATE noticias SET id='$id',titulo='$titulo',texto='$texto',categoria='$categoria',foto='$foto',fecha='$fecha' WHERE id='$id'") ;
        
      //si esta todo OK muestro el mensaje
      
      echo "<script>";
      echo "alert ('los datos fueron modificados');";
      echo "window.location.replace('index.php');";
      echo "</script>";
                    }
                }
            }
    
    if(isset($_GET['id'])) 
    { 
        $id =  mysqli_real_escape_string($conexion,$_GET['id']); // Recibimos el id de la noticia por medio de GET 
        $query_NoticiaCompleta = mysqli_query($conexion,"SELECT * FROM noticias WHERE id = '".$id."' "); // Ejecutamos la consulta
        $row = mysqli_fetch_assoc($query_NoticiaCompleta);
    }
    ?>
    
    <!doctype html>
    <html>
    <head>
    <meta charset="iso-8859-2">
    <title>Publicar Noticia :::.</title>
    <link href="css/estilo.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="plugins/ckeditor/ckeditor.js"></script>
    <script type="text/javascript" src="kcfinder/ckfinder.js"></script>
    <script type="text/javascript">
    window.onload = function()
    {
     editor = CKEDITOR.replace('texto');
     CKFinder.SetupCKEditor( editor, 'kcfinder' );
    }
    </script>
    </head>
    <body>
    
    <div id="contenidos">
    <form action="" method="post" enctype="multipart/form-data" >
      Titulo:<br>
      <input name="titulo" value="<?php echo ''.$row['titulo'].'';?>" size="100"><br><br>
    
    
      Contenido: <br> <textarea name="texto" rows="15" cols="100" id="texto"><?php echo ''.$row['texto'].'';?></textarea><br><br>
    
    
      Categoria: 
      <br>
    <select name="categoria" id="categoria">
    <?php echo '<option value="">Escoger de la Lista</option>';?>
    <?php while ($row=$result->fetch_array()) { ?>
    <option value="<?php echo $row['categoria'] ?>" >
    <?php echo $row['categoria']; ?>
    </option>
    <?php } ?>        
    </select>
    <br>
    <br>
    <br><input name="foto" type="file" id="foto" class="button" />
    <br>
    <br>
    <br>
    <input type="hidden" name="id" value="<?php echo ''.$_POST['id'].'';?>" />
    <input name="fecha" type="hidden" value="<?=date("Y-m-d"); ?> <?=date("h:i:s");?>" />
    <input type="submit" name="modificar" value="Modificar noticia" />
    <input type="reset" name="reset" id="reset" value="Restablecer">
    </form>
    </div>

  14. #14
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,044
    Poder de Reputación
    21
    Ah! Lo que ocurre es que la subida de archivos no funciona igual que con el texto.

    Lee el manual de PHP para que entiendas cómo se hace: http://php.net/manual/es/features.fi...ost-method.php

  15. #15
    Me va gustando esto... Habitante
    Fecha de Ingreso
    16 oct, 09
    Mensajes
    56
    Poder de Reputación
    12
    Lo que hice fue sacar todo lo relativo a subir fotos, todo, entero y así y todo el formulario no me actualiza la base de datos

    Estoy a punto de tirar la toalla!
    Última edición por Dragon; 29/12/2014 a las 14:47

Temas Similares

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

Permisos de Publicación

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