Foros del Web » Programando para Internet » PHP »

Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Estas en el tema de Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario) en el foro de PHP en Foros del Web. :apla uso: plac plac plac........ no puedo creer estar respondiendo algo de hace como 6 años creo..... es increible..... pero es tutorial anda a la ...

  #451 (permalink)  
Antiguo 10/09/2009, 07:30
 
Fecha de Ingreso: septiembre-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

:apla uso: plac plac plac........ no puedo creer estar respondiendo algo de hace como 6 años creo..... es increible..... pero es tutorial anda a la recontra perfeccion.........
no kedan mas q aplausos y felicitacines... a demas de las eternas gracias..
un abrazo
  #452 (permalink)  
Antiguo 07/11/2009, 15:32
 
Fecha de Ingreso: febrero-2009
Mensajes: 32
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

muy buen tutorial cluster, pero tengo una inquietud como podria mandar solo el nombre de la foto a la base de datos y las fotos en una carpeta para que no pese demasiado esta base de datos, ojo solo el nombre por que si se guarda con todo y ruta despues en ver no se pueden desplegar las imagenes en la pagina web, te agradeceria me sacaras de esta duda
  #453 (permalink)  
Antiguo 07/11/2009, 16:17
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años, 1 mes
Puntos: 25
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

No es escalable este tipo de abordaje.
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #454 (permalink)  
Antiguo 14/12/2009, 20:57
 
Fecha de Ingreso: diciembre-2009
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Hola.
El tutorial funciona perfecto, y me ha ayudado harto, así que muchas gracias.
Lo que me gustaría saber, es si alguien ha trabajado con imagenes desde la base de datos, como en este caso, y además con lightbox o alguno de sus clones.

Pregunto esto porque estoy intentando hacer una galería, y si bien puedo desplegar las imagenes que deseo en miniatura, no he podido lograr que al hacer click sobre alguna de las miniaturas, aparezca la imagen dentro de un lightbox.

Si alguno de Uds sabe o ha trabajado en algo como esto, ojalá pueda ayudarme.

Saludos.

edit: Ya lo hice. Si alguien quiere saber cómo, avisa y lo posteo.

Última edición por kernel_one; 21/12/2009 a las 15:59
  #455 (permalink)  
Antiguo 23/01/2010, 02:12
 
Fecha de Ingreso: noviembre-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Cita:
Iniciado por Cluster Ver Mensaje
Bueno, visto las recurrentes preguntas sobre como guardar un archivo binario (sea una imagen, un .exe .. o lo que sea) en una Base de datos (Mysql) y guardando integramente el archivo en un campo de la BD .. aquí va un ejemplo completo.

Se usa el array $_FILES[] ... así q solo funcionará bajo PHP 4.1.x o superior .. Por supuesto, el "Upload" de archivos ha de estar habilitado y configurado en el servidor que se use ..

Más info sobre configuración del tema "Upload":
[url]http://www.php.net/manual/en/features.file-upload.php[/url]

Es muy básico el sistema .. pero está completo. Faltan muchos detalles de validación.

Si quieren añadir mas datos adjuntos al archivo que suban .. solo tienen que añadir mas campos a la tabla 'archivos' y modificar las consultas implicadas (SQL) junto con el própio formulario HTML (tan solo añadir sus campos extra ..)

El código se divide en varios scripts .. El nombre de cada uno creo q es bastante explicativo .. cualquier duda .. pregunten:

Estructura SQL de la tabla que vamos a emplear:
Código:
#
# Estructura de tabla para la tabla `archivos`
#

