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. Gracias Cluster...ahora te comento para ver si me ayudas en esto.... estoy utilizando el archivo listar miniaturas para mostrar todos los articulos publicados con 1 ...
  #211 (permalink)  
Antiguo 20/12/2004, 17:36
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 10 meses
Puntos: 6
Gracias Cluster...ahora te comento para ver si me ayudas en esto.... estoy utilizando el archivo listar miniaturas para mostrar todos los articulos publicados con 1 miniatura y el titulo o nombre del articulo...

pero como tengo un while pues me muestra las 4 miniaturas (pues cada articulo tiene 4 fotos)..

como hago para mostrar solo 1 miniatura + el titulo del articulo ?

de esta forma esta el archivo
Código PHP:
include('../Connections/vibabienCon.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 * FROM inventario, imagenes where inventario.publicar=1 AND inventario.id_inventario=imagenes.id_inventario";
    
$consulta mysql_query($sql,$vibabienCon) or die ("No se pudo ejecutar la consulta");

    while (
$registro=mysql_fetch_assoc($consulta)){
        echo 
"<img src=\"ver_thumbnail.php?id_imagenes=".$registro['id_imagenes']."\"><br>";
        echo 
"<br>Nombre del Propietario: ".$registro['propietario']."<br>";
        echo 
"<br> Nombre archivo: ".$registro['nombre']."<br>";
        echo 
"Tipo archivo (MIME formato): ".$registro['tipo']."<br>";
    } 
Saludos...
__________________
www.dataautos.com
  #212 (permalink)  
Antiguo 21/12/2004, 05:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Sería ideal que inicies un nuevo tema con tu pregunta .. esto ya no tiene mucho que ver con el tutorial origial (estás creando tu própia adaptación) .. Así no mezclamos temas .. tan sólo haz referencia a que te basastes en ese tutorial o bien pones tu código completo que uses tras tus modificaciones.

Un saludo,
  #213 (permalink)  
Antiguo 21/12/2004, 12:59
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 10 meses
Puntos: 6
oks
__________________
www.dataautos.com
  #214 (permalink)  
Antiguo 08/01/2005, 23:43
Avatar de gachon  
Fecha de Ingreso: septiembre-2004
Ubicación: En Google
Mensajes: 462
Antigüedad: 20 años, 3 meses
Puntos: 3
hola muy buenas a todos,antes de nada , darte la gracias Cluster por tu tutorial y por enseñar todo lo que sabes,,,,,

bueno, decir que estoy intentando haber si me muestra la imagen, pero no me la muestra me muestra la x esa que sale cuando no encuentra la imagen y tambien
cuando le doy con el boton derecho del raton encima de la supuesta imagen y le doy a ver imagen me salte este error:
Código:
Warning: Cannot modify header information - headers already sent by (output started at /var/www/conexion.inc.php:29) in /var/www/verfoto.php on line 13
GIF87a·· y asin mucho codigo de ese binario
y la linea 13 es esta
Código PHP:
  header("Content-type: $tipo"); 
y haber si alguien sabe a que puede ser devido esto
si tiene ver algo algo de permiso o del navegador,
estoy utilizando linux en localhost

bueno muchas gracias de todas formas
saludos

Última edición por gachon; 21/06/2005 a las 19:00
  #215 (permalink)  
Antiguo 09/01/2005, 01:32
Avatar de gachon  
Fecha de Ingreso: septiembre-2004
Ubicación: En Google
Mensajes: 462
Antigüedad: 20 años, 3 meses
Puntos: 3
joe que fuerte, saben porque era el error porque habia dejado en el archivo
de conexion.inc.php dos espacios en blanco despues del ?>
y ha sido eso,,,, porque he buscado por el maravilloso san google el error que me daba poniendo esto en su buscador
Código:
Warning: Cannot add header information - headers already sent by (output started at
y me ha llevado a la pagina donde tenia la respuesta
http://moodle.org/doc/?file=faq.html#headerssent
y ponia eso lo de los espacios en blanco lo he hecho y se me mostraba la imagen
joe me he quedao cuajao cuando error daba porque habia dos espacios en blanco despues
del ?>
bueno pues gracias , ahora seguire con la tarea

bueno muchos saludos

Última edición por gachon; 21/06/2005 a las 19:00
  #216 (permalink)  
Antiguo 07/02/2005, 08:49
Avatar de punishersv  
Fecha de Ingreso: febrero-2005
Ubicación: c:\El Salavador\San Salvador\Apopa
Mensajes: 14
Antigüedad: 19 años, 10 meses
Puntos: 0
De acuerdo Mil Gracias!

hola a todos.. es mi primer post que coloco aquí, quiero agradecer por tan buena explicación aun que el motivo de mi nota es para ver si me pueden despejar de unas dudas..

es la primera vez que puedo subir archivos ya que mi host no permite subir archivos (o por lo menos eso creo yo, ya que me han dicho que como tengo alojado mi sitio en un Host WINDOWS no iba a poder subir archivos, tengo mi host en aruba.it)

ahora bien, se que con su ayuda e podido subir archivos por que cuando reviso la base mysql que tengo allí me aparecen los nombres de los archivos que e subido pero mi pregunta es.. Como bajo eso archivos? o donde se tendrían que alojar esos archivos? como verán se muy poco de esto pero me siento en confianza para manifestarles mis dudas aun que para la mayoría de ustedes suenen como preguntas tontas..

gracias nuevamente.. un saludo a todos y espero incorporarme de lleno a este foro..
  #217 (permalink)  
Antiguo 09/02/2005, 04:55
 
Fecha de Ingreso: julio-2003
Mensajes: 40
Antigüedad: 21 años, 4 meses
Puntos: 0
No se puede seleccionar BD

Hola!
no hay manera!

he copiado el código cambiando las 4 cosas y no funciona. Alguna idea por favoooooor!

<?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($server,$dbuser,$dbpass) or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("archivos",$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, "r"), filesize($binario_nombre_temporal)));
?>

