Foros del Web » Programando para Internet » PHP »

PHP 5.0 y MySQL 5.0 (Mostrar imagen de Blob)

Estas en el tema de PHP 5.0 y MySQL 5.0 (Mostrar imagen de Blob) en el foro de PHP en Foros del Web. Hola buenas tardes, Pues verán estoy intentando mostrar una imagen en una página, donde dicha imagen está metida en una base de datos MySQL. El ...
  #1 (permalink)  
Antiguo 27/08/2006, 08:29
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
PHP 5.0 y MySQL 5.0 (Mostrar imagen de Blob)

Hola buenas tardes,

Pues verán estoy intentando mostrar una imagen en una página, donde dicha imagen está metida en una base de datos MySQL. El cambpo de la BD, lógicamente es Blob, y la imagen la inserté através del phpMyAdmin.

Tengo PHP 5.0.4 y MySQL 5.0 también, y estoy corriendo sobre una máquina Windows. El Servidor es Apache 2.0.54. En principio creo que tengo el código bien, pero bueno, espero me puedan decir donde puedo estar equivocándome. El codigo es el siguiente:

Script donde hago toda la capa de lógica (mostrar_img.php):
Código:
<?
header ("Content-type: image/jpeg");
$cn = mysqli_connect("XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX");
$sqlimgfamilia=mysqli_query($cn, "select idnoticia from tnoticias where idnoticia=6");
	while ($row = mysqli_fetch_assoc($sqlimgfamilia)) {
     	echo $row['idnoticia'];
    }
?>


Script donde se ha de mostrar la imagen (prueba.php):
Código:
<img src="mostrar_img.php">


En fin, si alguien puede ayudarme, le agradecería que me comentasen que puedo tener mal y como podría solucionarlo. El tema es que a la hora de mostrarme la imagen, no me muestra nada. Como si no existiese la imagen, y en fin... yo creia que tenía todo bien, asi que si alguien puede decirme que tengo mal, se lo agradeceré.

Saludos.
__________________
Charlie.
  #2 (permalink)  
Antiguo 27/08/2006, 08:49
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
Ya está solucionado, jejeje, era una tontería, en el select, en vez de seleccionar idnoticia, debería haber peusto: imagen.

Y en el $row[] también, jejeje, disculpen las molestias.



Bueno, eso si me funciona, ok perfecto. Me habia equivocado en eso, pero esto era para hacer una prueba, por que tengo una página la cual realmente no me funciona.

Verán tengo una página que muestra noticias, texto y su imagen, ambas está en la BD. Para hacer todo el proceso de mostrar las imagenes y los textos, lo tengo separado en dos capas.

noticias.php (Pagina de presentacion)

capaNegocio/noticiasNegocio.php (Capa de Negocio)


En la capa de negocio tengo lo siguiente:
Código:
<?
header ("Content-type: image/jpeg");
include('configuracion/configuracion.php');
require('capaAccesoBD/accesoBD_5.php');

class noticiasNegocio
{
	private $objBD;
	private $_idnoticia;
	public $errorNegocio;
	
	function __construct($idnoticia){
		global $objBD;
		$this->_idnoticia = $idnoticia;
		try{
			$objBD = new accesoBD_5(SERVIDOR, USUARIO, CLAVE, BASEDATOS);	
		}catch (Exception $ex){
			die($ex);
		}
	}
	
	public function DameTitulo(){
		global $objBD;
		if(!$objBD->ConectarBD()){
			$this->errorNegocio = "Error Conexion: ".$objBD->errorBD;
			return false;
		}
		
		if (!$objBD->DevuelveSql($resultado, 'select titulo from tnoticias where idnoticia='.$this->_idnoticia)){
			die($objBD->errorBD);
		}

		if(!$objBD->CierraBD()){
			$this->errorNegocio = "Error Conexion: ".$objBD->errorBD;
			return false;
		}	
		
			foreach($resultado as $fila)
				echo nl2br( $fila['titulo'] );
	}

	public function DameDescripcion(){
		global $objBD;
		if(!$objBD->ConectarBD()){
			$this->errorNegocio = "Error Conexion: ".$objBD->errorBD;
			return false;
		}
		
		if (!$objBD->DevuelveSql($resultado, 'select descripcion from tnoticias where idnoticia='.$this->_idnoticia)){
			die($objBD->errorBD);
		}

		if(!$objBD->CierraBD()){
			$this->errorNegocio = "Error Conexion: ".$objBD->errorBD;
			return false;
		}	
		
			foreach($resultado as $fila)
				echo nl2br( $fila['descripcion'] );		
	}


