Inicio de sesión

RSS

Distribuir contenido

En línea

En este momento hay 0 usuarios y 0 invitados en línea.

Galería de Fotos

Pequeño proyecto para la inserción de fotos y thumbnails en una base de datos, y la creación de un album con esas fotos y enlace a su vista ampliada.

Base de Datos

Debemos comenzar creando la base de datos y la tabla que almacenará el código de la foto, el thumbnail y la foto en sí.

CREATE DATABASE fotos;
CREATE TABLE fotos.foto_foto(
  idfoto int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  foto_grande   mediumblob,
  foto_pequena  mediumblob,
);

datos.php (página de configuracion)

<?php
$servidor="";
$nombre="";
$clave="";
?>

Scripts

form.php

Ahora creamos un simple formulario que coja de nuestro ordenador el thumbnail y la foto (deben estar previamente guardadas con el tamaño adecuado) observar el Type del formulario, esto nos permite enviar tanto texto como ficheros.

<?php
echo '<font size=1>';
echo '<center>';
echo'<form enctype="multipart/form-data" action="guardararchivo.php" method="post">';
echo 'Foto<br><input type="file" name="foto">';
echo '<br><br>';
echo 'Thum.<br><input type="file" name="thumbail"><br><br>';
echo '<input type=hidden name=max_file_size value=1000000>';
echo '<input type="submit" value="Enviar archivo">';
echo '</form>';
echo '<br><br><a href="descargar_archivo2.php">Ver album</a>';
?>

guardadararchivo.php

Esta es la página que guarda las fotos en la base de datos, da un mensaje de
error o de éxito y nos devuelve al formulario, es muy sencilla.

<?php
require "datos.php";
echo '<center><font size=1>';
$conexion=@mysql_connect($servidor,$nombre,$clave);
$res=mysql_select_db("fotos",$conexion);
if ( $conexion > 0 )
{      
        $archivo = $_FILES["foto"]["tmp_name"];
        $tamanio = $_FILES["foto"]["size"];
        $tipo    = $_FILES["foto"]["type"];
        $nombre  = $_FILES["foto"]["name"];    
        $archivo_thumb = $_FILES["thumbail"]["tmp_name"];
        $tamanio_thumb = $_FILES["thumbail"]["size"];
        $tipo_thumb    = $_FILES["thumbail"]["type"];
        $nombre_thumb  = $_FILES["thumbail"]["name"];
        if ( $archivo != "none" && $archivo_thumb!="none")
        {
                $fp = fopen($archivo, "rb");
                $contenido = fread($fp,$tamanio);
                $contenido = addslashes($contenido);
                fclose($fp);
                $fp_thumb = fopen($archivo_thumb, "rb");
                $contenido_thumb = fread($fp_thumb,$tamanio_thumb);
                $contenido_thumb = addslashes($contenido_thumb);
                fclose($fp_thumb);  
                $query = "INSERT INTO fotos.foto_foto VALUES(null,'".$contenido."','".$contenido_thumb."')";
                mysql_query($query);
                if(mysql_affected_rows($conexion) > 0) print "Se ha guardado el archivo en la base de datos.";
                        else print "NO se ha podido guardar el archivo en la base de datos.";
                }
                else print "No se ha podido subir el archivo al servidor";
}else{
        echo 'No conectado';
}
echo "<HTML><SCRIPT>document.location='form.php';</SCRIPT></HTML>";
?>

descargar_archivo2.php

A continuación muestro como se puede crear un album de fotos con enlace a esa misma foto más grande, la pequeña es el thumbnail que hemos guardado con tamaño más pequeño y la grande también la tenemos en la base de datos (recomiendo comprimir mediante cádigo con gzip) aquí no las comprimo porque se complica un poco el script.

       
<?php
require "datos.php";
$conexion=@mysql_connect($servidor,$nombre,$clave);
$res=mysql_select_db("fotos",$conexion);
               
$qry = "SELECT idfoto,foto_pequena FROM fotos.foto_foto";
$res2 = mysql_query($qry);
for ($j=0;$j < mysql_num_rows($res2);$j++)
  for ($i=0;$i < mysql_num_fields($res2);$i++)
  {
        $foto=basename(tempnam(getcwd(),'tmp'));
        $foto.=".jpg";
        if ($i==1)
        {
                $contenido2=mysql_result($res2,$j,$i)
                $ft=fopen($foto,"w");
                fwrite($ft,$contenido2);
                fclose($ft);
                echo '<a href=fotogrande.php?idfoto='.mysql_result($res2,$j,0).'><img src=\'.$foto.\'>   ';
                echo '';       
        }
}
echo '<br><br><font size=1><center><a href=form.php>Insertar nuevas fotos</a>';
?>

fotogrande.php

y finalmente creamos la página donde visualizamos las fotos en grande
sencillo, no?

<?php
require "datos.php";
$conexion=@mysql_connect($servidor,$nombre,$clave);
$res=mysql_select_db("fotos",$conexion);       
$qry = "SELECT foto_grande FROM fotos.foto_foto where idfoto='".$_GET["idfoto"]."'";
$res2 = mysql_query($qry);
$foto=basename(tempnam(getcwd(),'tmp'));
$foto.=".jpg";
$contenido2=mysql_result($res2,0,0);   
$ft=fopen($foto,"w");
fwrite($ft,$contenido2);
fclose($ft);
echo '<center><img src='.$foto.'>   <br><br>';
echo '<font size=1><a href=descargar_archivo2.php>Volver al album</a>';
?>
Autor

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <i> <b> <h2> <h3> <tt> <blockcode>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Saltos automáticos de líneas y de párrafos.
  • Every instance heading tags will be modified to include an id attribute for anchor linking.
  • Se pueden agregar imágenes a este envío.
  • Every instance of "<!--tableofcontents-->" in the input text will be replaced with a collapsible mediawiki-style table of contents. Accepts options for title, list style, minimum heading level, and maximum heading level as follows: <!--tableofcontents list: ol; title: Table of Contents; minlevel: 1; maxlevel: 3;-->. All arguments are optional and defaults are shown.

Más información sobre opciones de formato


Publicidad