CREATE TABLE archivos (
  id int(10) unsigned NOT NULL auto_increment,
  archivo_binario blob NOT NULL,
  archivo_nombre varchar(255) NOT NULL default '',
  archivo_peso varchar(15) NOT NULL default '',
  archivo_tipo varchar(25) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

formulario.php
Código PHP:
<HTML>
<HEAD>
<TITLE>Binario a BD</TITLE>
</HEAD>
<BODY>
<?php
if (isset($_GET['proceso'])){
echo 
$_GET['proceso']."<br>";
}
?>
<FORM enctype="multipart/form-data" method="post" action="insertar.php">
Archivo: <INPUT type="file" name="archivo" size="30">
<INPUT type="submit" name="submit" value="Subir archivo">
</FORM>
</BODY>
</HTML>
insertar.php
Código PHP:
<?php
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción:
// No se comprueba aqui si se ha subido correctamente.
if (empty($_FILES['archivo']['name'])){
header("location: formulario.php?proceso=falta_indicar_fichero"); //o como se llame el formulario ..
exit;
}

//establece una conexión con la base de datos.
$conexion mysql_connect("localhost","","") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("tu_bd",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca.

// archivo temporal (ruta y nombre).
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;

// leer del archvio temporal .. el binario subido.
// "rb" para Windows .. Linux parece q con "r" sobra ...
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo.
$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];

//insertamos los datos en la BD.
$consulta_insertar "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
header("location: listar_imagenes.php");  // si ha ido todo bien
exit;
?>
ver.php

Se puede usar directamente llamandolo via un tag HTML de imagen:

<img src="ver.php?id=nºregistro_archivo">

Código PHP:
<?php
if(isset($_GET['id'])) {

    
// you may have to modify login information for your database server:
    
$conexion=mysql_connect("localhost","","") or die ("no se ha podido conectar a la BD");

    
mysql_select_db("tu_bd") or die ("no se ha podido seleccionar la BD");

    
$sql "SELECT archivo_nombre,archivo_binario,archivo_tipo,archivo_peso FROM archivos WHERE id='".$_GET['id']."'";

    
$consulta mysql_query($sql,$conexion);

    
$datos mysql_result($consulta,0,"archivo_binario");
    
$tipo mysql_result($consulta,0,"archivo_tipo");
    
$nombre mysql_result($consulta,0,"archivo_nombre");
    
$peso mysql_result($consulta,0,"archivo_peso");


    
header("Content-type: $tipo");
    
header("Content-length: $peso"); 
    
header("Content-Disposition: inline; filename=$nombre"); 
 
   echo 
$datos;

}
?>
listar_imagenes.php

Un ejemplo completo orientado a listar imagenes (todas) las que contenga nuestra BD junto con el resto de información sobre el archivo que hemos guardado ..

Código PHP:
<?php
    mysql_connect
("localhost","","") or die ("no se ha podido conectar a la BD");

    
mysql_select_db("tu_bd") or die ("no se ha podido seleccionar la BD");

    
$sql "SELECT id,archivo_nombre,archivo_tipo,archivo_peso FROM archivos";
    
$consulta mysql_query($sql) or die ("No se pudo ejecutar la consulta");

    While (
$registro=mysql_fetch_assoc($consulta)){
        echo 
"<img src=\"ver.php?id=".$registro['id']."\">";
        echo 
"<br> Nombre archivo: ".$registro['archivo_nombre'];
        echo 
"<br> Tipo archivo (MIME formato): ".$registro['archivo_tipo'];
        echo 
"<br> Peso: ".$registro['archivo_peso']." bytes.<br><br>";
    }

?>
Y .. otro ejemplo de uso. En este caso se trata de generar "thumbnails" (imagenes pequeñas desde una origen a tamaño real) de las imagenes de la BD.

El uso sería igual que el ver.php. Usa las librerías gráficas GD 1.x en adelante de PHP.

ver_thumbnail.php
Código PHP:
<?php

// OJO, sólo funciona con imagnes en formato JPEG ...

if(isset($_GET['id'])) {

    
$conexion=mysql_connect("localhost","","") or die ("no se ha podido conectar a la BD");
    
mysql_select_db("tu_bd") or die ("no se ha podido seleccionar la BD");
    
$sql "SELECT archivo_binario,archivo_tipo,archivo_nombre FROM archivos WHERE id='".$_GET['id']."'";
    
$consulta mysql_query($sql,$conexion);
    
$imagen mysql_result($consulta,0,"archivo_binario");

    
// Envio cabeceras al navegador .. se indica que lo "que vá" es una imagen de formato MIME JPEG
    
Header ("Content-type: image/jpeg");

    
// Generar el thumbnail:

    // Se crea la imagen desde el campo binario de la BD
    
$img imagecreatefromstring($imagen);

    
// Tamaño del Thumbanil (de la imagen a generar ..)
    
$picsize 123;
    
    
// Se obtienen los datos del ancho y alto de la imagen.
    
$new_w imagesx($img);
    
$new_h imagesy($img);

    
// Se calcula la relación alto/ancho
    
$aspect_ratio $new_h $new_w;
    
    
// Se ajusta al nuevo tamaño
    
$new_w $picsize;
    
$new_h abs($new_w $aspect_ratio);

    
// Se crea la mascara de la imagen nueva
    
$dst_img imagecreate($new_w,$new_h);

    
// Se copia y reajusta el nuevo tamaño en la nueva imagen.
    
imagecopyresized($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img));

    
// Se entrega al buffer de salida (navegador en este caso) la imagen en formato JPEG
    // El tercer parámetro (100) indica la calidad de la imagen: en porcentaje relación calidad/peso imagen.
    
imagejpeg($dst_img,'',100);
}

