Foros del Web » Programando para Internet » PHP »

Recoger imagen de dos tablas distintas

Estas en el tema de Recoger imagen de dos tablas distintas en el foro de PHP en Foros del Web. Hola, tengo una base de datos con varias tablas y en uno de los archivos hago una consulta a dos de ellas, $sql = "SELECT ...
  #1 (permalink)  
Antiguo 18/11/2004, 12:01
 
Fecha de Ingreso: marzo-2004
Mensajes: 50
Antigüedad: 20 años, 1 mes
Puntos: 0
Pregunta Recoger imagen de dos tablas distintas

Hola,
tengo una base de datos con varias tablas y en uno de los archivos hago una consulta a dos de ellas,
$sql = "SELECT id, campo1,campo2,campo3,campo4, insertarFoto FROM Otras where ciudad='".$_POST["ciudad"]." ' ";


$consulta = mysql_query($sql, $conexBD) or die ("No se pudo ejecutar la consulta" .mysql_error());

$sql2 = "SELECT id, campo1,campo2,campo3,campo4, insertarFoto FROM Particulares where ciudad='".$_POST["ciudad"]." ' ";

$consulta2 = mysql_query($sql2, $conexBD) or die ("No se pudo ejecutar la consulta" .mysql_error());
echo "<html>"
echo "CODIGO HTML"
.....

