Buenas, estoy haciendo una pequeña web que carga unas imágenes en la bbdd y después las recupera, hasta ahí todo correcto, el problema viene cuando quiero insertar las imágenes, me he hecho un formulario con su php para cargar las imágenes a la bbdd pero después a la hora de mostrarlas no salen y si miro en phpMyAdmin si que aparecen, pero lo más curioso es que si inserto las imágenes desde phpMyAdmin si que las puedo leer bien desde la bbdd y mostrarlas bien, bueno en realidad de tres imágenes por fila solo muestra 2 bien pero eso será otro error diferente que habrá que corregir. Añado los scripts para que lo veáis y juzguéis.
Formulario html
<html>
<body>
<h2>Sistema de actualización</h2>
<form enctype="multipart/form-data" method="post" action="upload.php">
<p>Imagen Full (Grande 1000x750):<input type="file" name="full"></p>
<p>Imagen medium (Mediana 500x375):<input type="file" name="medium"></p>
<p>Imagen Small (Pequeña 100x75):<input type="file" name="small"></p>
<p>TITULO: <textarea name="titulo" rows="2" cols="50"></textarea></p>
<p>DESCRIPCIÓN: <textarea name="descripcion" rows="5" cols="50"></textarea></p>
<p><input type="submit" name="send" value="Enviar"></p>
</form>
</body>
</html>
Script que procesa el forulario
<?php
require_once 'bd.php';
function leer_fichero($name){
$fp = fopen ($name, 'r');
if ($fp){
$datos = fread ($fp, filesize ($name)); // cargo la imagen
$datos = addslashes($datos);
}
fclose($fp);
return $datos;
}
function insertar($imagen_full_bin, $imagen_medium_bin, $imagen_small_bin, $titulo, $descripcion){
$sql = "INSERT INTO archivos (id, img_full, img_medium, img_small, titulo, descripcion) VALUES ('', '$imagen_full_bin', '$imagen_medium_bin', '$imagen_small_bin', '$titulo', '$descripcion')";
mysql_query($sql) or die("No se pudo insertar los datos en la base de datos.");
}
// Comienza el script
$img_full = $_FILES['full']['tmp_name'];
$img_medium = $_FILES['medium']['tmp_name'];
$img_small = $_FILES['small']['tmp_name'];
$imagen_full_bin = leer_fichero($img_full);
$imagen_medium_bin = leer_fichero($img_medium);
$imagen_small_bin = leer_fichero($img_small);
$titulo = $_POST['titulo'];
$descripcion = $_POST['descripcion'];
insertar($imagen_full_bin, $imagen_medium_bin, $imagen_small_bin, $titulo, $descripcion);
header("Location: upload.html"); // si ha ido todo bien
?>
Script que muestra las imágenes
<?php
require_once 'bd.php';
$id = (isset($_GET['id']) ? $_GET['id'] : exit());
$tam = (isset($_GET['tam']) ? $_GET['tam'] : exit());
switch($tam){
case "full":
$sql = "SELECT img_full FROM archivos WHERE id = $id";
list($img)=mysql_fetch_row(mysql_query($sql));
header("Content-type: image/jpg");
echo $img;
break;
case "medium":
$sql = "SELECT img_medium FROM archivos WHERE id = $id";
list($img)=mysql_fetch_row(mysql_query($sql));
header("Content-type: image/jpg");
echo $img;
break;
case "small":
$sql = "SELECT img_small FROM archivos WHERE id = $id";
list($img)=mysql_fetch_row(mysql_query($sql));
header("Content-type: image/jpg");
echo $img;
break;
}
?>
Tabla de MySql
CREATE TABLE IF NOT EXISTS `archivos` (
`id` int NOT NULL auto_increment,
`img_full` longblob NOT NULL,
`img_medium` longblob NOT NULL,
`img_small` longblob NOT NULL,
`titulo` varchar(50) collate utf8_spanish_ci NOT NULL,
`descripcion` varchar(100) collate utf8_spanish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;