?>
Si usan GD versión 2.x pueden sustituir el código de estos bloques por:

Código PHP:
// Se crea la mascara de la imagen nueva
    
$dst_img ImageCreateTrueColor($new_w,$new_h);

// Se copia y reajusta el nuevo tamaño en la nueva imagen.
     
imagecopyresampled($dst_img,$img,0,0,0,0,$new_w,$new_h,imagesx($img),imagesy($img)); 
Con lo cual se ganará en profundidad de color (=mejor calidad ..)

NOTA: El artículo está usando campos tipo BLOD para almacenar el archivo binario. Su limite es de 65535 bytes (64 Kbytes), si desean almacenar archivos de peso superior deben de cambiar el tipo de campo "archivo_binaro" a un MEDIUMBLOB (16Mbytes max.) o a un LONGBLOB (4 Gbytes). Más info al respecto en:

[url]http://www.mysql.com/doc/en/Column_types.html[/url]

Actualización (18/08/2004): Solventado problema (bug) en la creación de los "thumbnails". El recurso de imagen para imagesx() e imagesy() no era $src_img sino $img.

Actualización (07/07/2006): Se añaden más cabeceras HTTP al script ver.php para indicar el tipo de archivo que se envia. (Agradecimientos a Prink).

Actualización (14/10/2008): Se corrige consulta SQL de ver.php la cual no hace mención al campo "archivo_peso" para componer a su vez las cabeceras HTTP que envian la imagen finalmente.

Actualización (03/12/2008): Se corrige consulta SQL de ver.php la cual hace mención al campo "archivo_mombre" cuando debería ser "archivo_nombre". (Agradecimientos a zetluis)

Un saludo,
excelente, lo implemente y funciono muy bien ya q no podia subir archivos mas grandes ami bd, trate de modificar el codigo para subir dos archivos y no me salio XD no se si podrias poner el turorial de como subir multiples archivos.. muchas gracias
  #456 (permalink)  
Antiguo 05/04/2010, 20:41
 
Fecha de Ingreso: enero-2010
Mensajes: 302
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

En el caso, que yo quiera mostrar la foto en un formulario como lo hago ? digamos que llene la informacion sobre un usuario en donde este sube su foto, como hago para que en el perfil le aparezca la foto ? suponiendo q agrego otro campo como el correo el cual es unico, como se hace esta consulta
  #457 (permalink)  
Antiguo 04/05/2010, 16:53
Avatar de 2D6
2D6
 
