Foros del Web » Programando para Internet » PHP »

Imagenes + BD + Binario

Estas en el tema de Imagenes + BD + Binario en el foro de PHP en Foros del Web. Hola: Estuve siguiendo paso a paso las cosas que dice el tutorial de como subir las imagenes a una BDatos en binario. A la hora ...
  #1 (permalink)  
Antiguo 05/10/2004, 12:32
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Imagenes + BD + Binario

Hola:
Estuve siguiendo paso a paso las cosas que dice el tutorial de como subir las imagenes a una BDatos en binario. A la hora de subirlas todo bien. Pero a la hora de mostrarlas, tengo problemas. No es que el script me de errores, pero la ejecucion del mismo se me hace infinita, por asi decirlo, pues no me muestra la imagen ni nada y el explorador se me cuelga que hasta la PC se me bloquea. No se porque razon pasa esto pues estuve leyendo todos los POST de ese mensaje y a muchas personas le funciona correctamente. Por si sirve de algo uso WinXP, IIS y PHP 4.3.6 con soporte GD2.

Ahora ese mismo codigo he intentado modificarlo para adaptarlo a los requerimientos de mi sitio. La cosa es que estoy realizando un Portal para los JClub. La direccion del mismos es http://www.jcce.granma.inf.cu y quiero implementarle un sistema de noticias. Ya lo habia hecho usando ficheros y haciendo upload de los mismos al servidor pero por razones de seguridad mi hosting me ha pedido que haga el campo imagenes de la BDatos y mayor facilidad a la hora de borrarlas.

Este es el codigo con el cual inserto las imagenes a la BDatos:
Código PHP:
if($_FILES['imagen']['name'] != ""){
 
$imagenbintmpname $_FILES['imagen']['tmp_name'] ;
 
$imagenbin addslashes(fread(fopen($imagenbintmpname"rb"),filesize($imagenbintmpname)));
}else{
 
$imagenbin "";
}
 
$query "INSERT INTO jcgrm_noticias(idcat,titulo,resumen,ampliacion,imagen,autor,celectronico,referencia,fecha_publicacion,importancia,activa)";
 
$query.= " VALUES('".$_POST['categoria']."','".$_POST['titulo']."','".$_POST['resumen']."','".$_POST['ampliacion']."','".$imagenbin."','".$_SESSION['username']."','".$_SESSION['usermail']."','".$_POST['referencia']."',NOW(),'".$_POST['importancia']."','".$_POST['activa']."')";
 
$result mysql_query($query) or die(mysql_error()); 
ahora para mostrarlas he creado esta pequeña funcion:
Código PHP:
function GetMostImportantNew($sid){
 
$query "SELECT *,DAYOFMONTH(fecha_publicacion) as dia, DAYOFWEEK(fecha_publicacion) as semana, MONTH(fecha_publicacion) as mes, YEAR(fecha_publicacion) as year, DATE_FORMAT(fecha_publicacion,'%h:%i %p') as hora FROM jcgrm_noticias WHERE (importancia >= 7) AND (activa<>0) ORDER BY RAND()";
  
$result mysql_query($query) or die("No se ha podido ejecutar la consulta $query. MySQL ha dicho: ".mysql_error());
  
$fetch  mysql_fetch_assoc($result);
  
$imagen mysql_result($result,0,"imagen");
  
$meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  
$diassemana = array("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");
  if(
mysql_num_rows($result)!= ){
  ....
   if(
$fetch['imagen']==""){
    echo 
"<td colspan='2' class='font padding bold'>".$fetch['titulo']."</td>";
   }else{
    echo 
"<td width='19%' rowspan='5' align='center' valign='top'><img src='thumbnails.php?dir=not&imagen=".$fetch['imagen']."' alt='".$fetch['titulo']."' class='cursor'></td>";
    echo 
"<td width='81%' colspan='2' class='font padding bold'>".$fetch['titulo']."</td>";
   }
   echo 
"</tr>";
   ...
  }
 } 
no he puesto todo el codigo para no cansarlos leyendo. Bueno no se si enteniendan lo que quiero hacer pero si alquien lo ha hecho ya que me ayude porque en realidad es algo que me falta y no logro terminar porque no puedo mostrar las imagenes.

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 05/10/2004, 13:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Se ha de suponer que tu imagen sube bien a tu BD? .. lo has comprobado con tu administrador de Mysql (phpMyadmin o similar)?

