Foros del Web » Programando para Internet » PHP »

APORTE: sistama de noticias con imagen redimensionada por codigo

Estas en el tema de APORTE: sistama de noticias con imagen redimensionada por codigo en el foro de PHP en Foros del Web. PREGUNTA: como puedo cargar una noticia con imagen n(almacenada en el server y su ruta en una BD), y no preocuparme por las dimensiones de ...
  #1 (permalink)  
Antiguo 30/05/2008, 15:48
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
APORTE: sistama de noticias con imagen redimensionada por codigo

PREGUNTA: como puedo cargar una noticia con imagen n(almacenada en el server y su ruta en una BD), y no preocuparme por las dimensiones de la imagen, pues la redimensiono, para no perder la estructura de mi html, y luego muestro la imagen mas el titular, el resumen y la noticia extendida.
RESPUESTA: con este sencillo tuturial



1º tener una tabla en la BD de MySQL con estos campos

Estructura de tabla para la tabla `noticias`
--

CREATE TABLE `noticias` (
`id_not` int(11) NOT NULL auto_increment,
`titular` varchar(150) NULL,
`resumen` varchar(150) NULL,
`noticia` text NULL,
`imagen` varchar(100) NULL,
`fecha` date(15) NULL,
PRIMARY KEY (`id_not`),


ARCHIVO add_noticia.php

Código PHP:


?php 
function mysql_escape($cadena) {  //funcion para limpiar campos del form de codigo malicioso
    
if(get_magic_quotes_gpc() != 0) {
        
$cadena stripslashes($cadena);
    }
    return 
mysql_real_escape_string($cadena);
}  


//nos conectamos a la base de datos
mysql_connect('localhost','xxxx','xxxx')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('xxxxx')or die ('Error al seleccionar la Base de Datos: '.mysql_error());

if(isset(
$_FILES['fichero']['name'])) {  //comprovamos que se haya cargado el archivo

   
if(is_uploaded_file($_FILES['fichero']['tmp_name'])) {
   
   
   
//empieza la redimension, tomamos la imagen temporal subida que puede ser jpg, png o gif
   
$info getimagesize($_FILES['fichero']['tmp_name']); 
   
//segun el caso sera jpg, gif, png
   
switch ($info[2]) {
  case 
1:
    
$imagen imagecreatefromgif($_FILES['fichero'] ['tmp_name']); break;
  case 
2:
    
$imagen imagecreatefromjpeg($_FILES['fichero'] ['tmp_name']); break;
  case 
3:
    
$imagen imagecreatefrompng($_FILES['fichero'] ['tmp_name']); break;
  
// etcétera // 
  
}

$original $imagen;
$original_w imagesx($original);
$original_h imagesy($original);

$max 175;  //AQUI PONES EL TAMAÑO DE LA IMAGEN A LO QUE QUIERAS segun la tabla donde la muestres

if($original_w>$original_h) {
    
$muestra_w $max;
    
$muestra_h intval(($original_h/$original_w)*$max);
    } else {
    
$muestra_w intval(($original_w/$original_h)*$max);
    
$muestra_h $max;
    }

$muestra imagecreatetruecolor($muestra_w,$muestra_h); 
imagecopyresampled($muestra,$original,0,0,0,0$muestra_w,$muestra_h,$original_w,$original_h);//aqui se crea la imagen en la variable $muestra

imagedestroy($original); // aqui destruyo el original, pues no hace falta ya


// comenzamos a guardar el archivo
        
$ruta_destino "../carpeta/archivos/"//ponemos la ruta donde queremos almacenar los archivos en el server
        
$namefinaltrim ($_FILES['fichero']['name']); //quito espacios iniciales y finales del nombre del archivo
        
$namefinalereg_replace (" """$namefinal); //quito los espacios entre el nombre para no tener despues problemas de codigo
        
$uploadfile$ruta_destino $namefinal//monto la ruta seguida del nombre del archivo en $uploadfile
        
if(imagejpeg($muestra,$uploadfile,'100')) { // se coloca en su lugar final,  el 100 el la calidad del jpg
                    
echo "<b>Upload exitoso!. Datos:</b><br>"
            echo 
"Nombre: <i><a href=\"".$uploadfile."\">".$_FILES['fichero']['name']."</a></i><br>"
            echo 
"Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>"
                    echo 
"Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>"
                        echo 
"<br><hr><br>"
                      


                        
// Aqui es donde tendre que insertar en la BD la variable $namefinal que con tiene el nombre del archivo sin espacios
//recojo las variables del form mediante POST
$titular  mysql_escape($_POST["titular"]);
$resumen  mysql_escape($_POST["resumen"]);
$noticia  mysql_escape($_POST["noticia"]);//cambiar el nl2br a la salida del texto mejor, y no a la entrada para inform. excell
$fecha  $_POST["fecha"];

 
//insertamos en la BD los campos del form

$query "INSERT INTO noticias (titular, resumen, noticia, imagen, fecha)
    VALUES ('$titular', '$resumen' , '$noticia', '$namefinal','$fecha')"
;
                
mysql_query($query) or die(mysql_error());
                

                echo 
"La noticia <b>'".$titular."'</b>  ha sid registrados de manera satisfactoria.<br />";
                  echo 
"<br><hr><br>";
            
                
                

        
        
                

                                      }else{echo 
"no se guardo la foto, ni se inserto el articulo en la Base de Datos";}
                     }else{echo 
"no se subio foto";}
           }else{echo 
"no se selecciono la foto";}


 
//ahora el formulario

?> 
Código PHP:
<body>
<form action="<?php echo $_SERVER['PHP_SELF'?>" method="post" enctype="multipart/form-data"> 
    <p>Imagen noticia 1: 
      <input name="fichero" type="file" size="150" maxlength="150"> 
      <br> 
      Titular: 
      <input name="titular" type="text" size="46" maxlength="45" id="titular" >
  </p>
    <p>Resumen 
      <label>
      <input name="resumen" type="text" id="resumen" size="150" maxlength="300">
      </label>
  </p>
    <p><br> 
      Noticia:
      <label>
      <textarea name="noticia" id="noticia" cols="100" rows="20"></textarea>
          </label>
    </p>
    <p>
      <input type="hidden" name="fecha" id="fecha" value="<?php echo date("d-m-Y"); //aqui le pongo la fecha para mas info ?>">
      <label></label>
      <br>
      </p>
    <p><br>
      <input name="submit" type="submit" value="Upload!">  
  </p>
</form> </body>


Archivo noticias.php donde se mostraran las noticias con foto subidas y redimensionadas, para no preocuparnos de las dimensiones de la imagen, la redimensionamos mediante codigo.



Código PHP:
<?php 
          

          
    

        $conexion 
mysql_connect('localhost','xxxxx','xxxxx')or die ('Ha fallado la conexión: '.mysql_error());
            
mysql_select_db('xxxxxxx')or die ('Error al seleccionar la Base de Datos: '.mysql_error());

    
$result_1"SELECT * FROM noticias ";  
    
$result mysql_query($result_1 $conexion) or die ( mysql_error() );  


while (
$row mysql_fetch_array($result)){

echo 
"<table width=\"450\" cellspacing=\"4\" cellpadding=\"4\">";
        echo 
"<tr>";
            echo 
"<td rowspan=\"2\" width=\"200\"  ><b>";
            echo 
"<img src=\"archivos/$row[imagen]\" >";
            echo 
"</td>";
            echo 
"<td  width=\"200\" height=\"75\"bgcolor= #E9E9E9  style='border:1px solid #000000'><b>";
            echo 
$row['titular'];
            echo 
"</b></td>";
            echo 
"</tr>";
            echo 
"<tr>";
            echo 
"<td  height=\"20\"  style='border:1px solid #000000'>";
            echo 
"<div aling=\"right\">";        
            
            echo  
"Por mi";
            echo 
" &nbsp;&nbsp;&nbsp;&nbsp;".$row ['fecha'];    
            echo 
"</div></td>";    

        echo 
"</tr>";
echo 
"</table >";
echo
"<br>";




echo 
"<table  width=90%  style='border:1px solid #000000' cellspacing=\"4\" cellpadding=\"4\">";
        echo 
"<tr><td >";
                echo 
nl2br($row ['noticia']);
                         
        echo 
"</td></tr>";    
            
        echo 
"<tr><td>";
                        
        echo 
"</td></tr>";    
        
echo 
"</table>";

echo 
"<br>";    
echo 
"<br>";    
        
}        
?>
DEspues de estos ecripts, les podeis incluir un sistema de paginacion, como el PAGINATOR de jpinedo, que va de maravilla.

Un saludo a todos y espero que a alguien le sirva.

Última edición por jaronu; 30/05/2008 a las 19:59
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:04.