Fecha de Ingreso: enero-2006
Ubicación: Posadas, Misiones
Mensajes: 60
Antigüedad: 18 años, 11 meses
Puntos: 4
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Se que este tema tiene bastante tiempo pero tengo una pregunta.
Use este tutorial, cambie algunos nombres para que se adaptara a lo que tenia echo pero nada grave.
En mi servidor local funciona a la perfeccion, ahora cuando lo subo al servidor no funciona. Alguno tiene idea de que puede ser?

Gracias
  #458 (permalink)  
Antiguo 23/09/2010, 13:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

porfin resolvi esa encrusijada del demonio, pq no me salia,el codigo en si segun los tuto es el sig:
<?php
$qry = "SELECT tipo, contenido FROM archivos WHERE id='$id'";
$res = mysql_query($qry);
$tipo = mysql_result($res, 0);
$contenido = mysql_result($res, 0, "contenido" );
Header( "Content-type: $tipo");
echo $contenido;
?>
lo da como resutado errores con el mysql_result: esta es la correcion

<?php
$id = $_GET['id'];
$qry = "SELECT tipo, contenido FROM archivos WHERE id='$id'";
$res = @mysql_query($qry);
$tipo = @mysql_result($res, 0);
$contenido = @mysql_result($res, 0, "contenido" );
Header( "Content-type: $tipo");
echo $contenido;
?>
y con eso fin del problema, OJO q tienen q tener el ADOBE READER ACTUALIZADO, saludos..
  #459 (permalink)  
Antiguo 04/10/2010, 16:55
 
Fecha de Ingreso: septiembre-2010
Ubicación: vargas
Mensajes: 4
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

me podrian ayudar, use este codigo que postearon y si guarda la info en base de datos pero cuando extraigo la info las imagenes no se me ven y no que hacer tengo la extension gd2 activada y nada uso xampp. De antemano gracias.
  #460 (permalink)  
Antiguo 27/12/2010, 09:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Pregunta Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

hola, me gustaria hacer una consulta......

mira tengo un formulario que agrega un archivo .pdf a la base de datos lo guardo con blob, y ahora tengo que hacer una pagina que muestre en una tabla lo que tengo almacenado en la base de datos. pero solo me muestra la ruta del archivo y yo necesito que quede como un link para que los usuarios lo puedan abrir o descargar, dejo mi php para ver si me pueden ayudar, gracias.

<?php


include_once("conexion.php");
$db = conexion();


$consulta = mysql_query("SELECT n_decreto, fecha, clasificacion, region, documento FROM presupuesto");
echo "<table border = '1'> \n";
echo "<tr> \n";
echo "<td><b>n_decreto</b></td> \n";
echo "<td><b>fecha</b></td> \n";
echo "<td><b>clasificacion</b></td> \n";
echo "<td><b>region</b></td> \n";
echo "<td><b>documento</b></td> \n";
echo "</tr> \n";
while ($linea = mysql_fetch_row($consulta))
{
echo "<tr> \n";
echo "<td>$linea[0]</td> \n";
echo "<td>$linea[1]</td> \n";
echo "<td>$linea[2]</td> \n";
echo "<td>$linea[3]</td> \n";
echo "<td>$linea[4]</td> \n";
echo "</tr> \n";
}
echo "</table> \n";
?>
  #461 (permalink)  
Antiguo 27/12/2010, 21:50
Avatar de ARICARRARO  
Fecha de Ingreso: diciembre-2010
Ubicación: México
Mensajes: 227
Antigüedad: 14 años
Puntos: 10
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Excelente aporte.
  #462 (permalink)  
Antiguo 29/01/2011, 02:10
 
Fecha de Ingreso: agosto-2010
Mensajes: 1
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Muchisimas gracias excelente aporte.
ahora a adaptar a lo que quiero hacer.

realmente es muy util, me di unas vueltas por otras paginas antes de llegar aca.
y relamente me quedo muy claro.