Graciassssssss!
  #218 (permalink)  
Antiguo 09/02/2005, 05:04
 
Fecha de Ingreso: julio-2003
Mensajes: 40
Antigüedad: 21 años, 4 meses
Puntos: 0
vale ya está

corregido
  #219 (permalink)  
Antiguo 09/02/2005, 06:43
 
Fecha de Ingreso: julio-2003
Mensajes: 40
Antigüedad: 21 años, 4 meses
Puntos: 0
Pregunta Ahora si que no me funciona....

Ahora no me da error de la BD e inserta bien los datos en la BD pero se tendrian que subir las imágenes al ftp, no?
O estoy equivocado....
  #220 (permalink)  
Antiguo 09/02/2005, 06:54
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
¿¿¿??? estimado amigo.. no he seguido tu situación pero en esta última pregunta... Si dices que ya te subió a la BD por qué mencionas FTP???... Espero hayas leido bien de qué trata el asunto.. subes la imagen (o cualquier archivo) en modo binario... no esperes ver algo como http://direc.com/imagen/archivo.jpg .. no!.. jamás aparecererá en una carpeta de tu página... no se crea el archivo como tan... lo convierte a 0's y 1's y si necesitas ver tu imagen debes de llamarla desde la BD con cabeceras especiales... (creo en este tutorial hay un archivo ver.php que es el "le vuelve la forma" a la imagen)... como sea que esto quede claro.. porque me parece es por ahí tu pregunta... Por favor lee bien el tutorial. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #221 (permalink)  
Antiguo 09/02/2005, 07:07
 
Fecha de Ingreso: julio-2003
Mensajes: 40
Antigüedad: 21 años, 4 meses
Puntos: 0
Gracias pero...

Gracias por tu rapidez.
Efectivamente desconocía que lo subía en modo binario.
Tengo un par de problemas...parece que hay los datos pero con ver.php no funciona. Haciendo <img src="ver.php?id=1"> no funciona con echo "<img scr=\"ver.php?id=3\">"; tampoco.

Al hacer insertar.php el location no funciona bien, no redirecciona

Si lo que quiero es subir archivos excel me recomendais este método o hay otro mejor?

Muchissimas gracias!

Nerwell
  #222 (permalink)  
