Foros del Web » Programando para Internet » PHP »

Mostrar imagenes por categoria

Estas en el tema de Mostrar imagenes por categoria en el foro de PHP en Foros del Web. Buenas noches gente del foro, soy nuevo por aquí, hace poco tiempo me inicié en el mundo de PHP y MySql, estoy desarrollando una web ...
  #1 (permalink)  
Antiguo 03/10/2011, 20:47
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 1
Pregunta Mostrar imagenes por categoria

Buenas noches gente del foro,
soy nuevo por aquí, hace poco tiempo me inicié en el mundo de PHP y MySql, estoy desarrollando una web con base de datos donde necesito mostrar imagenes de los productos en un listado que está separado por categorias.

He guardado en mi tabla 'instrumentos' cada producto con un ID propio, una columna 'ID_linea' que declara a que categoria pertence y una columna 'imagen' donde guardo la ruta del archivo a mostrar.

Mediante querys he logrado que me muestre en un listado cada categoria con su nombre y descripaciones, todos datos extraidos de la tabla 'lineas' que ademas incluye un ID por cada categoria.

Mi problema es que logro traer todas las imagenes de mi base pero no logro acomodarlas según el ID_linea.

Adjunto el codigo a ver si alguien puede darme una mano:

Código PHP:
Ver original
  1. <?php
  2. mysql_select_db($database_cnx, $cnx);
  3. $query_linea = "SELECT ID, nombre, edad, comentario FROM linea";
  4. $linea = mysql_query($query_linea, $cnx) or die(mysql_error());
  5. $row_linea = mysql_fetch_assoc($linea);
  6. $totalRows_linea = mysql_num_rows($linea);
  7.  
  8. mysql_select_db($database_cnx, $cnx);
  9. $query_imgproductos = "SELECT ID_linea, imagenlinea FROM instrumento";
  10. $imgproductos = mysql_query($query_imgproductos, $cnx) or die(mysql_error());
  11. $row_imgproductos = mysql_fetch_assoc($imgproductos);
  12. $totalRows_imgproductos = mysql_num_rows($imgproductos);
  13. ?>
  14.  
  15.                 <div class="lineasgral">
  16.          
  17.                     <?php do {
  18.                     ?>
  19.                     <span class="lineaint"><a href="linea2.php?l=<?php echo $row_linea['ID'];?>"><?php echo $row_linea['nombre']; ?></a></span>
  20.                     <span class="lineaint2"><?php echo $row_linea['edad'];?></span>
  21.                     <span class="lineaint3"><?php echo $row_linea['comentario'];?></span>
  22.                     <div imglinea>
  23.                     <?php while ($row_linea['ID']=$row_imgproductos['ID_linea']) {?>
  24.                         <?php do {?>
  25.                         <img src= <?php echo $row_imgproductos['imagenlinea'];?> />
  26.                         <?php } while ($row_imgproductos = mysql_fetch_assoc($imgproductos)) ; ?>
  27.                     <?php }?>
  28.                     </div>
  29.                     <hr size="1" noshade="noshade" class="reglahoriz" />
  30.                     <?php } while ($row_linea = mysql_fetch_assoc($linea));?>
  31.              
  32.                 </div>
  33.  
  34.         <?php
  35.         mysql_free_result($linea);
  36.  
  37.         mysql_free_result($imgproductos);
  38.         ?>

Desde ya estaré muy agradecido por su ayuda ya que hace dias que vengo luchando con este problema sin encontrarle solución, creo estar cerca, pero no logro sacarlo!

Última edición por mocoponk; 03/10/2011 a las 21:09
  #2 (permalink)  
Antiguo 04/10/2011, 07:12
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Mostrar imagenes por categoria

vos lo que tenes que hacer es relacionar esas tablas:

$query="SELECT * FROM instrumento I, linea L WHERE I.ID_linea = L.ID ";

probalo directamente en el sql y fijate que te trae todos los datps relacionados
  #3 (permalink)  
Antiguo 04/10/2011, 08:02
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Mostrar imagenes por categoria

a mi no me gusta mucho esto, realmente es necesario hacer 2 loops?

Código PHP:
<?php while ($row_linea['ID']=$row_imgproductos['ID_linea']) {?>
<?php 
do {?>
<img src= <?php echo $row_imgproductos['imagenlinea'];?> />
<?php } while ($row_imgproductos mysql_fetch_assoc($imgproductos)) ; ?>
<?php 
}?>
Ademas me tentaria a decir que en esta linea estas cometiendo un error al asignar

