Foros del Web » Programando para Internet » PHP »

Guardar una imagen

Estas en el tema de Guardar una imagen en el foro de PHP en Foros del Web. Hola a todos como puedo guaardar una imagen en una base datos mysql, priemero quiero saber el tipo de dato que debo dejar en la ...
  #1 (permalink)  
Antiguo 23/02/2009, 13:48
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Información Guardar una imagen

Hola a todos como puedo guaardar una imagen en una base datos mysql, priemero quiero saber el tipo de dato que debo dejar en la tabla para guardar la imagen, despues el codigo de como la guardo, ademas que cuando la liste me muestre genere un link, que diga, ver foto y me lleve ese vinculo a ver la imagen, agradezco la atencion prestada.
  #2 (permalink)  
Antiguo 23/02/2009, 13:52
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Guardar una imagen

:P Picky ...

Echale una mirada a este tutorial:
http://www.forosdelweb.com/f18/tutor...inario-127775/
A menos que solo quieras guardar la ruta, que es aun mas facil.
  #3 (permalink)  
Antiguo 24/02/2009, 10:55
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Guardar una imagen

Ok muy bien me guarda una imagen en la bd, pero despues de ello, no me deja agregar mas: quiero tambien que me deje solo almecenar imagenes con formato jpeg y en un determinado tamaño.. gracias.. adjunto los archivos php..

formulario.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
<?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","root","") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("metrologia",$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 fotos (id_foto, 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
<?php
if(isset($_GET['id'])) {

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

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

$sql = "SELECT archivo_nombre,archivo_binario,archivo_tipo,archiv o_peso FROM fotos WHERE id_foto='".$_GET['id_foto']."'";

$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
<?php
mysql_connect("localhost","root","") or die ("no se ha podido conectar a la BD");

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

$sql = "SELECT id_foto,archivo_nombre,archivo_tipo,archivo_peso FROM fotos";
$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_foto']."\">";
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>";
}

?>
  #4 (permalink)  
Antiguo 24/02/2009, 13:33
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Guardar una imagen

Cita:
quiero tambien que me deje solo almecenar imagenes con formato jpeg y en un determinado tamaño
Cuando subes un archivo, accedes a los datos de ese archivo por medio del array superglobal $_FILES[].

Para saber el tipo: $_FILES['archivo']['type'] //Esto devuelve el MIME type del archivo, en caso de un archivo jpeg puede ser: image/jpeg o image/pjpeg.
Y para saber el tamaño en bytes: $_FILES['archivo']['size']

Ahora solo es cuestion de hacer unos IFs.

http://www.php.net/manual/en/feature...ost-method.php
  #5 (permalink)  
Antiguo 24/02/2009, 13:41
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Guardar una imagen

No es clara tu respuesta Ronruby...
  #6 (permalink)  
Antiguo 24/02/2009, 13:50
Avatar de highlord  
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 353
Antigüedad: 16 años, 4 meses
Puntos: 16
Respuesta: Guardar una imagen

hola yo tengo un script php msql para hacer un fotolog
Y lo comparto con todos los foreros!!!

Tengo además un pqueño inconveniente, y es que no puedo instalarlo por problemas de permisos en mi servidor.
le establezco permisos chomd 777, es decir permitir lectura ejecucion y escritura y me sigue dando el mismo error de permisos a la hora de la instalacion.

Quizas alguien lo baje y lo pueda instalar. No tiene casi nada de programación esta basado en Fotolog.net y el diseño es pesimo pero bueno se puede mejorar.
Agradeceria que me indiquen como hacer para solucionar lo de los permisos

y les paso el link del sistema porque por motuivos de anti-span no me deja postearlo aca
mi e-mail es [email protected]
  #7 (permalink)  
Antiguo 24/02/2009, 14:00
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Guardar una imagen

Cita:
Iniciado por ingluis Ver Mensaje
No es clara tu respuesta Ronruby...
En tu archivo que inserta la imagen, verifica que el archivo es jpeg y que cumple el tamaño (en bytes) adecuado.

Código PHP:
<?php
if($_FILES['archivo']['type']!="image/pjpeg" OR $_FILES['archivo']['type']!="image/jpeg") {
  echo 
'Error, el archivo tiene que ser .jpeg';
  exit();
}
if(
$_FILES['archivo']['size'] > 100000) {
  echo 
'El archivo no puede ser mayor a 100kb';
  exit();
}
?>
  #8 (permalink)  