Antiguo 14/02/2005, 21:52
 
Fecha de Ingreso: abril-2004
Mensajes: 24
Antigüedad: 20 años, 7 meses
Puntos: 1
por necesidad trabajo en postgres y he modificado el script segun lo que yo necesito para subir la imagen. cambie el tipo de datos de la imgen de bolb a oid pero este es el error que manda
Warning: pg_query(): Query failed: ERROR: invalid input syntax for type "oid":,

obviamente estoy haciendo algo mal, quizas no se como ingresar el tipo de datos OID ...
por que lo estoy insertando tal cual lo hago al ingresar un dato cuelquiera... no he encontrado nada al respecto con el archivo de tipo OID, ni siquiera el tamaño que del bytes que este aguanta, por que quizas tambien ese sea el error... bueno cualquier ayuda lo agradesco de antemano...

bye

javier---
  #223 (permalink)  
Antiguo 15/02/2005, 05:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Desconozco como trabaja PostsgreSQL los campos tipo "binarios" .. pero en Mysql una de las cosas que hay que hacer o se suele hacer es "escapar" el archivo binario leido (en los ejemplos de este mini-tutorial con fopen() ..) usando "addslashes()", tal vez sea necesario algo más o incluso no usar dicha función para trabajo con datos binarios en PostgreSQL.

Un saludo,
  #224 (permalink)  
Antiguo 15/02/2005, 08:17
 
Fecha de Ingreso: noviembre-2003
Mensajes: 114
Antigüedad: 21 años, 1 mes
Puntos: 0
Puedes usar base64 y meterlos en un campo tipo "fulltext" o "longtext".

O como se llamen en PostgreSQL.

Saludo.
__________________
Soporte y Creaciones PHP-Nuke:
NukeProjects.Net

if($Necesitas=="Ayuda"){
echo "No dudes en pedirla";
}
  #225 (permalink)  
Antiguo 15/02/2005, 10:20
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 20 años
Puntos: 7
Para subir binarios puedes utilizar campos de tipo bytea (es lo que utilizo), te mando parte del código que tengo:
Código PHP:
// Variables de la foto
        
$type $_FILES["archivo"]["type"];
        
$tmp_name $_FILES["archivo"]["tmp_name"];
        
$size $_FILES["archivo"]["size"];
        
        
# contenido del archivo
      
$fp fopen($tmp_name"rb");
      
$tblob fread($fpfilesize($tmp_name));
      
$tblob pg_escape_bytea($tblob); // $tblob = addslashes($tblob);
      
fclose($fp);
        
#nombre de la foto
        
$desc $_POST["desc"];
        
$link pg_connect("host=$dbhost user=$dbuser password=$dbpwd dbname=$dbname") or die(pg_last_error($link));;
        
$sql "INSERT INTO tabla(descripcion, archivo, mime, size)
            VALUES ('$desc', '$tblob', '$type', $size)"
;
        
pg_query($link$sql) or die(pg_last_error($link));
        
pg_close(); 
Es de especial importancia esta línea
$tblob = pg_escape_bytea($tblob); // $tblob = addslashes($tblob);
Para mayor información puedes visitar http://www.php.net/pg_escape_bytea

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #226 (permalink)  
Antiguo 19/03/2005, 18:38
 
Fecha de Ingreso: marzo-2003
Ubicación: La Paz BCS
Mensajes: 13
Antigüedad: 21 años, 9 meses
Puntos: 0
Felicidades a Cluster por el Tutorial: Subir archivos a tu BD (guardando en la BD en

pero quiero hacer resaltar un error que me presento en: /ver_thumbnail.php?id=1

el error fue: Parse error: parse error, unexpected T_STRING in d:\htdocs\subir_archivos\ver_thumbnail.php on line 39

pero fue solucionado al cerrar un espacio en la variable:$new _h

que esta en la respectiva línea 39

solo se le quito el espacio y se dejo asi:$new_h y listo....




Nota: puede que cluster lo aya dejado a propósito

Última edición por tejuinozeta; 19/03/2005 a las 18:41
  #227 (permalink)  
Antiguo 20/03/2005, 15:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Cita:
Iniciado por tejuinozeta
pero quiero hacer resaltar un error que me presento en: /ver_thumbnail.php?id=1

el error fue: Parse error: parse error, unexpected T_STRING in d:\htdocs\subir_archivos\ver_thumbnail.php on line 39

pero fue solucionado al cerrar un espacio en la variable:$new _h

que esta en la respectiva línea 39

solo se le quito el espacio y se dejo asi:$new_h y listo....




Nota: puede que cluster lo aya dejado a propósito
El espacio que mencionas fuè ocasinado por el còdigo de este foro al tratar el còdigo que se coloca con la funciòn "[php ]" ... Gracìas igualmente por la observaciòn.

Un saludo,
  #228 (permalink)  
Antiguo 21/03/2005, 21:21
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 3 meses
Puntos: 0
problemas con ver_thumbnail.php

Hola Cluster y otros ForosdelWebistas amantes de php, tengo un problema para ver la parte de ver_thumbnail.php, bueno no me sale ningun error y me sale la pagina en blanco.


que puede ser????

copio de nuevo el archivo haber que puede estar pasando, esta igualito al colocado aqui en un post de la primera pagina de este tema de upload.

ya habilite todo las librerias que es la gd 2.0 en mi php.ini, pero no se que puede estar pasando, por fa una ayudadita a ver, se los agradeceria.

<?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("portafolio") 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 = 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,$n ew_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);
}

?>
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #229 (permalink)  
Antiguo 22/03/2005, 06:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Tendrás que asegurate/comprobar algunas cosas:

1) Que el dato de tu imagen esté en tu BD (en el campo correspondiente).
2) Que el tipo de imagen sea el que se indica (sólo JPG standard).
3) Probar el script sin cabeceras HTTP (comentando o eliminando por el momento la línea referente a header() ... Ahí debes observar el "binario" (caracteres Ascii sin mucho sentido) que contiene tu imagen. Eso indicaría que la consulta SQL está devolviendo lo esperado. Si hay algún mensaje de error .. ahí mismo lo debes observar.

Un saludo,
  #230 (permalink)  
Antiguo 22/03/2005, 18:36
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 3 meses
Puntos: 0
Una sola Thumbnails!!!!!??????

ahora bien pude resolver que me saliera el thumbnails, pero solo me sale el primero que esta en la base de datos, mi pregunta es como implementarias una especie de while para que vaya recorriendo las imagenes y otros campos y los vaya mostrando????.

bueno aqui en el foro dijeron algo asi:

En el archivo listar_imagenes.php he sustituido el


echo "<img src=\"ver.php?id=".$registro['id']."\">";

// por

echo "<img src=\"ver_thumbnail.php?id=".$registro['id']."\">";

bueno lo hice y me sale la misma imagen para todos los registros, los demas datos si todos son ciertos, como el tamaño,nombre y tipo de archivo, solo que la imagen es la misma "la primera que se encuentra en la base de datos".

espero que me den una ayudadita a ver si resulevo este problemilla.
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #231 (permalink)  
Antiguo 23/03/2005, 08:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Stickmaster2004

El ejemplo es exactamente la misma filosofía de listar_imagenes.php .. pero si quieres los Thumbnails puedes usar:

echo "<img src=\"ver_thumbnail.php?id=".$registro['id']."\">";

Podrías tener algún problema sobre caché (tal vez?) .. prueba en ver_thumbnail.php a usar las cabeceras HTTP de "no caché" como las que veras en:

www.php.net/header

Y sobre todo asegurate de que ese $registro['id'] esté tomando el valor correco para cada registro ...

Un saludo,
  #232 (permalink)  
Antiguo 24/03/2005, 19:10
 
Fecha de Ingreso: marzo-2003
Ubicación: La Paz BCS
Mensajes: 13
Antigüedad: 21 años, 9 meses
Puntos: 0
Hola, yo e echo lo que hizo Stickmaster2004 y funciono FERFECTAMENTE

tengo el PHP Version 4.3.0
en mi PC con:register_globals en off

saludos...
  #233 (permalink)  
Antiguo 24/03/2005, 23:46
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 3 meses
Puntos: 0
les comento que ya habia arreglado el problema del por que me salia en blanco y era que tenia esto demas o estorbaba para que se pudiera visualizar de buena manera.
era por esta linea de codigo, teneis este problemilla de que no te sale nada pues quitala y ya.
if(isset($_GET['id'])) {

ahora estoy implementando una de actualizacion, haber como me queda...........
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #234 (permalink)  
Antiguo 26/03/2005, 00:20
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 3 meses
Puntos: 0
Insertar Thumbnails

lo que yo hago es que tomo la foto original desde cualquier parte de mi computador ya sea c: o d:\pollos\gallinas y las cargo con un input "file", luego en la otra pagina .php cargo la imagen hago un thumbnails y la convierto a un tamaño deseado por ejemplo de 50x50 y la introduzco en una carpeta que cree llamada imagenes que esta dentro de mi proyecto, una vez la imagen es insertada en la base de datos de mysql, ya no necesito que quede alojada alli seria algo redundante asi pues se llenaria el disco duro con muchas imagenes, pues para eso utilizo la funcion unlink para eliminar un archivo de un directorio en especifico en mi caso el directorio imagenes, una vez se sube el archivo a la base de datos inmediatamente lo elimino de dicha carpeta, en fin esa carpeta imagenes es como si fuera una carpeta temporal y siempre va a estar vacia pues siempre voy eliminado, les muestro el codigo a ver si le sirve a alguien:


***********insertarpro.html*****************

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
<style type="text/css">
<!--
.Estilo1 {
color: #00CCFF;
font-weight: bold;
font-size: large;
}
-->
</style>
</head>

<body>
<div id="Layer1" style="position:absolute; width:591px; height:804px; z-index:1; left: 0px; top: -4px;"><img src="barra.gif" width="623" height="800">
<div id="Layer2" style="position:absolute; width:620px; height:84px; z-index:1; left: 1px; top: -2px;">
<div id="Layer3" style="position:absolute; width:613px; height:115px; z-index:1; left: 4px; top: 104px;">
<div align="center" class="Estilo1">
<p>Insertar Nuevo Producto</p>


<div id="Layer4" style="position:absolute; width:56px; height:22px; z-index:2; left: -7px; top: -22px;"><a href="mantenimientotrampa.php"><font color="#0000CC" size="3">Atras</font></a></div>
</p>
<Script language="JavaScript">
function vacio(){

if ((myform.nom.value == "") || (!isNaN(myform.nom.value)))
{ alert("Por favor verifique el Nombre del Producto");
myform.nom.focus();
myform.nom.value="";
return(false); }

if ((myform.pre.value == "") || (isNaN(myform.pre.value)))
{ alert("Por favor verifique el Precio del Producto");
myform.pre.focus();
myform.pre.value="";
return(false); }

if ((myform.foto.value == ""))
{ alert("Por favor verifique que haya insertado una fotografia");
myform.foto.focus();
myform.foto.value="";
return(false); }

if ((myform.des.value == ""))
{ alert("Por favor introduzca una Descripcion para el Producto");
myform.des.focus();
myform.des.value="";
return(false); }






else
{
myform.action="insertarpro1.php";
myform.submit();
}



}
</script>






<FORM name=myform enctype="multipart/form-data" method="post" action="insertarpro1.php">

<table width="375" border="1">
<tr>
<td width="174">Nombre del Producto </td>
<td width="185"><div align="left">
<input type="text" name="nom">
</div></td>
</tr>
<tr>
<td>Precio</td>
<td><div align="left">
<input type="text" name="pre">
</div></td>
</tr>
<tr>
<td>Fotografia</td>
<td><INPUT type="file" name="foto" size="20"> </td>
</tr>
<tr>
<td>Descripcion</td>
<td><div align="left">
<textarea name="des"></textarea>
</div></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="button" name="Submit" onClick=vacio() value="Enviar">
</div></td>

</tr>
</table>
<p>&nbsp;</p>
</div>
</div>
<img src="slice_05.jpg" width="619" height="79"></div>
</div>
</body>
</html>




*******************insertarpro1.php*************** *******
<?php
if (empty($_FILES['foto']['name'])){
header("location: insertarpro.html?proceso=falta_indicar_fichero"); //o como se llame el formulario ..
exit;
}
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>

<body>
<div id="Layer1" style="position:absolute; width:591px; height:804px; z-index:1; left: 0px; top: -4px;"><img src="barra.gif" width="623" height="800">
<div id="Layer2" style="position:absolute; width:620px; height:84px; z-index:1; left: 1px; top: -2px;">
<div id="Layer3" style="position:absolute; width:613px; height:115px; z-index:1; left: 5px; top: 113px;">
<div align="justify">




<?php


$nom=$_POST['nom'];
$pre=$_POST['pre'];
$des=$_POST['des'];



//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("portafolio",$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['foto']['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)));

$binario_nombre=$_FILES['foto']['name'];
$archie='imagenes/'.$binario_nombre;


$original = imagecreatefromjpeg($binario_nombre_temporal);
$thumb = imagecreatetruecolor(50,50); // Lo haremos de un tamaño 50x50

$ancho = imagesx($original);
$alto = imagesy($original);

imagecopyresampled($thumb,$original,0,0,0,0,50,50, $ancho,$alto);


$d=imagejpeg($thumb,$archie,90); // 90 es la calidad de compresión



$binario_contenido1 =addslashes(fread(fopen($archie,"rb"), filesize($archie)));










//insertamos los datos en la BD.
$consulta_insertar = "INSERT INTO productos (codigo,nom_prod,precio,fotografia,descripcion) VALUES ('', '$nom', '$pre', '$binario_contenido1', '$des')";
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");
?>
<center>
<b>
<?php
echo "El Producto ha sido Ingresado Satisfactoriamente";


$dirname="./".$archie;

function rmd($dirname)
{
// Sanity check
if (!file_exists($dirname)) {
return false;
}

// Simple delete for a file
if (is_file($dirname)) {
return unlink($dirname);
}



return rmdir($dirname);
}

$dirname ="./".$archie;
rmd($dirname);



?>
<br>
<br>
<center>
<b>Si desea Ingresar otro Producto haga click,&nbsp;<a href="insertarpro.html"><font color="blue">Aqui</font></b></a>
<div id="Layer4" style="position:absolute; width:375px; height:22px; z-index:2; left: -43px; top: -31px;"><a href="mantenimientotrampa.php"><font color="#0000CC">Volver al Menu Principal de Mantenimiento </font></a></div>
</div>
</div>
<img src="slice_05.jpg" width="619" height="79"></div>
</div>
</body>
</html>
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria

Última edición por Stickmaster2004; 26/03/2005 a las 00:23
  #235 (permalink)  
Antiguo 27/03/2005, 14:20
 
Fecha de Ingreso: marzo-2003
Ubicación: La Paz BCS
Mensajes: 13
Antigüedad: 21 años, 9 meses
Puntos: 0
Hola no hay que confundir a los lectores, lo que cluster hizo de mostrar una lista de fotos(codigo binario) que se encuentran en la base de datos. La imagen real se muestra tal como es, pero la imagen chica el mismo codigo del php la convierte.

Por otro lado se tiene que poner otro titurial: "como subir imagenes al servidor
y guardar datos de esta en base de datos (excepto codigo binario de la foto)."
Aqui ya se usa una carpeta para tamaño real y una para tamaño mini (thumbnail)
Yo tengo este sistema de conjunto de scrip's que e conseguido en la red
  #236 (permalink)  
Antiguo 27/03/2005, 22:38
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 3 meses
Puntos: 0
Insertar Thumbnails

entonces pon el enlace donde esta esa forma de hacerlo pues yo busque en la red y pues no encontre nada, por lo menos en sitios en español, si dejas los enlaces seria de gran ayuda para que los usuarios tuvieran una vision mas global y de lo que yo pretendi hacer con el ejemplo que coloque de insertar thumbnails, por otra parte en gran parte hacer el thumbnails antes de insertarlo me parece mas sensato, gracias a que logras ahorrarte pues algo de tamaño en kb en tus imagenes antes de insertarlas a la base de datos, y por eso coloque la funcion de unlink para que se me borraran los archivos "temporales" al instante.
bueno, me despido hasta la proxima bye.
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #237 (permalink)  
Antiguo 28/03/2005, 06:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Cita:
Iniciado por Stickmaster2004
entonces pon el enlace donde esta esa forma de hacerlo pues yo busque en la red y pues no encontre nada, por lo menos en sitios en español, si dejas los enlaces seria de gran ayuda para que los usuarios tuvieran una vision mas global y de lo que yo pretendi hacer con el ejemplo que coloque de insertar thumbnails, por otra parte en gran parte hacer el thumbnails antes de insertarlo me parece mas sensato, gracias a que logras ahorrarte pues algo de tamaño en kb en tus imagenes antes de insertarlas a la base de datos, y por eso coloque la funcion de unlink para que se me borraran los archivos "temporales" al instante.
bueno, me despido hasta la proxima bye.
Todo depende de lo que quieras hacer ...

El tema de generar tus thumbnails y guardarlos en tu BD (sólo la referencia del nombre del archivo) junto con la otra referencia del nombre del archivo (imagen) de tamaño real es una buena opción si sólo requieres de esa funcionalidad y thumbnails de tamaño fijo. No en todas las ocasiones se presenta esa situación, hay muchos procesos que se requieren dinámico.

Este tutorial sólo cubre una de tantas opciones que tienes para trabajar con archivos binarios gestionados por tu BD y es eso lo único que hay que tener -claro- .. Si deseas hacer otra cosa .. inicia un tema nuevo .. expon tu problema, pide ayuda .. etc .. Pero no mezclemos temas!. Este mensaje está dedicado para mostrar dicha técnica (con este mini-tutorial) y preguntas acerca del mismo.

Un saludo,
  #238 (permalink)  
Antiguo 28/03/2005, 14:45
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 3 meses
Puntos: 0
es otro enfoque pero del mismo tema

pues creo que aqui se expuso en este tutorial como insertar imagenes en BD, osea archivos binarios junto con otras cosillas como el tipo MIME osea "jpeg,jpg,gif,png,", entre otros, asi como el tamaño del archivo, asi mismo verlos en su forma original, y pues verlos a traves de thumbnails de una forma mas pequeña esto utilizando GD que viene en la configuracion de nuestro php.ini, bueno lo que yo espuse era una variante que va con el tema y es que ya no vas a insertar la imagen en tamaño original si no que antes la conviertes a un tamaño en especifico sea de 50x50 pixeles o del tamaño que desees para que luego se inseten todas del mismo tamaño en tu base de datos de esta manera optimizando el uso de la base de datos y ahorrar dicho espacio, una vez hallas insertado las imagenes puedes observarlas mediante el archivo ver.php con una simple llamada por lo que las imagenes van a ser del mismo tamaño, eso era lo que trataba de hacer, pues si me sali del tema, digo, oppppppppppppppppppsssssssssssssss!!!!!!!!!!!!!!!! , lo siento, bueno eso era todo, los dejo por el dia de hoy, bye.
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #239 (permalink)  
Antiguo 28/03/2005, 14:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 11 meses
Puntos: 129
Stickmaster2004

Ok, .. para completar tu variante .. sería recomentable que vieses el tema de mantener la proporción de la imagen (no fija a 50x50 sino a fijo ancho o alto y lo que dé en proporción, en las FAQ's de este foro tienes un ejemplo) ..

Un saludo,
  #240 (permalink)  
Antiguo 15/04/2005, 20:56
 
Fecha de Ingreso: abril-2005
Mensajes: 1
Antigüedad: 19 años, 8 meses
Puntos: 0
por favor responder rapido

Cita:
Iniciado por Cluster
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":
http://www.php.net/manual/en/features.file-upload.php

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_binario,archivo_tipo 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");

    
header("Content-type: $tipo");
    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:

http://www.mysql.com/doc/en/Column_types.html

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.


Un saludo,
hola, se me hace buen script pero lo que yo buscaba es que este script dejara descargar los archivos, para poder subir archivos y descargarlos espero tener la respuesta rapido y gracias.
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 16:10.