PHP - toy desesperado... guardar imagenes en base

 
Vista:
sin imagen de perfil

toy desesperado... guardar imagenes en base

Publicado por Hugo S. (47 intervenciones) el 21/11/2006 20:15:33
Hola como estan??? Tengo el siguiente problema:
Necesito hacer que a partir de un formulario mi usuario pueda subir una imagen (jpg o gif) a la base de datos hecha con mysql y se guarde ahi. Y no me refiero a la ruta del archivo, sino al mismisimo archivo.

Hice en prueba01.php el form con el input del tipo file para que elija su foto:

<html>
<body>
<?php
if($HTTP_POST_VARS['btnGuardar']<>'Guardar') { ?>
<form action="Prueba02.php" method="post">
<input type="file" name="imagen_rec">
<br><br>
<input type="submit" name="btnGuardar" value="Guardar">
</form>
<?php
}
?>
</body>
</html>

El usuario al hacer click en "guardar" lo lleva a la siguiente pagina donde quiero procesar la cosa y es aqui donde tengo el problema.
No se que es lo que estoy haciendo mal porque estoy seguro que no se esta almacenando bien la foto en la tabla Imagenes. El tipo de campo que le puse a 'imagen' es BLOB, eso estará bien tambien?

prueba02.php

<?php
require('../conexion.php') ;
$imagen_rec = $HTTP_POST_VARS['imagen_rec'] ;

$SQL = "INSERT INTO imagenes (id_imagen,nombre_imagen,imagen)
VALUES ('1','','$imagen_rec')" ;
$resul = mysql_query($SQL, $coneccion) ;

mysql_close($coneccion) ;
?>

Y para mostrarla en otra pagina intento lo siguiente...

prueba_mostrar.php

<?php
require('../conexion.php') ;

$SQL = "SELECT * FROM imagenes" ;
$resul = mysql_query($SQL, $coneccion) ;
$imagen = mysql_result($resul,0,3) ;
?>

<img scr="<?php echo $imagen ; ?>">

<?php
mysql_free_result($resul) ;
mysql_close($coneccion) ;
?>

Le agradeceria muchisimo a quienes me puedan ayudar ya que hace dias que estoy trabado con esto y no encuentro libro ni tutorial que me pueda ayudar ya que todo lo que encontre es solo sobre el tratamiento de imagenes pero no de como volcar la imagen en bases de datos.
Muchas gracias!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:toy desesperado... guardar imagenes en base

Publicado por Ery (65 intervenciones) el 22/11/2006 16:07:25
La Creacion de la DB

create database prueba;
use prueba;
create table imagenes(nombre varchar(120), imagen longtext);

Enviar.html

<html>
<head>
<title>Envio de una Imagen </title>
</head>
<body>
<form action="enviar.php" method="post" enctype="multipart/form-data">
Imagen:<br>
<input name="img" type="file"><br>
<input type="submit" value="Enviar">
</form>
</body>
</html>

Enviar.php

<?php
error_reporting(E_ALL);
$name = $_FILES["img"]["name"];
$tmp_name = $_FILES["img"]["tmp_name"];

if(file_exists($tmp_name))
{
$fp = fopen($tmp_name,"rb");
$cont = base64_encode(fread($fp, filesize($tmp_name)));
fclose($fp);

$conn = mysql_connect("localhost","root","");
if(!$conn)
die ("Error de Conexion");

$db = mysql_select_db("prueba",$conn);
if(!$db)
die ("Error DataBase");

$qry = mysql_query("insert into imagenes(nombre,imagen) values ('$name','$cont')");
if(!$qry)
die ("Error Query");

mysql_close($conn);
header("Location: http://localhost/ver.php?name=".urlencode($name));
}
else
die("No existe el archivo $tmp_name");

?>

ver.php
<?php
error_reporting(E_ALL);
$name = $_GET["name"];

$conn = mysql_connect("localhost","root","");
if(!$conn)
die ("Error de Conexion");

$db = mysql_select_db("prueba",$conn);
if(!$db)
die ("Error DataBase");

$qry = mysql_query("select imagen from imagenes where nombre = '$name'");
if(!$qry)
die ("Query");

$row = mysql_fetch_array($qry);
mysql_free_result($qry);
mysql_close($conn);