Supongo que esto será un error al trasncribir el código al foro:
query = "INSERT INTO jcgrm_noticias(idcat,titulo,resumen,ampliacion,ima gen,autor,celectronico,referencia,fecha_publicacio n,importancia,activa)";

Ojo con nombres de campos con espacios ...

Por lo demás .. falta el código de:
thumbnails.php

Por qué (por mi parte) ya te comenté en otra ocasión que no puedes pasarle a tu script de "thumbnails.php" el archivo de imagen binario entero. DEBES! pasarle una referencia .. ejemplo tu id_noticia o referencia "única" de ese registro para que en thumbnails.php puedas hacer una consulta SQL!!! otra vez a esa tabla para obtener -únicamente- ese campo "imagen" y aplicar el resto de funciones de GD y cabeceras HTTP necesarias para componer y entregar la imagen al cliente (navegador) bajo el tag de imagen que usas en otra página que lo llamas. (y todo esto por qué haces una relación 1-1 (una noticia -> 1 imagen máximo .. podrías tener una tabla de imagenes sólo relacionada con las noticias .. así tendrías 1 noticia -> N imagenes .. con un sistema más versatil ..).

Esto NO:
Código PHP:
<img src='thumbnails.php?dir=not&imagen=".$fetch['imagen']."' alt='".$fetch['titulo']."' class='cursor'
Algo "correcto" sería:
Código PHP:
<img src='thumbnails.php?dir=not&id_noticia=".$fetch['id_noticia']."' alt='".$fetch['titulo']."' class='cursor'
Para que en thumbnails.php .. hagas un

SELECT imagen FROM jcgrm_noticias WHERE id_noticia = $_GET['id_noticia']
y resto de código ...

Un saludo,
  #3 (permalink)  
Antiguo 05/10/2004, 15:07
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues ahora mas o menos

Mas o menos ya he resuelto el problema. Ahora lo que pasa es que no me sale la imagen, o sea me sale el tipico cuadrado con la X. Ya he comprobado en mi BDatos y la imagen esta correctamente en el campo de tipo BLOB.

Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 05/10/2004, 15:22
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues nada

Ya he arreglado el problema anterior que planteo. Ahora lo que me pasa es que no se como mostrar la imagen en tamaño real. Lo he probado con este codigo pero lo que me sale es el cuadro pero en negro y no con la imagen:
Código PHP:
   header ("Content-type: image/jpeg");
   
$img imagecreatefromstring($row['imagen']);
   
$dst_img imagecreatetruecolor(imagesx($img),imagesy($img));
   
imagejpeg($dst_img,'',100);
   
imagedestroy($dst_img); 
Salu2
__________________
Ing. Reynier Pérez Mira
  #5 (permalink)  
Antiguo 05/10/2004, 16:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. Reynier

De donde llega $row['imagen'] en ese último código que pusistes? (pon los códigos completos .. las cosas fuera de contexto no se puede apreciar bien de donde vienen las cosas!!)

Por lo demás .. para ver la imagen a tamaño real si en tu campo de $row['imagen'] guardas el "binario" de esta .. tan sólo se trata de hacer un echo $row['imagen'] previo envio de las cabeceras HTTP que ya usas (content-type ...) (Insisto que todo esto lo tienes en los ejemplos del tutorial que ya has visto!!).

Un saludo,
  #6 (permalink)  
Antiguo 05/10/2004, 16:53
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pues eso viene de aqui

Pues eso viene de la consulta previa que ejecuto antes de crear el thumbnail de la imagen. Esto lo tome como ejemplo del mensaje donde me explicaste que es imposible pasar por URL el campo $row['imagen'], el mismo viene de aqui:
Código PHP:
$query "SELECT imagen FROM jcgrm_noticias WHERE idnoticia=".$_GET['noticia']."";
$result mysql_query($query) or die(mysql_error());
$row mysql_fetch_assoc($result); 
Por otra parte como hago el echo ese que me indicas en la cabecera HTTP.

Salu2
__________________
Ing. Reynier Pérez Mira
  #7 (permalink)  
Antiguo 05/10/2004, 21:36
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Ya resolvi

Cluster gracias por hacer que me volviera a leer el tutorial. Es cierto que ahi esta lo que buscaba y solo con dos lineas de codigo puede resolver mi problema. Pronto volvere a molestarte porque ahora debo crear un buscador que busque en todas las tablas de mi BDatos que son como 15 y no se ni por donde comenzar. Cuando lo vaya a hacer abro un tema nuevo.

Salu2
__________________
Ing. Reynier Pérez Mira
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 16:08.