se agradece muchisimo aportes asi:a plauso::aplaus o:
  #463 (permalink)  
Antiguo 08/04/2011, 16:05
 
Fecha de Ingreso: abril-2011
Mensajes: 2
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Hola ...
Buenas tarde
excelente tutorial...
no obstante al poder hacer subir una imagen y poder verla con img src.....

me gustaria saber como poder extraer la imagen que esta en el campo binario (blob)...
sin mostrarla con el cuadro de abrir o guardar como...
sino que se guarde en una carpeta...
para poder yo manipular las imagenes desde la carpeta...
ya que cuando las imagenes estan en base de datos no son fisicas si no que son eso un registro en binario..
alguien me podria yudar....?
gracias...
:)
  #464 (permalink)  
Antiguo 09/04/2011, 11:50
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 15 años, 4 meses
Puntos: 41
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Hola que tal, excelente tutorial, todo funciona perfecto, solo que me aparecia un error al momento de insertar y era esta linea en el archivo insertar.php:
Código PHP:
$consulta_insertar "INSERT INTO archivos (id, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
y la modifique solo quitandole el id, ya que es autoincremental y no era necesario ponerlo:

Código PHP:
$consulta_insertar "INSERT INTO archivos (archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
Tambien realize otras modificaciones para poder subir "archivos" y no solo imagenes, en la BD modifiqué el tipo de datos del campo archivo_binario de BLOB a LONGBLOB y en listar_imagenes.php modifiqué esta linea:
Código PHP:
echo "<img src=\"ver.php?id=".$registro['id']."\">"
por esta:
Código PHP:
echo "<a href=\"ver.php?id=".$registro['id']."\">Descargar</a>"
Con eso ya pude subir archivos como pdf, txt, doc, etc...

Saludos y excelente aporte
  #465 (permalink)  
Antiguo 14/04/2011, 02:47
 
Fecha de Ingreso: abril-2011
Ubicación: Purén
Mensajes: 2
Antigüedad: 13 años, 8 meses
Puntos: 0
Pregunta Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Hola... que hago para que no salga este error

Código PHP:
Warningmysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using passwordNOin D:xampphtdocspruebalistar_imagenes.php on line 2
no se ha podido conectar a la BD 
me sale cada vez que clickeo el botón subir archivo.

Gracias!
  #466 (permalink)  
Antiguo 18/05/2011, 11:22
 
Fecha de Ingreso: mayo-2011
Mensajes: 1
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Hola.

Tengo dos Dudas:

Como Puedo hacer que solo sean archivos .png .jpg .gif ... y todo lo que tenga que ver son imágenes.Que el Usuario no pueda subir archivos como .pdf ni .exe.. que si hace esto le salga un mensaje...

y la segunda como puedo manejar el tamaño de la imagen a mi gusto, es decir, que si el usuario sube una imagen con dimensiones n x m esta imagen automáticamente quede de 800 x 500. Ademas que la pueda hubicar donde quiera si es en la izquierda o arriba etc...

Gracias por la Colaboración y Tiempo.
  #467 (permalink)  
Antiguo 28/06/2011, 19:18
 
Fecha de Ingreso: enero-2010
Mensajes: 302
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: Tutorial ejemplo: Subir archivos a tu BD (guardando en la BD en binario)

Cita:
Iniciado por Mosiah17 Ver Mensaje
Hola... que hago para que no salga este error

Código PHP:
Warningmysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using passwordNOin D:xampphtdocspruebalistar_imagenes.php on line 2
no se ha podido conectar a la BD 
me sale cada vez que clickeo el botón subir archivo.

Gracias!
Por lo que veo es error en el usuario y/o con la base de datos ya que te dice "NO SE HA PODIDO CONECTAR A LA BD" reviza si tu usuario y contraseña estan bien
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.
Tema Cerrado

SíEste tema le ha gustado a 44 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 11:28.