	public function DameImagen(){
		global $objBD;
		if(!$objBD->ConectarBD()){
			$this->errorNegocio = "Error Conexion: ".$objBD->errorBD;
			return false;
		}
		
		if (!$objBD->DevuelveSql($resultado, 'select imagen from tnoticias where idnoticia='.$this->_idnoticia)){
			die($objBD->errorBD);
		}

		if(!$objBD->CierraBD()){
			$this->errorNegocio = "Error Conexion: ".$objBD->errorBD;
			return false;
		}	
		
			foreach($resultado as $fila)
				echo $fila['imagen'];
	}

}


En la página de presentacion, es decir, donde meustro todo, me muestra bien el texto de las noticias, pero .... la imagen me muestra uan cantidad de caracteres extraños y bueno, no sé por que puede ser, por que en realidad, está igual que en el ejemplo. Solo voy a poner lo qeu considiero más relevante:

Código:
<?
require('capaNegocio/noticiasNegocio.php');
$idnoticia = $_GET['idnoticia'];
$objNegocio = new noticiasNegocio($idnoticia);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>


.... mas cosas de html


            <td width="72%" height="196" bgcolor="#FFFFFF" class="textos"><span class="A_titulos"><? $objNegocio->DameTitulo();?> </span>              <p><strong><? $objNegocio->DameSubTitulo();?></strong></p>
              <p><? $objNegocio->DameDescripcion();?></p>
              </td>


            <td width="28%"><img src="<? $objNegocio->DameImagen();?>" />;</td>


El problema está, que a la hora de mostrarme la imagen, me muestra caracteres extraños en vez de la imagen, y bueno... no sé por que puede ser, en fin, si alguien puede ayudarme, se lo agradecería.

Saludos y espero puedan ver donde tengo el fallo. Gracias.
__________________
Charlie.

Última edición por chcma; 27/08/2006 a las 09:27
  #3 (permalink)  
Antiguo 28/08/2006, 08:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El scritp que procesa y genera tu imagen debe ser llamado en un script (archivo) idenpendiente.

No sé como funciona tu objeto ..

Por qué hace el método "DameImagen" un bucle? .. debería arrojar -sólo- un resultado (no varios) ..

Si ese método arroja sólo un registro de "imagen" .. sería algo así:

genera_imagen.php
Código PHP:
<?
instancia a tu objeto 
... etc ...

// Componer cabeceras HTTP para indicar que vas a enviar un archivo de imagen.
// Hace falta conocer el formato MIME de tus datos de Imagen: image/jpeg? image/png? .. el que corresponda.

header(....);

// Entregar al buffer de salida el resultado (como tu método hace un echo .. con esto sobraría).
$objNegocio->DameImagen();
?>
Las cabceras HTTP adecuadas las puedes ver en:
www.php.net/header
(Necesitas de "content-type" mínimo ...)

Ahí tendrás que ver tu como manejas tu objeto .. pero es necesario que funcien en procesos -separados- para generar una imagen. Según el protocolo HTTP (que manejas con HTML) no puedes mezclar tipos de datos si no se "informa" cuales envias ... por esos se usan un "par de scripts" y en el que genera la imagen se componen las cabeceras HTTP adecuadas y se llama por un tag de imagen "img .." en HTML donde lo necesites.

Código PHP:
<img src="genera_imagen.php" /> 
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 28/08/2006, 10:48
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.427
Antigüedad: 14 años, 6 meses
Puntos: 7
Si amigo, efectivamente con un archivo independiente me funciona a la perfección, pero quería que fuera através del metodo ese, para tenerlo todo ordenador y no tener un archivo: mostrar_imagen.php independiente.

El bucle es por que tal y como tengo la clase de acceso a datos, almaceno en $resultado todos los registros posibles, en algunos casos es 1 y en otros varios. El bucle está, pero solo pasa por ahí una vez.

Pensé en hacer:
Código:
foreach($resultado as $fila){
        header ("Content-type: image/jpeg");
        echo $fila['imagen'];
}
Pero tampoco me funciona, ¿No hay ninguna forma de hacer lo de las imágenes sin necesidad de que sea en un archivo independiente?

En fin, si no la hay pues nada... y si la hay, les agradecería mucho que me ayudasen.

Saludos.
__________________
Charlie.
  #5 (permalink)  
Antiguo 28/08/2006, 11:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Pero tampoco me funciona, ¿No hay ninguna forma de hacer lo de las imágenes sin necesidad de que sea en un archivo independiente?
No, .. por qué se trata de que tienes que enviar "cabeceras" HTTP .. No sé como eso lo puedes manejar en POO (podrías consultar en el foro de POO)

Esto no es correcto:
Código PHP:
foreach($resultado as $fila){
        
header ("Content-type: image/jpeg");
        echo 
$fila['imagen'];

Sólo una cabecera por archivo (datos) a enviar.

Crea un método que sea "especial" para tus imagenes .. que extraiga 1 por 1 los datos de las N imagenes que puedas tener.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 15:32.