Introducir una imagen en un campo con My SQL

Hola a todos. Tengo una duda que debe ser muy fácil de resolver, porque después de "bucear" en las Faqs, articulos y manuales de DesarrolloWeb, no...

La FAQ Introducir una imagen en un campo con My SQL tiene

Pertenece a la categoría:
Pregunta
Hola a todos. Tengo una duda que debe ser muy fácil de resolver, porque después de "bucear" en las Faqs, articulos y manuales de DesarrolloWeb, no he encontrado nada en relación con mi duda.
Utilizo phpMyAdmin 2.7.0, y quiero almacenar en un campo de la base de datos una imagen y no se como hacerlo, empezando porque no sé el tipo de dato que le tengo que asignar al campo.
Gracias anticipadas por vuestra ayuda
Respuesta de Ita Salcedo
puedes hacerlo pero no te aconcejo porque ocupa demasiado espacio y es poniendo un campo tipo blob.

$imangen=imagecreatefromgif("iamge.gif");
ob_start();
@imagegif($imagen);
$jpg=ob_get_contents();
ob_end_clean();


algo asi.

O
puedes guardar el path de tu imagen utilizando para esto un campo tipo varchar(30) dependiendo de la path que tengas.
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

RP

02/2/2010
De acuerdo
Estoy de acuerdo con Ita, a menos que sea realmente necesario guardar la imagen en la base de datos lo mejor es guardar el path solamente, ocupa menos espacio y a la larga es más sencilla la manipulación..

jmmulford

02/2/2010
Cordial saludo
El la tabla incluya un campo varchar. En el guarda la dirección de la imagen. P.e. http://www.mipagina.com/imagenes/ejemplo.jpg y listo. Le envío una tabla de ejemplo. Espero haber pidido servirle. Mil gracias

DROP TABLE IF EXISTS `producto`;
CREATE TABLE `producto` (
`ID_producto` int(11) NOT NULL auto_increment,
`CodWeb` varchar(20) NOT NULL default '',
`producto` varchar(20) NOT NULL default '',
`categoria` varchar(20) NOT NULL default '',
`origen` varchar(20) NOT NULL default '',
`referencia` varchar(20) NOT NULL default '',
`marca` varchar(20) NOT NULL default '',
`imagen` varchar(20) NOT NULL default '',
`descripcion` varchar(100) NOT NULL default '',
`enlace` varchar(20) NOT NULL default '',
`valor` varchar(2) NOT NULL default '',
`disponible` varchar(2) NOT NULL default '',
`activo` varchar(2) NOT NULL default '',
`promocion` varchar(2) NOT NULL default '',
`fecha` datetime default NULL,
PRIMARY KEY (`ID_producto`),
UNIQUE KEY `ID_producto` (`ID_producto`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

lilithAensland

04/2/2010
Introducir una imagen en un campo con My SQL
Mas Explicacion AQUI: http://www.buayacorp.com/archivos/guardar-una-imagen-y-su-miniatura-a-un-campo-blob-de-mysql

Yo para escoger la Imagen uso un <INPUT type="file" name="foto" id="foto"> dentro de un FORM, no olvides que la etiqueta FORM debe contener este atributo enctype="multipart/form-data". y debe existir algun boton (llamado por ejempo enviar) para mandar el formulario.

llamale guardaImg.php
y puedes usar un require("guardaImg.php") ó include("guardaImg.php")
y luego invocas la funcion asi guardaImagen()

<?php
//INICIO FUNCION
function guardaImagen()
{

// Verificamos que el formulario no ha sido enviado aun
$postback = (isset($_POST["enviar"])) ? true : false;
if($postback){
// Nivel de errores
error_reporting(E_ALL);
// Constantes
# Altura de el thumbnail en píxeles
define("ALTURA", 100);
# Nombre del archivo temporal del thumbnail
define("NAMETHUMB", "/tmp/thumbtemp"); //Esto en servidores Linux, en Windows podría ser:
// define("NAMETHUMB", "c:/windows/temp/thumbtemp"); y te olvidas de los problemas de permisos
# Servidor de base de datos
define("DBHOST", "localhost");
# nombre de la base de datos
define("DBNAME", "test");
# Usuario de base de datos
define("DBUSER", "root");
# Password de base de datos
define("DBPASSWORD", "");
// Mime types permitidos
$mimetypes = array("image/jpeg", "image/pjpeg", "image/gif", "image/png");
// Variables de la foto
$name = $_FILES["foto"]["name"];
$type = $_FILES["foto"]["type"];
$tmp_name = $_FILES["foto"]["tmp_name"];
$size = $_FILES["foto"]["size"];
// Verificamos si el archivo es una imagen válida
if(!in_array($type, $mimetypes))
die("El archivo que subiste no es una imagen válida");
// Creando el thumbnail
switch($type) {
case $mimetypes[0]:
case $mimetypes[1]:
$img = imagecreatefromjpeg($tmp_name);
break;
case $mimetypes[2]:
$img = imagecreatefromgif($tmp_name);
break;
case $mimetypes[3]:
$img = imagecreatefrompng($tmp_name);
break;
}
$datos = getimagesize($tmp_name);
$ratio = ($datos[1]/ALTURA);
$ancho = round($datos[0]/$ratio);
$thumb = imagecreatetruecolor($ancho, ALTURA);
imagecopyresized($thumb, $img, 0, 0, 0, 0, $ancho, ALTURA, $datos[0], $datos[1]);
switch($type) {
case $mimetypes[0]:
case $mimetypes[1]:
imagejpeg($thumb, NAMETHUMB);
break;
case $mimetypes[2]:
imagegif($thumb, NAMETHUMB);
break;
case $mimetypes[3]:
imagepng($thumb, NAMETHUMB);
break;
}
// Extrae los contenidos de las fotos
# contenido de la foto original
$fp = fopen($tmp_name, "rb");
$tfoto = fread($fp, filesize($tmp_name));
$tfoto = addslashes($tfoto);
fclose($fp);
# contenido del thumbnail
$fp = fopen(NAMETHUMB, "rb");
$tthumb = fread($fp, filesize(NAMETHUMB));
$tthumb = addslashes($tthumb);
fclose($fp);
// Borra archivos temporales si es que existen
@unlink($tmp_name);
@unlink(NAMETHUMB);
// Guardamos todo en la base de datos
#nombre de la foto
$nombre = $_POST["nombre"];
$link = mysql_connect(DBHOST, DBUSER, DBPASSWORD) or die(mysql_error($link));;
mysql_select_db(DBNAME, $link) or die(mysql_error($link));
$sql = "INSERT INTO tabla(nombre, foto, thumb, mime)
VALUES
('$nombre', '$tfoto', '$tthumb', '$type')";
mysql_query($sql, $link) or die(mysql_error($link));
echo "Fotos guardadas";
exit();
}
}
//FIN FUNCION
?>

MadVeiN

02/3/2010
Subir imagenes
Lo mejor es lo que te han comentado, subir la imagen con el $_FILES y guardar en un campo al que llamaremos imagen el nombre de la imagen para llamarla por la ruta.

Te pongo una explicacion muy sencilla de como sería

Formulario:

<form action="procesar.php" method="post" enctype="multipart/form-data" name="Subir">
<input type="file" name="imagen_archivo">
<input type="submit" name="Submit" value="Enviar">
</form>

Y aquí pongo un código simple del procesar.php

<?

// conexion con BDD
// un include o lo que sea como conectas con la Base de Datos
include("conexion.php");

// recibimos el archivo y definimos el nombre a guardar en la BDD
$imagen_nombre = $_FILES['imagen_archivo']['name'];

//Defino la ruta para guardarlo
$uploaddir = 'imagenes'/'.$imagen_nombre;
//Aqui podrias cambiar imagenes por el nombre de la carpeta donde deseas guardarlo

//subimos la imagen
if (move_uploaded_file($_FILES['imagen_archivo']['tmp_name'], $uploaddir)){
echo "El archivo ha sido cargado correctamente.";
}else{
echo "Ocurrio un error al subir el fichero.";
}
//se pueden eliminar los condicionales pero si los dejamos comprobamos que se ha subido correctamente


//insertamos la info en la BDD
mysql_query("insert into tabla (imagen_nombre)
values('$imagen_nombre')",$connect) or die ( mysql_error());
echo('Entrada guardada en la base de datos.<br>');

//A mi personalmente en mi servidor se me guardan con los permisos denegados para que nadie lo pueda ver asi que le cambio el chmod a todas de forma automatica asi que te pongo tambien un script por si acaso

if ( $nombre_imagen != '' ) {
chmod($uploaddir, 0644);
}

//y asi terminamos el procesar.php

?>

Faltaría la página de resultados pero en la llamada normal a la base de datos pondrias <img src="imagen/'.$row[imagen_nombre].'"> y ya saldria. En este ejemplo he puesto la carpeta como imagen pero se llamaria como le hubieras puesto en el paso anterior...
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías