Les comento a ver si pueden ayudarme.
Por un lado, subo imagenes a la BDD de la siguiente forma:
Código:
<?php
//conexion a la base de datos
include("acceso.php");
// Nos conectamos a phpmyadmin
$conectar = mysql_connect($dbhost, $dbuser, $dbpasswd);
// Comprobamos que nos pudieramos conectar a phpmyadmin
if (!$conectar) {
die('No se pudo conectar a la base: ' . mysql_error());
}
mysql_select_db($dbname) or die(mysql_error()) ;
//comprobamos si ha ocurrido un error.
if ( !isset($_FILES["imagen"]) || $_FILES["imagen"]["error"] > 0){
echo "ha ocurrido un error";
} else {
//ahora vamos a verificar si el tipo de archivo es un tipo de imagen permitido.
//y que el tamano del archivo no exceda los 16MB
$permitidos = array("image/jpg", "image/jpeg", "image/gif", "image/png");
$limite_kb = 16384;
if (in_array($_FILES['imagen']['type'], $permitidos) && $_FILES['imagen']['size'] <= $limite_kb * 1024){
//este es el archivo temporal
$imagen_temporal = $_FILES['imagen']['tmp_name'];
//este es el tipo de archivo
$tipo = $_FILES['imagen']['type'];
//leer el archivo temporal en binario
$fp = fopen($imagen_temporal, 'r+b');
$data = fread($fp, filesize($imagen_temporal));
fclose($fp);
$resultado = @mysql_query("INSERT INTO Usuarios (Imagen, Tipo_imagen) VALUES ('$data', '$tipo')") ;
if ($resultado){
echo "el archivo ha sido copiado exitosamente";
} else {
echo "ocurrio un error al copiar el archivo.";
}
} else {
echo "archivo no permitido, es tipo de archivo prohibido o excede el tamano de $limite_kb Kilobytes";
}
}
?>
Bien, se guarda la imagen en un campo BLOB y el type de la imagen en un campo VARCHAR.
Todo eso correcto.
Pero mi problema viene al intentar mostrar la imagen en una pagina con contenido.
Es decir, puedo usar este codigo para ver la imagen en una pagina nueva, y se ve la imagen sola, asi que la subida funciona:
Código:
<?php
mysql_select_db($dbname);
$sql= "SELECT Imagen, Tipo_imagen FROM Usuarios";
$result= mysql_query($sql, $conectar);
$row= mysql_fetch_assoc($result);
//ahora colocamos la cabeceras correcta segun el tipo de imagen
header("Content-type: ".$row['Tipo_imagen']."");
echo ($row['Imagen']);
?>
Pero por ejemplo no podria poner ese codigo aqui:
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<body>
<?php
mysql_select_db($dbname);
$sql= "SELECT Imagen, Tipo_imagen FROM Usuarios";
$result= mysql_query($sql, $conectar);
$row= mysql_fetch_assoc($result);
//ahora colocamos la cabeceras correcta segun el tipo de imagen
header("Content-type: ".$row['Tipo_imagen']."");
echo ($row['Imagen']);
?>
</body>
</html>
(Se que faltan datos para la conexion, solo son ejemplos).
Si intento hacer eso, me da error por no poder modificar el Content-type de la pagina que incluye el codigo php...
Entonces como hago para mostrar la imagen??
Porque necesito poder cargar el type de la imagen de alguna forma para que lea la informacion del campo BLOB.
Y por otro lado, alguna idea de como modificar el nombre de la imagen al subirla respetando la extension del archivo?
Quisiera que la imagen tomara el nombre del usuario que la sube ($_COOKIE['Usuario'])
Pero con lo que hago, la renombro pero sin extension...
Gracias por su atencion y ayuda.
Un saludo.