Foros del Web » Programando para Internet » PHP »

Problemas PHP! ¿Base de datos con imágenes?

Estas en el tema de Problemas PHP! ¿Base de datos con imágenes? en el foro de PHP en Foros del Web. Buenas, primer mensaje en este foro y con problemas, haber si alguien me puede ayudar... Estoy haciendo una Web para una inmobiliaria, con una base ...
  #1 (permalink)  
Antiguo 31/07/2008, 01:57
 
Fecha de Ingreso: julio-2008
Mensajes: 27
Antigüedad: 15 años, 8 meses
Puntos: 0
Problemas PHP! ¿Base de datos con imágenes?

Buenas, primer mensaje en este foro y con problemas, haber si alguien me puede ayudar... Estoy haciendo una Web para una inmobiliaria, con una base de datos con texto y imágenes la cosa, es que tengo ya funcionando la subida de datos mediante un formulario con imágenes en blob. Pero el problema viene al hacer la búsqueda mediante unos formularios en esa base de datos. para cuando el usuario entre en la Web, seleccione lo que esta buscando y le salga el resultado junto con la imagen. Ya que por una parte el resultado de texto sale, pero la imagen no se como ponerla.. movidas... bueno ahí voy
El codigo que he usado para esto, es el siguiente

Por una parte el html para subir los datos junto a la imagen a la base de datos

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>
<title>Imagen a Blob</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form name="frmimage" id="frmimage" method="post"
	enctype="multipart/form-data" action="junto.php">
	<p>Datos</p>
	<p>Seleccione marca:
      <select name ="marca">
        <option value="seat">Seat</option>
        <option value="audi">Audi</option>
            </select>
          </p>
	<p>Indica color:
      <select name ="color">
        <option value="rojo">rojo</option>
        <option value="verde">verde</option>
      </select>
    </p>
	<p>
	Nombre: 
	  <input type="text" id="nombre" name="nombre" />
	  <br />
	Imagen: 
	<input type="file" id="foto" name="foto" />
	<br />
	<input type="submit" name="enviar" id="enviar" value="Guardar" />
        </p>
</form>
</body>
Y por otro lado el php para subir los datos junto a la imagen a la base de datos

Código:
<?php
$marca = $_POST['marca']; 
$color = $_POST['color'];
// 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", "nombre");
  # Usuario de base de datos
  define("DBUSER", "user");
  # Password de base de datos
  define("DBPASSWORD", "password");
  // 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 coches(marca, color, nombre, foto, thumb, mime )
    VALUES
    ('$marca', '$color', '$nombre', '$tfoto', '$tthumb', '$type' )";
  mysql_query($sql, $link) or die(mysql_error($link));
  echo "Datos Guardados";
  exit();
}
?>
Bueno, esto añade a mi base de datos 6 campos entre ellos, una imagen en blob, dentro de la base de datos.
Hasta aquí todo bien (no hacer caso de los datos de las tablas ya que estoy de pruebas).

Y ahora viene el problema

Antes tenia el siguiente código, para buscar los campos de texto.

El html

Código:
<head>
<title>Base de datos consulta</title>
<head>
<body bgcolor = "#303030">
<body text ="#E5E5E5">
<font face ="tahoma">
<font size = "2">
<body link = "#E5E5E5" vlink="E0E0E0">
<p aling ="center">
<form name="form" action= "buscacoches.php"
method="post">
<strong>
<h2>
FORMULARIO PARA BUSQUEDA
</h2>
</strong>
<hr size = "8" color ="ffffff" width ="100%" aling ="left">
<h5>Seleccione la marca de su vehiculo:
<select name="marca">
<option value="seat">Seat</option>
<option value="audi">Audi</option>
</select>
</h5>
<h5>Seleccione color:
<select name="color">
<option value="rojo">Rojo</option>
<option value="amarillo">Amarillo </option>
<option value="verde">verde</option>
<option value="azul">Azul </option>
<option value="negro">Negro </option>
<option value="blanco">Blanco </option>
<option value="gris">Gris </option>
</select>
</h5>
<input name="Enviar" type="submit" value="Enviar">
</h5>
</form>
y el php

Código:
<head>
<title>Base de datos consulta</title>
<head>
<body bgcolor = "#303030">
<body text ="#E5E5E5">
<font face ="tahoma">
<font size = "2">
<body link = "#E5E5E5" vlink="E0E0E0">
<p aling ="center">
<h2>
RESULTADO DE LA BUSQUEDA
</h2>
<?
$marca = $_POST['marca']; 
$color = $_POST['color'];
$host="localhost";
$user="usuario";
$password="password";
$db="datos";
$link = mysql_connect($host,$user,$password);
mysql_select_db($db,$link);
$consulta = mysql_query("SELECT * FROM coches WHERE marca LIKE '$marca' or color LIKE '$color' ",$link);
while ($row=mysql_fetch_array($consulta))
{
$id=$row["id"];
$marca=$row["marca"];
$color=$row["color"];
echo ("<table	width='100%'	border='0'	cellspacing='0'
cellpadding='0'>\n");
echo ("<td>\n");
echo ("<td width='12%'><a href=coches.php?id=$id>
Modificar</a></td>\n");
echo("<td  width='12%'><a href=borracoche.php?id=$id>
Borrar</a></td>\n");
echo ("<td width=26%'><a href=coches.php?id=$id>$marca</a></td>\n");
echo ("<td width=26%'>$color</a></td>\n");
echo ("<td width=26%'>$id</a></td>\n");
echo("</tr>\n");
echo("</table>\n");
echo "<hr size = 2 color =ffffff width = 100% aling = left>"; }
?>
<a href="http://web">Volver
Pero al código primero que le he añadido el trozo de código para guardar las imágenes en blob, no tengo ni idea de donde poner el trozo de código para que usando la búsqueda me muestre la imagen..

Aquí aparte pongo el código para mostrar las imágenes en blob, (imágenes dentro de la base de datos)

El php

Código:
/ Nivel de errores
	error_reporting(E_ALL);

	// Constantes
	# Servidor de base de datos
	define("DBHOST", "localhost");
	# nombre de la base de datos
	define("DBNAME", "basedatos"
	# Usuario de base de datos
	define("DBUSER", "usuario);
	# Password de base de datos
	define("DBPASSWORD", "password");
	
	// Parámetros para recuperar la imagen
	# Recuperamos el parámetro GET con el id único de la foto que queremos mostrar
	$idfoto = (isset($_GET["idfoto"])) ? $_GET["idfoto"] : exit();
	# Recuperamos el parámetro GET para elegir entre la miniatura o la foto real
	$tam = (isset($_GET["tam"])) ? $_GET["tam"] : 1;
	
	// Escojemos la foto real o la miniatura según la variable $tam
	switch($tam) {
		case "1":
			$campo = "foto";break;;
		case "2":
			$campo = "thumb";break;;
		default:
			$campo = "foto";break;;
	}
	
	// Recuperamos la foto de la tabla
	$sql = "SELECT $campo, mime
			FROM tabla 
			WHERE idfoto = $idfoto";
			
	# Conexión a la base de datos
	$link = mysql_connect(DBHOST, DBUSER, DBPASSWORD) or die(mysql_error($link));;
	mysql_select_db(DBNAME, $link) or die(mysql_error($link));
	
	$conn = mysql_query($sql, $link) or die(mysql_error($link));
	$datos = mysql_fetch_array($conn);
	
	// La imagen
	$imagen = $datos[0];
	// El mime type de la imagen
	$mime = $datos[1];
	
	// Gracias a esta cabecera, podemos ver la imagen 
	// que acabamos de recuperar del campo blob
	header("Content-Type: $mime");
	// Muestra la imagen
	echo $imagen;	
?>
y aquí el html que te muestra la imagen

Código:
<img src="verblob.php?idfoto=2&tam=1" alt="Imagen desde Blob" />

Con este ultimo ejemplo es mostrar la imagen de la base de datos, yo lo que busco es hacer la base de datos donde cuando hagas la búsqueda te salgan los datos junto con la imagen.

A mi me funciona, por un lado busca los datos, y por otro la imagen pero la gente no busca la imagen, busca los datos y luego al lado de ese dato sale la imagen...

Joder movida...

Y con mi poca experiencia en php vamos bien servidos

Un Saludo!
  #2 (permalink)  
Antiguo 31/07/2008, 01:58
 
Fecha de Ingreso: julio-2008
Mensajes: 27
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problemas PHP! ¿Base de datos con imágenes?

Perdón por el tochaco ... si hay alguna manera más fácil de hacer esto.. es que no la he encontrado, subir los datos a la base de con imágenes mediante un formulario y luego que la gente pueda buscar con otro formulario los datos de esa base de datos y que los datos lleven su imagen...
  #3 (permalink)  
Antiguo 31/07/2008, 04:31
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Problemas PHP! ¿Base de datos con imágenes?

Bienvenid@ al foro Takehiko!

Como alternativa...
Es imperativo que utilices la imagen en blob?... o puedes subirla a una carpeta en el servidor?

Si es asi, pasa por aca: http://www.forosdelweb.com/f18/tutor...inario-127775/

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #4 (permalink)  
Antiguo 31/07/2008, 05:28
Avatar de imagen021  
Fecha de Ingreso: julio-2008
Ubicación: A Coruña
Mensajes: 74
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Problemas PHP! ¿Base de datos con imágenes?

Guardar tus archivos en campos BLOB es lo peor que puedes hacer... si juntas muchas fotos, tu base de datos se hará muy pesada y difícil de transportar.

Usa el ejemplode Marvin que va por ahi...

Saludos!!
  #5 (permalink)  
Antiguo 31/07/2008, 09:15
 
Fecha de Ingreso: julio-2008
Mensajes: 27
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Problemas PHP! ¿Base de datos con imágenes?

Muchas Gracias, voy a probar a ver que tal y comento. . Haber si lo hago funcionar, no sabia yo lo de cargar la base de datos con blob empeoraba el funcionamiento de la misma .
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 07:45.