Antiguo 24/02/2009, 14:10
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Mensaje Respuesta: Guardar una imagen

a ver...me genera 'Error, el archivo tiene que ser .jpeg' siempre asi sea jpeg, por que con los codigos que anexe me guarda solamente un registro y despues me sale el mensaje mensaje siempre del archivo insertar.php

"No se pudo insertar los datos en la base de datos"
  #9 (permalink)  
Antiguo 24/02/2009, 14:45
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Guardar una imagen

Muestrame como tienes el codigo ahora mismo.
  #10 (permalink)  
Antiguo 24/02/2009, 15:27
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Guardar una imagen

formulario.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
<?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","root","") or die("No se pudo realizar la conexion con el servidor.");
mysql_select_db("metrologia",$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 fotos (id_foto, 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
<?php
if(isset($_GET['id'])) {

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

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

$sql = "SELECT archivo_nombre,archivo_binario,archivo_tipo,archiv o_peso FROM fotos WHERE id_foto='".$_GET['id_foto']."'";

$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
<?php
mysql_connect("localhost","root","") or die ("no se ha podido conectar a la BD");

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

$sql = "SELECT id_foto,archivo_nombre,archivo_tipo,archivo_peso FROM fotos";
$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_foto']."\">";
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>";
}

?>
  #11 (permalink)  
Antiguo 24/02/2009, 15:41
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Guardar una imagen

if($_FILES['archivo']['type']!="image/pjpeg" OR $_FILES['archivo']['type']!="image/jpeg")

Intenta cambiar ese OR por &&
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 24/02/2009, 15:48
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Guardar una imagen

Ok Triby.. ya me guarda bien, pero imaginate que solo me guarda un solo registro no deja guardar mas me arroja el error que tengo en el echo del archivo guardar.php, que esta en la linea:

mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos.");

me arroja No se pudo insertar los datos en la base de datos.
  #13 (permalink)  
Antiguo 24/02/2009, 16:41
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Guardar una imagen

cambia a:
Código php:
Ver original
  1. mysql_query($consulta_insertar,$conexion) or die(mysql_error());

Asi mysql te dira cual es exactamente el error.
__________________
- León, Guanajuato
- GV-Foto
  #14 (permalink)  
Antiguo 24/02/2009, 20:44
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Guardar una imagen

Cita:
Iniciado por Triby
if($_FILES['archivo']['type']!="image/pjpeg" OR $_FILES['archivo']['type']!="image/jpeg")

Intenta cambiar ese OR por &&
Gracias por corregirme ese error Triby ;)
  #15 (permalink)  
Antiguo 25/02/2009, 08:16
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Mensaje Respuesta: Guardar una imagen

Ok Triby, muchas gracias:

el error que me sale es:
Parse error: parse error, unexpected T_STRING in C:\AppServ\www\fotos\insertar.php on line 36
  #16 (permalink)  
Antiguo 25/02/2009, 08:39
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Guardar una imagen

Triby me esta saliendo
Duplicate entry '0' for key 1
  #17 (permalink)  
Antiguo 25/02/2009, 08:41
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Guardar una imagen

Muestranos las lineas 35 y 36 de tu archivo insertar.php
  #18 (permalink)  
Antiguo 25/02/2009, 08:47
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Guardar una imagen

linea 35:
mysql_query($consulta_insertar,$conexion) or die (mysql_error());

alli me genera el error Duplicate entry '0' for key 1
  #19 (permalink)  
Antiguo 25/02/2009, 11:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Guardar una imagen

Cuando tienes un campo auto increment no debes incluirlo en el insert:

$consulta_insertar = "INSERT INTO fotos (id_foto, archivo_binario, archivo_nombre, archivo_peso, archivo_tipo) VALUES ('', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')";

Solo elimina lo que esta en rojo y ya no debieras tener problema.
__________________
- León, Guanajuato
- GV-Foto
  #20 (permalink)  
Antiguo 26/02/2009, 08:15
 
Fecha de Ingreso: enero-2009
Mensajes: 197
Antigüedad: 15 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Guardar una imagen

ok gracias, ya me funciono correctamente
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




La zona horaria es GMT -6. Ahora son las 18:12.