While ($registro=mysql_fetch_assoc($consulta) or $registro=mysql_fetch_assoc($consulta2)){

echo "<td>&nbsp;</td>";
echo "<td align='center'>";
echo $registro['ciudad'];
echo "</td>";
echo "<td align='center'>";
echo $registro['provincia];
echo "</td>";
echo "<tr><td align='center' width='125' height='81'>";
echo "CODIGO HTML"




Hasta aquí funciona bien, me muestra los registros de ambas tablas, hasta el momento de mostrar las fotos, si pongo esta linea:

echo "<img src=\"http://localhost/ver.php?id=".$registro['id']."\">" ;
me muestra la foto que corresponde al registro de la primera tabla, pero necesito que "img src=" vaya a "ver.php" , que es el archivo que crea los thumbnails de las imagenes de la primera tabla, pero también a "verParticulares.php", o sea "<img src=\"http://localhost/verParticulares.php?id=".$registro['id']."\">" , que hace lo mismo con las imagenes de la segunda tabla, y ninguno de los intentos que he hecho me han funcionado.
A ver si alguien me puede dar una idea.
  #2 (permalink)  
Antiguo 18/11/2004, 13:53
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
HOla,

Una etiqueta <img> solo puede mostrar una imagen. Si quieres mostrar mas imagenes, debes añadir un <img> para cada una de ellas, llamando al script correspondiente con el parametro correspondiente.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 18/11/2004, 14:25
 
Fecha de Ingreso: julio-2003
Ubicación: Queretaro Qro.
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 1
Solo un poco de logica

Hola

Tal ves solo falte razonarlo un poco....

Tienes esto

Código PHP:
// :: Primera consulta :: tabla -> Otras ::

$sql "SELECT id, campo1,campo2,campo3,campo4, insertarFoto FROM Otras where ciudad='".$_POST["ciudad"]." ' ";

$consulta mysql_query($sql$conexBD) or die ("No se pudo ejecutar la consulta" .mysql_error());

// :: Segunda consulta ::  tabla -> Particulares ::

$sql2 "SELECT id, campo1,campo2,campo3,campo4, insertarFoto FROM Particulares where ciudad='".$_POST["ciudad"]." ' ";

$consulta2 mysql_query($sql2$conexBD) or die ("No se pudo ejecutar la consulta" .mysql_error()); 
Y funciona, no se si al traer los datos sea de forma separada y/o anidada, de cualquier forma esto lo tienes resuelto, el asunto es cuando tienes que visaualizar tus imagenes.

Creo que es ovio que tienes dos tablas distintas y que estas obteniendo de forma separada la informacion de cada una de ellas y tendras que realizar dos formas diferentes de mostrarlas, espero y me este dando a entender...

Tu tienes un ver.php del cual supongo que obtienes las imegenes y las visualizas. Esto es lo que pones para hacer eso:

echo "<img src=\"http://localhost/ver.php?id=".$registro['id']."\">" ;

Bueno creo que solo tienes que tener encuenta QUE SON DOS tablas diferentes: "Otra" y "Particulares" es ovio no... si tu ver.php solo esta diseñado para tratar las imagenes de una tendras que hacer la de la otra por separado, asi quendas que hacer un verOtra.php y verParticulares.php ya que son dos cosas diferentes ::

Para visualizar la(s) imagene(s) de la tabla Otras::
Código PHP:
  echo "<img src=\"http://localhost/verOtras.php?id=".$registroOtra['id']."\">" 
Para visualizar la(s) imagene(s) de la tabla Particulares::
Código PHP:
  echo "<img src=\"http://localhost/verParticulares.php?id=".$registroParticulares['id']."\">" 
Se me ocurre que tu verOtra.php podria tener esto para visualizar las imagenes ::

Código PHP:
...
// 
  
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass")
    or die(
"No se pudo conectar a la Base de datos")
    or die(
mysql_error());

// Se selecciona la DB con la que se trabajara, si no existe se manda un mensaje de error
  
mysql_select_db("$sql_db")
    or die(
mysql_error());
//                                                             CHECA LA TABLA SE LLAMA "Otra"
$qry "SELECT loscampos_que_necesita_para_obtener_la_imagen FROM Otra WHERE id_imagen=$id";

// yo requiero de estos tres campos :: tipo, contenido y nombre :: y tu ::
$res mysql_query($qry);
$tipo mysql_result($res0"tipo");
$contenido mysql_result($res0"contenido");
$nombre mysql_result($res0"nombre");

header("Content-type: $tipo");
header("Content-Disposition: ; filename=\"$nombre\""); 
print 
$contenido
.... 
Y tu verParticulares.php esto, si ves es casi lo mismo solo que obtienes la imagen de la tabla Particulares.

Código PHP:
...
// Conecion a la DB en caso de no lograrlo se manda un mensaje de error, junto con su tipo de error
  
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass")
    or die(
"No se pudo conectar a la Base de datos")
    or die(
mysql_error());

// Se selecciona la DB con la que se trabajara, si no existe se manda un mensaje de error
  
mysql_select_db("$sql_db")
    or die(
mysql_error());
//                                                             CHECA LA TABLA SE LLAMA "Particulares"
$qry "SELECT los_campos_que_necesita_para_obtener_la_imagen FROM Particulares WHERE id_imagen=$id";

// yo requiero de estos tres campos :: tipo, contenido y nombre :: y tu ::
$res mysql_query($qry);
$tipo mysql_result($res0"tipo");
$contenido mysql_result($res0"contenido");
$nombre mysql_result($res0"nombre");

header("Content-type: $tipo");
header("Content-Disposition: ; filename=\"$nombre\""); 
print 
$contenido
... 
Como ves tienes que hacerlo separadamente la visualización ya que son dos consultas diferentes y diferentes tablas, espero y te sirva, si tienes dudas ya veremos que mas podriamos hacer
__________________
Kike Lee
Paz && Bien
  #4 (permalink)  
Antiguo 19/11/2004, 03:28
 
Fecha de Ingreso: marzo-2004
Mensajes: 50
Antigüedad: 20 años, 1 mes
Puntos: 0
hi,
el problema es que al poner esto:
echo "<img src=\"http://localhost/ver.php?id=".$registro['id']."\">" ;
echo "<img src=\"http://localhost/ver.php?id=".$registro['id']."\">" ;
en el <td> me aparece la imagen que corresponde , hasta ahí bien, pero al tener dos "img" tambien se imprime el espacio que correspondería al otro "img".
  #5 (permalink)  
Antiguo 19/11/2004, 05:15
 
Fecha de Ingreso: marzo-2004
Mensajes: 50
Antigüedad: 20 años, 1 mes
Puntos: 0
hola KikeLee,
no entiendo muy bien a que te refieres con hacerlo separadamente, si te refieres a poner un "img" para cada imagen, como he dicho más arriba funciona, pero sale, además de la imagen que corresponde, el espacio en blanco de la otra imagen.
He intentado añadir a "ver.php",que es el archivo que crea los thumbnails, el archivo verParticulares.php, que es prácticamente igual pero realiza la consulta a otra tabla, y o sea primero hago una consulta a la tabla 1 y creo el thumbnail y luego sigo con la siguiente consulta a la tabla 2 y creo el correspondiente thumbnail, el resultado es que únicamente saca la imagen de la tabla 1, es decir, hace la primera consulta , e imprime la imagen pero no sigue leyendo la segunda consulta.
No se si lo he explicado bien...
También he intentado consultar a las dos tablas a la vez pero en esta caso no me sale nada, no se si hay algún error de sintaxis:

$sql = "SELECT Otras.insertarFoto, Particulares.insertarFoto FROM Otras INNER JOIN Particulares WHERE Otras.insertarFoto=Particulares.insertarFoto And id=' ".$_GET['id']. " ' ";

Última edición por vanax; 19/11/2004 a las 06:36 Razón: Ampliar la pregunta
  #6 (permalink)  
Antiguo 22/11/2004, 15:04
 
Fecha de Ingreso: julio-2003
Ubicación: Queretaro Qro.
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 1
Tablas?

Hola Vanax

Puedes mostrar la estructura de tus tablas Otros y Particulares?.

Por lo que veo y creo entender el id de ambas tablas se relacionan cuando haces referencia a la imegen de la table Otras supones que es el mismo id para la tabla de Particulares verdad?

Puedes mostrar tu script completo de tus llamadas a consultar de tus tablas y tus ver.php & verParticulares.php que utilizas?.

Que debe de ser algo asi:

Código PHP:

// :: Primera consulta :: tabla -> Otras ::

  
$sql "SELECT id, campo1,campo2,campo3,campo4, insertarFoto 
           FROM Otras where ciudad='"
.$_POST["ciudad"]." ' ";

  
$consulta mysql_query($sql$conexBD
    or die (
"No se pudo ejecutar la consulta" .mysql_error());

  
where ($registroOtra = .... )  { // Inicio de Otras

   
echo "<img src=\"http://localhost/ver.php?id=".$registroOtra['id']."\">";

    
// :: Segunda consulta ::  tabla -> Particulares ::
    
$sql2 "SELECT id, campo1,campo2,campo3,campo4, insertarFoto 
                FROM Particulares where id='$registroOtra[id]' "
;

    
$consulta2 mysql_query($sql2$conexBD
      or die (
"No se pudo ejecutar la consulta" .mysql_error()); 

    
where ($registroParticulares = .... )  { 
      echo 
"<img src=\"http://localhost/verParticulares.php?id=".$registroParticulares['id']."\">";
    } 
// Fin Particulares

  
// Fin Otras. 
suponiendo que tus dos ver.php & verParticulares.php hacen referencia a cada una de las tablas en cuestion.

Puedes mostrar este codigo?
__________________
Kike Lee
Paz && Bien
  #7 (permalink)  
Antiguo 23/11/2004, 04:30
 
Fecha de Ingreso: marzo-2004
Mensajes: 50
Antigüedad: 20 años, 1 mes
Puntos: 0
Aquí tienes

Hola Kikelee,
esta es la estructura de las tablas:
(esta es la tabla que antes se llamaba 'Otros')
CREATE TABLE 'empresas' (id int(10) UNSIGNED NOT NULL auto_increment ,
nomEmpresa varchar(200) NOT NULL default '0',
ref varchar(15) NOT NULL default '0',
precio int(15) NOT NULL default '0',
tipoOperacion varchar(200) NOT NULL default '0',
ciudad varchar(100) NOT NULL default '',
direccion varchar(200) NOT NULL default '0',
provincia varchar(200) default NULL ,
cp varchar(10) default NULL ,
estado varchar(200) NOT NULL default '0',
insertarFoto mediumblob BINARY default NULL,
tlf varchar(10) NOT NULL default '0',
notas text default NULL )TYPE=MyISAM;


Esta es la estructura de 'particulares':
CREATE TABLE 'particulares' (id int(10) UNSIGNED NOT NULL auto_increment , nombre varchar(200) NOT NULL default '' , apellidos varchar(250) NOT NULL default '' ,
nomEmpresa varchar(200) NOT NULL default '0',
ref varchar(15) NOT NULL default '0',
precio int(15) NOT NULL default '0',
tipoOperacion varchar(200) NOT NULL default '0',
ciudad varchar(100) NOT NULL default '',
direccion varchar(200) NOT NULL default '0',
provincia varchar(200) default NULL ,
cp varchar(10) default NULL ,
estado varchar(200) NOT NULL default '0',
insertarFoto mediumblob BINARY default NULL,
tlf varchar(10) NOT NULL default '0',
notas text default NULL )TYPE=MyISAM;

ver.php:
<?php

if(isset($_GET['id'])) {

$conexion=mysql_connect("localhost","","") or die ("no se ha podido conectar a la BD");
mysql_select_db("Empresas") or die ("no se ha podido seleccionar la BD");


$sql = "SELECT insertarFoto FROM empresas WHERE id=' ".$_GET['id']. " ' ";
$consulta = mysql_query($sql,$conexion);
$imagen = mysql_result($consulta,0,"insertarFoto");
Header ("Content-type: image/jpeg");
$img = imagecreatefromstring($imagen);
$imgPeq = 123;
$Ancho2 = imagesx($img);
$Alto2= imagesy($img);
$proporcionAltoAncho = $Alto2 / $Ancho2;
$Ancho2= $imgPeq;
$Alto2 = abs($Ancho2 * $proporcionAltoAncho);
$mascaraFoto = ImageCreateTrueColor($Ancho2,$Alto2);
imagecopyresampled($mascaraFoto,$img,0,0,0,0,$Anch o2, $Alto2,imagesx($img),imagesy($img));
imagejpeg($mascaraFoto,'',100);


verParticulares.php:

if(isset($_GET['id'])) {

$conexion=mysql_connect("localhost","","") or die ("no se ha podido conectar a la BD");
mysql_select_db("Empresas") or die ("no se ha podido seleccionar la BD");


$sql = "SELECT insertarFoto FROM particulares WHERE id=' ".$_GET['id']. " ' ";
$consulta = mysql_query($sql,$conexion);
$imagen = mysql_result($consulta,0,"insertarFoto");
Header ("Content-type: image/jpeg");
$img = imagecreatefromstring($imagen);
$imgPeq = 123;
$Ancho2 = imagesx($img);
$Alto2= imagesy($img);
$proporcionAltoAncho = $Alto2 / $Ancho2;
$Ancho2= $imgPeq;
$Alto2 = abs($Ancho2 * $proporcionAltoAncho);
$mascaraFoto = ImageCreateTrueColor($Ancho2,$Alto2);
imagecopyresampled($mascaraFoto,$img,0,0,0,0,$Anch o2, $Alto2,imagesx($img),imagesy($img));
imagejpeg($mascaraFoto,'',100);


y el script de la consulta:

$sql = "SELECT id, nomEmpresa,ref,ciudad,direccion,provincia,CP,estad o,insertarFoto,tlf,notas FROM empresas where ciudad='".$_POST["ciudad"]." ' ";


$consulta = mysql_query($sql, $conexBD) or die ("No se pudo ejecutar la consulta" .mysql_error());

$sql2 = "SELECT id, ciudad,direccion,provincia,CP,estado,insertarFoto, tlf,notas FROM particulares where ciudad='".$_POST["ciudad"]." ' ";

$consulta2 = mysql_query($sql2, $conexBD) or die ("No se pudo ejecutar la consulta" .mysql_error());


echo "<html><head><title>Tipo de registro</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>";
</head>";

echo "<body bgcolor='#FFFFFF' text='#000000'>";

echo "<form method='post' action='' name=''>";

<table width='100%' height='76'><tr bgcolor=''><td colspan=2><font face='Verdana, Arial, Helvetica, sans-serif' size='2'><B>Lista de registros</B></div></font></td></tr></table>";

echo "<table border='0' width='100%' cellspacing='0' cellpadding='0'>";
echo "<tr><td bgcolor='#009933' align='center'>Foto</td>";
echo "<td bgcolor='#009933' align='center'>&nbsp;</td>";
echo "<td bgcolor='#009933' align='center'><font face='Verdana, Arial, Helvetica, sans-serif' size='2'>Localidad</font></td>";
echo "<td bgcolor='#009933' align='center'><font face='Verdana, Arial, Helvetica, sans-serif' size='2'>Precio</font></td>";
echo "<td bgcolor='#009933' align='center'><font face='Verdana, Arial, Helvetica, sans-serif' size='2'>Tel&eacute;fono</font></td>";

While ($registro=mysql_fetch_assoc($consulta) or $registro=mysql_fetch_assoc($consulta2)){


echo "<tr ><td align='center' width='125' height='81'>";
echo "<img src=\"http://localhost/ver.php?id=".$registro['id']."\" border='0'>";
//echo "<img src=\"http://localhost/verParticulares.php?id=".$registro['id']."\" border='0'>";


echo "</td>";
echo "<td>&nbsp;</td>";
echo "<td align='center'>";
echo $registro['ciudad'];
echo "</td>";
echo "<td align='center'>";
echo $registro['precio']. "&nbsp;euros";
echo "</td>";
echo "<td align='center'>";
echo $registro['tlf'];
echo "</td>";
echo "</tr> ";
echo "<tr><td colspan='9 '><hr color='#008040'></td></tr>";


}
echo "</table>";
</td></tr></table></form></body></html>";
exit;

?>

Es más o menos esto he quitado algo de código html, para que esto no sea tan largo, pero en este caso da igual.
Todo esto funciona bien, excepto al mostrar las fotos que, evidentemente, solo las de una de las tablas.

Última edición por vanax; 23/11/2004 a las 04:32 Razón: error al escribir el código
  #8 (permalink)  
Antiguo 25/11/2004, 09:55
 
Fecha de Ingreso: julio-2003
Ubicación: Queretaro Qro.
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 1
Hola Ana

El foro ha estdo algo saturado asi que cada ves que intento enviar un nuevo mensaje se cancela espero que esta ves se pueda y si no ya te lo envie por un mensaje privado con un poco de suerte y te llego...

Pues el codigo que implementas esta bien lo unico es que no he probado como lo que heces en el while...

Código PHP:
While ($registro=mysql_fetch_assoc($consulta) or $registro=mysql_fetch_assoc($consulta2))
{...} 
Creo que esta un poco fuera de contesto pero si despliega datos sera solo de una tabla y no de la otra, quiero pensar el hecho de que digas or cuando despliegas los datos esto implica que si una de ellas no tiene datos hagas la otra de forma que solo los mezcla, aqui el problema que podria haber es que las dos tablas son diferentes. Aunque esto suceda no se si haz verificado que realmente imprima todos los datos que debe?, esto puede ocasionar problemas ya que cuando tu quieres desplagar la imagen de una tabla en particular, como sabes de cual de las dos es? tienes control de esto? cual ver debes utilizar el de las empresas o la de las particulares recordando que son dos tablas diferentes?

tal ves lo mejor sea hacerlo por separado....

Código PHP:
While ($registro=mysql_fetch_assoc($consulta))
{...}

While (
$registro=mysql_fetch_assoc($consulta2))
{...} 
y en cada una de ellas utilizar el verEmpresas.php o verParticulares.php segun la tabla para su visualizacion.

Una propuesta es que puedes unificar ambas tablas en una (normalizando) y separando solo por banderas un campo extra que te permita diferenciarlas 0 = empresa / 1 = Particular, tienes dos tipos de empresa: Empresas y Empresas de Particulares (tal ves este equivocado) de esta forma solo debas accesar a una tabla y no dos. Aunque de otra forma yo separaria tus tablas una :: para las EmpresasParticulares, otra :: de imagenes (buscando no desperdiciar espacion en la tabla de Empresa Particulares cuando estas no tengan imagene) tan solo ligarlas, recordando un poco del modelo Entidad-Relacion.

Bueno espero y me de a entender de cualquier forma estoy a tus ordenes en lo que puede ayudar, no me considero experto tan solo alguien que de lo poco puede compartir.
__________________
Kike Lee
Paz && Bien

Última edición por kikelee; 26/11/2004 a las 08:41
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 09:15.