Código PHP:
$row_linea['ID']=$row_imgproductos['ID_linea'
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #4 (permalink)  
Antiguo 04/10/2011, 08:17
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Mostrar imagenes por categoria

algo así tendría que servir.

Código PHP:
<?php
mysql_select_db
($database_cnx$cnx);
$query "SELECT ID, nombre, edad, comentario FROM linea, ID_linea where linea.ID = ID_linea"//joineo (combino) las tablas
$linea mysql_query($query$cnx) or die(mysql_error());
$row_linea mysql_fetch_assoc($linea);

$totalRows_linea mysql_num_rows($linea); //no se para que lo usas no aparece referencia en el codigo
?>

<div class="lineasgral">

    <?php
    $idanterior 
= -1;
    while (
$row_linea mysql_fetch_array($linea)) {
        if (
$idanterior != $row_linea['ID']) {
            
?>
            <span class="lineaint">
                <a href="linea2.php?l=<?php echo $row_linea['ID']; ?>"><?php echo $row_linea['nombre']; ?></a>
            </span>
            <span class="lineaint2"><?php echo $row_linea['edad']; ?></span>
            <span class="lineaint3"><?php echo $row_linea['comentario']; ?></span>
        <?php ?>
        <div imglinea>
            <img src= <?php echo $row_imgproductos['imagenlinea']; ?> />
        </div>
        <?php if ($idanterior != $row_linea['ID']) {
            
$idanterior $row_linea['ID']; ?>
            <hr size="1" noshade="noshade" class="reglahoriz" />
        <?php ?>
    <?php ?>

</div>

<?php
mysql_free_result
($linea);
?>
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #5 (permalink)  
Antiguo 04/10/2011, 12:25
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Mostrar imagenes por categoria

Buenas tardes!
De mas está decir que estoy muy agradecido por su atención y respuesta!

Patriarka: lamentablemente no funcionó la solución que me diste, sigo recibiendo como resultado el total de las imagenes pero todas en el mismo bloque y no cada una en el bloque de la repetición a la que corresponde su ID_linea.

h2swider: En principio tambien me pareció redundante utilizar dos loops y no estaba seguro de la asigancion que estaba haciendo en el primer while, pero sinceramente copié el codigo como había quedado despues de 1000 intentos que se me iban ocurriendo (foreach, if, switch) todas cosas que conozco pero en muchos casos no estoy seguro de su funcionamiento con base de datos, pero que mas me daba probarlas antes de molestar consultandoles!
Acto seguido de revisar el codigo que tan amablemente me armaste (muchas gracias por tu tiempo!!) lo probé, pero tampoco funcionó y entiendo que es un problema de codificación en el query, al parecer estaría fallando el JOIN, que no se como se utiliza pero tengo una idea de lo que es.
Voy a investigar mas sobre el tema de JOIN, evidentemente es un tema de relaciones de tablas.
Si tienen algun otro consejo estaría muy agradecido!
  #6 (permalink)  
Antiguo 04/10/2011, 12:33
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Mostrar imagenes por categoria

mmmm en que sentido no funciono?

Agrega un

var_dump($row_linea); luego de

while ($row_linea = mysql_fetch_array($linea))

Y asi te daras una mejor idea de lo que esta fallando.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #7 (permalink)  
Antiguo 04/10/2011, 13:50
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Mostrar imagenes por categoria

Estimado h2swider, copio textual lo que sale en el navegador cuando hago correr la pagina con el codigo que me pasaste,

(Pagina complatamente en blanco)
Table 'minimento.id_linea' doesn't exist

Muchas gracias!
  #8 (permalink)  
Antiguo 04/10/2011, 13:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Mostrar imagenes por categoria

Eso te dice la causa del error, la tabla minimento.id_linea no existe, tienes que seleccionar una tabla válida.

Saludos.
  #9 (permalink)  
Antiguo 04/10/2011, 15:43
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Mostrar imagenes por categoria

Hola Gator, eso lo entiendo, pero estuve corto de palabras (error, lo se).
Probé agregando el nombre de tabla, seguido de ID_linea (instrumento.ID_linea) y tampoco tuve respuesta satisfactoria.
Luego cambié "ID_linea" por "instrumento" (el nombre de la tabla) y agregué a la igualdad "instrumento.ID_linea" y el error que me sale es:

Column 'ID' in field list is ambiguous

y este si que no se a que se refiere!

Perdón por mi ignorancia! y gracias nuevamente!
  #10 (permalink)  
Antiguo 04/10/2011, 16:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Mostrar imagenes por categoria

Eso significa que MySQL no sabe a que campo ID te refieres de que tabla, ya que puede ser de alguna de las dos tablas y tienes que especificar (anteponiendo el nombre de la tabla o el alias) antes del campo, ej:

Código SQL:
Ver original
  1. SELECT tabla.id

Saludos.
  #11 (permalink)  
Antiguo 05/10/2011, 09:04
 
Fecha de Ingreso: octubre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Mostrar imagenes por categoria

Estimados,

Gracias de nuevo GatorV, ahora entendí mucho mejor como hacer mis consultas interrelacionando tablas!

Aun no logré solucionar 100% mi problema pero creo estar cada vez más cerca, modifiqué mi codigo utilizando diferentes partes de lo que ustedes tan gentilmente me compartieron.
Resolví todo en un solo query haciendo JOIN con un WHERE y un GROUP BY.
Ahora bien, eliminé los ciclos de repetición que afectaban unicamente a la imagen, y solo quedo el DO WHILE que me trae los datos por cada categoria.
Entonces ahora me devuelve cada categoria y solo la primer imagen del grupo en cada ciclo.
Tienen alguna idea de como pedir que traiga todas las imagenes del grupo y no solo la primera?
La logica me indica que deberia hacer un array por cada grupo de imagenes y pedirle que muestre todo en la misma linea, pero no se hacerlo... :S

Como siempre agradecido de antemano!
Saludos.

Etiquetas: categorias, clasificar, imagenes, mysql
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 20:24.