$pos = strpos($name,".");
if($pos === false) die ("Error en el nombre del Archivo");

$ext = trim(strtolower(substr($name,$pos+1)));
$ok = false;
if($ext == "jpg") { $ext = "jpeg"; $ok = true; }
if($ext == "jpeg") $ok = true;
if($ext == "gif") $ok = true;

if($ok)
{
header("Content-type: image/$ext");
echo base64_decode($row["imagen"]);
}
else
echo "Error en el Tipo de Archivo";
?>

Un ejemplo bastante facil (sin muchas validaciones ni nada) , ahora te toca implementarlo a ti ;-)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:toy desesperado... guardar imagenes en base

Publicado por Hugo S. (47 intervenciones) el 24/11/2006 00:21:18
Primero que nada, muchisimas gracias por el codigo que me pasaste. Esta muy bueno y funciona a la perfeccion. Ahora que ya puedo subir fotos a la base de datos estoy necesitando que la foto se guarde con un tamaño especifico y no me sale. :(
Siguiendo tu ejemplo intenté agregar codigo que me redimencione automaticamente la foto, encerré mi codigo entre /////// para que lo distingas bien y no se si lo hice bien pero el problema esta que en el lugar donde aparece el fread y el filesize que vos me pasaste me aparece un error que deriva de lo que yo intento hacerle antes... mira y por favor decime que es lo que esta mal:

Enviar.php

<?php
error_reporting(E_ALL);
$name = $_FILES["img"]["name"];
$tmp_name = $_FILES["img"]["tmp_name"];

if(file_exists($tmp_name))
{
///////////////////////////////////////////////////
$imagen = imagecreatefromjpeg($tmp_nombre) ;
$ancho = imagesx($imagen) ;
$alto = imagesy($imagen) ;
$mitad_x = $ancho / 2 ;
$mitad_y = $alto / 2 ;
$imagen_rec = imagecreate($mitad_x, $mitad_y) ;
imagecopyresized($imagen_rec,$imagen,0,0,0,0,$mitad_x,$mitad_y,$ancho,
$alto) ;
imagejpeg($imagen_rec,$nombre,100) ;
//////////////////////////////////////////////

$fp = fopen($imagen_rec,"rb");
$cont = base64_encode(fread($fp, filesize($imagen_rec)));
fclose($fp);

$conn = mysql_connect("localhost","root","");
if(!$conn)
die ("Error de Conexion");

$db = mysql_select_db("prueba",$conn);
if(!$db)
die ("Error DataBase");

$qry = mysql_query("insert into imagenes(nombre,imagen) values ('$name','$cont')");
if(!$qry)
die ("Error Query");

mysql_close($conn);
header("Location: http://localhost/ver.php?name=".urlencode($name));
}
else
die("No existe el archivo $tmp_name");

?>

Y si yo quisiera mostrar mas de una foto en la pagina en ver.php? Yo guardé mas de una foto y fabriqué el bucle con el while y el fetch_array_result() para que vaya mostrando registro por registro, pero solo se muestra el 1ero. :(
Y ademas, cuando en la pagina hay texto que lo muestro con el echo la foto se rompe graficamente hablando... como se soluciona eso?
Y por ultimo, si yo quisiera guardar un archivo word en vez de una foto, el codigo es el mismo?
MUCHAS GRACIAS!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:toy desesperado... guardar imagenes en base

Publicado por Ery (65 intervenciones) el 24/11/2006 16:15:26
Ok, fiajte que MySQL tiene un campo BLOB que son para guardar datos binarios, hay tambien puedes guardar los datos el BASE64 hace un archivo binario se guarde mas o menos 30% mas grande pero tiene una facilidad, todo lo que puedes atachar a un email lo puedes guardar por que los email usan base64 para los atach dentro del formalto eml. Una solucion muy facil es generar iframe dentro de tu pagina para que cada iframe carge la imagen que desee, no he trabajado con las librerias de manipulacion asi que hay no te puedo ayuda ya que no tengo ni la experiencia y por el momento el tiempo, y si en teoria deberias poder guardar cualquier archivo binario, te digo algo a mi en particular no me gusta almacenar binarios en la db, puede hacer que tu consultas sean muy lentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar