Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/07/2008, 01:57
Takehiko
 
Fecha de Ingreso: julio-2008
Mensajes: 27
Antigüedad: 15 años, 9 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!