Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] mostrar imágenes asociadas a un registro

Estas en el tema de mostrar imágenes asociadas a un registro en el foro de PHP en Foros del Web. estoy tratando de mostrar una consulta y en la misma mostrar las imágenes asociadas a ese registro, pero solo consigo que me muestro solo una ...
  #1 (permalink)  
Antiguo 04/04/2017, 12:21
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Busqueda mostrar imágenes asociadas a un registro

estoy tratando de mostrar una consulta y en la misma mostrar las imágenes asociadas a ese registro, pero solo consigo que me muestro solo una imagen cuando no debería ser ya que si un registro tiene asociado tres imágenes debería mostrarlas todas pero como dije solo consigo que me devuelva solo una imagen,

aquí mis tablas:

tabla: detalles_catagorias

id, fk_categorias, precio, descripcion, detalles

tabla: detalles_img

id, imagen

relación de ambas tablas: id de la tabla detalles_catagorias con id de la tabla detalles_img.

También estaba tratando de hacer la separación de las imágenes con explode pero si no logro mostrar las imágenes como debería ser como voy a a llegar a la parte de separar las imágenes o no se si haria falta esa separacion, gracias de ante mano

Consulta SQL:
Código MySQL:
Ver original
  1. SELECT  detalles_categorias.id, detalles_categorias.fk_categorias, detalles_categorias.precio, detalles_categorias.descripcion,
  2.        detalles_categorias.detalles, detalles_img.id, detalles_img.imagen, GROUP_CONCAT(detalles_img.imagen SEPARATOR '----')
  3. FROM detalles_categorias
  4. INNER JOIN detalles_img ON detalles_img.id=detalles_categorias.id GROUP BY fk_categorias


método de mi consulta

Código PHP:
Ver original
  1. <?php
  2. $sql = "SELECT
  3. detalles_categorias.id,
  4. detalles_categorias.fk_categorias,
  5. detalles_categorias.precio,
  6. detalles_categorias.descripcion,
  7. detalles_categorias.detalles,
  8. detalles_img.id,
  9. detalles_img.imagen, GROUP_CONCAT(detalles_img.imagen SEPARATOR '----')
  10. FROM detalles_categorias INNER JOIN detalles_img ON detalles_img.id=detalles_categorias.id GROUP BY fk_categorias";
  11. $consulta = $DB_con->prepare($sql);
  12. $consulta->execute(array(':id'=>$id));
  13. if($consulta->rowCount() > 0){
  14. $i=1;
  15.  
  16. echo "<table  class='bordered responsive-table'>
  17. <thead>
  18. <tr>
  19. <th data-field='Nº'>Nº</th>
  20. <th data-field='Código'>categorias</th>
  21. <th data-field='Código'>precio</th>
  22. <th data-field='Código'>descripcion</th>
  23. <th data-field='Código'>detalles</th>
  24. <th data-field='Código'>imagenes</th>
  25. <th data-field='Operaciones'>Operaciones Administrador</th>
  26. </tr>
  27. </thead>";
  28. while ($linea = $consulta->fetch(PDO::FETCH_ASSOC)) {
  29. echo "<tr>
  30. <td align=center>$i</td>
  31. <td align=center>{$linea['fk_categorias']}</td>
  32. <td align=center>{$linea['precio']}</td>
  33. <td align=center>{$linea['descripcion']}</td>
  34. <td align=center>{$linea['detalles']}</td>
  35. <td align=center><img src='../galerias/$linea[imagen]' class=responsive-img circle center-align width=70px height=70px></td>
  36. ";
  37. ?>
  38. <?php
  39.  $imagen = explode("/", $linea[imagen]);
  40. //var_dump($imagen);
  41. ?>
  42.  
  43. <?php
  44. echo "<td colspan='2'>
  45. <form action='actualizar_seguros.php' method='GET'>
  46. <input type=hidden name=id value='$linea[id]'>
  47. <button class='btn waves-effect blue-grey darken-4 left  
  48. btn-small tooltipped' data-position='bottom'
  49. data-tooltip='Actualizar' type='submit' name='actualizar'>
  50. <i class='material-icons'>update</i>
  51. </button></form>
  52.  
  53.  
  54.  
  55.  
  56. <form action='consultar_seguros.php' method='POST'>
  57. <input type=hidden name=id value='$linea[id]'>
  58. <button class='btn waves-effect blue-grey darken-4 left  
  59. btn-small tooltipped' data-position='bottom'
  60. data-tooltip='Eliminar' type='submit' name='eliminar'>
  61. <i class='material-icons'>delete</i>
  62. </button></form>
  63.  
  64.  
  65.  
  66. <a href='categorias.php'
  67. <button class='btn waves-effect blue-grey darken-4 left  
  68. btn-small tooltipped' data-position='bottom'
  69. data-tooltip='Volver' type='submit'>
  70. <i class='material-icons'>reply_all</i>
  71. </button></a>
  72.  
  73.  
  74.  
  75.  
  76. </td>
  77. </tr>";
  78. $i++;
  79. }
  80. }else
  81. echo "<div class='col s12 card-panel yellow darken-2 center'>
  82. <h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
  83. ¡ Advertencia: No se ha encontrado ningún registro ! <a href='categorias.php' class='teal-text darken-4'>volver</a>
  84. </h5>
  85. </div>";
  86.  
  87. echo "</table>";
  88.  
  89.  
  90. ?>
__________________
yoclens avilan

Última edición por Triby; 04/04/2017 a las 18:33 Razón: tenia un error - Separar consulta (by Triby)
  #2 (permalink)  
Antiguo 04/04/2017, 13:26
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: mostrar imágenes asociadas a un registro

La estructura de la tabla detalles_img es incorrecta:

Debería de ser:
id - que almacena la id de cada imagen
det_cat_id - que almacena el id de cada detalle_categorias
detalle_img - la imagen

Luego haces un:
SELECT * FROM detalle_img WHERE det_cat_id = ?

o tu query:

Código MySQL:
Ver original
  1. detalles_categorias.id,
  2. detalles_categorias.fk_categorias,
  3. detalles_categorias.precio,
  4. detalles_categorias.descripcion,
  5. detalles_categorias.detalles,
  6. detalles_img.id,
  7. detalles_img.imagen, GROUP_CONCAT(detalles_img.imagen SEPARATOR '----')
  8. FROM detalles_categorias INNER JOIN detalles_img ON detalles_img.det_cat_id = detalles_categorias.id GROUP BY fk_categorias";

y el resultado te traería todas las imagenes relacionadas cada detalle_categora.

Piensa una cosa, cualquiera que intente bregar con esa base de datos no tiene forma humana de averiguar cuales imagenes pertenece a una categoria, con lo cual, cuando diseñes una tabla, tienes que hacerlo pensando en cómo identificarias lo que deseas de manera fácil.

De esa manera agilizas tu trabajo y la programación alrededor de la tabla.
  #3 (permalink)  
Antiguo 04/04/2017, 13:50
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Respuesta: mostrar imágenes asociadas a un registro

Cita:
Iniciado por Triby2 Ver Mensaje
La estructura de la tabla detalles_img es incorrecta:

Debería de ser:
id - que almacena la id de cada imagen
det_cat_id - que almacena el id de cada detalle_categorias
detalle_img - la imagen

Luego haces un:
SELECT * FROM detalle_img WHERE det_cat_id = ?

o tu query:

Código MySQL:
Ver original
  1. detalles_categorias.id,
  2. detalles_categorias.fk_categorias,
  3. detalles_categorias.precio,
  4. detalles_categorias.descripcion,
  5. detalles_categorias.detalles,
  6. detalles_img.id,
  7. detalles_img.imagen, GROUP_CONCAT(detalles_img.imagen SEPARATOR '----')
  8. FROM detalles_categorias INNER JOIN detalles_img ON detalles_img.det_cat_id = detalles_categorias.id GROUP BY fk_categorias";

y el resultado te traería todas las imagenes relacionadas cada detalle_categora.

Piensa una cosa, cualquiera que intente bregar con esa base de datos no tiene forma humana de averiguar cuales imagenes pertenece a una categoria, con lo cual, cuando diseñes una tabla, tienes que hacerlo pensando en cómo identificarias lo que deseas de manera fácil.

De esa manera agilizas tu trabajo y la programación alrededor de la tabla.


correjido pero igual me sigue mostrando una imagen, recuerda que estoy consultando dos tablas a la vez

detalles_img

id fk_detalles_categorias imagen

asi quedo mi tabla ahora
__________________
yoclens avilan

Última edición por aviweb2015; 04/04/2017 a las 13:56
  #4 (permalink)  
Antiguo 04/04/2017, 15:27
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: mostrar imágenes asociadas a un registro

Cita:
Iniciado por aviweb2015 Ver Mensaje
correjido pero igual me sigue mostrando una imagen, recuerda que estoy consultando dos tablas a la vez

detalles_img

id fk_detalles_categorias imagen

asi quedo mi tabla ahora
podrías probar que te devuelve si cambiar INNER JOIN por LEFT JOIN?
podrías probar que te devuelve si solo le quitas el GroupBy?
  #5 (permalink)  
Antiguo 04/04/2017, 15:33
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Respuesta: mostrar imágenes asociadas a un registro

Cita:
Iniciado por Triby2 Ver Mensaje
podrías probar que te devuelve si cambiar INNER JOIN por LEFT JOIN?
podrías probar que te devuelve si solo le quitas el GroupBy?


podrías probar que te devuelve si cambiar INNER JOIN por LEFT JOIN?

igual

podrías probar que te devuelve si solo le quitas el GroupBy?

solo me muestra un registro y las fotos iguales solo la primera foto
__________________
yoclens avilan
  #6 (permalink)  
Antiguo 04/04/2017, 17:26
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 9 años, 9 meses
Puntos: 30
Respuesta: mostrar imágenes asociadas a un registro

Cita:
Iniciado por aviweb2015 Ver Mensaje
podrías probar que te devuelve si cambiar INNER JOIN por LEFT JOIN?

igual

podrías probar que te devuelve si solo le quitas el GroupBy?

solo me muestra un registro y las fotos iguales solo la primera foto
Pues entonces hazlo al revés!

SELECT
detalles_categorias.id,
detalles_categorias.fk_categorias,
detalles_categorias.precio,
detalles_categorias.descripcion,
detalles_categorias.detalles,
detalles_img.id,
detalles_img.imagen,
FROM detalles_img
INNER JOIN detalles_img ON detalles_img.det_cat_id = detalles_categorias.id;

Eso te devolverá todos los registros de las imagnes junto con los datos de la tabla categoria que le pertenece a cada imagen.

Después haces un query solo para las categorias donde solo obtengas la id de cada categoria. Recorres el array de las categorias con un foreach donde tendrás que ajuntar manualmente las imagenes de cada categoria y después ya podrás pegar el codigo html a la tabla, se te debería de ver bien así.
  #7 (permalink)  
Antiguo 04/04/2017, 18:35
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: mostrar imágenes asociadas a un registro

Tu problema no es de PHP, sino de MySQL y, a simple vista, me parece que no estás usando el resultado que obtienes de GROUP_CONCAT(detalles_img.imagen SEPARATOR '----'), si agregas un alias podrías tratar de averiguar lo que hay ahí, ejemplo:

GROUP_CONCAT(detalles_img.imagen SEPARATOR '----') as concatenado

En fin, muevo tu tema a MySQL donde podrán orientarte mejor.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 04/04/2017, 19:19
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Respuesta: mostrar imágenes asociadas a un registro

Cita:
Iniciado por Triby Ver Mensaje
Tu problema no es de PHP, sino de MySQL y, a simple vista, me parece que no estás usando el resultado que obtienes de GROUP_CONCAT(detalles_img.imagen SEPARATOR '----'), si agregas un alias podrías tratar de averiguar lo que hay ahí, ejemplo:

GROUP_CONCAT(detalles_img.imagen SEPARATOR '----') as concatenado

En fin, muevo tu tema a MySQL donde podrán orientarte mejor.

gracias amigo ya lo pude resulver la consulta quedando de esta forma que es lo que se quiere:

Código SQL:
Ver original
  1. SELECT
  2. detalles_categorias.id,
  3. detalles_categorias.fk_categorias,
  4. detalles_categorias.precio,
  5. detalles_categorias.descripcion,
  6. detalles_categorias.detalles,
  7. GROUP_CONCAT(detalles_img.imagen SEPARATOR '----')
  8. FROM detalles_categorias INNER JOIN detalles_img ON detalles_img.fk_detalles_categorias = detalles_categorias.id
  9. WHERE detalles_img.fk_detalles_categorias = detalles_categorias.id
  10. GROUP BY detalles_img.fk_detalles_categorias";

ahora para mostrar las imágenes lo estoy haciendo de la siguiente manera pero no se me muestran las imágenes

Código PHP:
Ver original
  1. <?php
  2. $arr = explode("----", $linea[imagen]);
  3. foreach ($arr as $item) { echo '<td align=center><img src="http://www.forosdelweb.com/f86/galerias/'.$item.'" class=responsive-img circle center-align width=70px height=70px/></td>'; }
  4. ?>

anexo link para ver el sql puro

http://sqlfiddle.com/#!9/7f6034/7
__________________
yoclens avilan

Última edición por aviweb2015; 04/04/2017 a las 19:21 Razón: me falto algo
  #9 (permalink)  
Antiguo 04/04/2017, 20:20
Avatar de aviweb2015  
Fecha de Ingreso: abril-2016
Ubicación: venezuela
Mensajes: 215
Antigüedad: 8 años
Puntos: 1
Respuesta: mostrar imágenes asociadas a un registro

ya lo pude solucionar anexo código completo de como debería quedar doy por cerrado el hilo

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4.  
  5.  
  6. $sql = "
  7. SELECT
  8. detalles_categorias.id,
  9. detalles_categorias.fk_categorias,
  10. detalles_categorias.precio,
  11. detalles_categorias.descripcion,
  12. detalles_categorias.detalles,
  13. GROUP_CONCAT(detalles_img.imagen SEPARATOR '-') AS imagen
  14. FROM detalles_categorias INNER JOIN detalles_img ON detalles_img.fk_detalles_categorias = detalles_categorias.id
  15. WHERE detalles_img.fk_detalles_categorias = detalles_categorias.id
  16. GROUP BY detalles_img.fk_detalles_categorias";
  17. $consulta = $DB_con->prepare($sql);
  18. $consulta->execute();
  19. if($consulta->rowCount() > 0){
  20. $i=1;
  21.  
  22. echo "<table  class='bordered responsive-table'>
  23. <thead>
  24. <tr>
  25. <th data-field='Nº'>Nº</th>
  26. <th data-field='Código'>categorias</th>
  27. <th data-field='Código'>precio</th>
  28. <th data-field='Código'>descripcion</th>
  29. <th data-field='Código'>detalles</th>
  30. <th data-field='Código' colspan='2'>imagenes</th>
  31. <th data-field='Operaciones'>Operaciones Administrador</th>
  32. </tr>
  33. </thead>";
  34. while ($linea = $consulta->fetch(PDO::FETCH_ASSOC)) {
  35.  
  36. echo "
  37. <tr>
  38. <td align=center>$i</td>
  39. <td align=center>{$linea['fk_categorias']}</td>
  40. <td align=center>{$linea['precio']}</td>
  41. <td align=center>{$linea['descripcion']}</td>
  42. <td align=center>{$linea['detalles']}</td>
  43. ";
  44. ?>
  45.  
  46.  
  47. <?php
  48. $detalles_img = explode("-", $linea['imagen']);
  49. foreach ($detalles_img as $value) {
  50. echo ('<td colspan="2"><img src="http://www.forosdelweb.com/f86/galerias/'.$value.'" class=responsive-img circle center-align width=50px height=50px/></td>') ;
  51. }
  52. ?>
  53.  
  54. <?php
  55. echo "<td colspan='2'>
  56. <form action='actualizar_multiple.php' method='GET'>
  57. <input type=hidden name=id value='$linea[id]'>
  58. <button class='btn waves-effect blue-grey darken-4 left  
  59. btn-small tooltipped' data-position='bottom'
  60. data-tooltip='Actualizar' type='submit' name='actualizar'>
  61. <i class='material-icons'>update</i>
  62. </button></form>
  63.  
  64. <form action='consultar_seguros.php' method='POST'>
  65. <input type=hidden name=id value='$linea[id]'>
  66. <button class='btn waves-effect blue-grey darken-4 left  
  67. btn-small tooltipped' data-position='bottom'
  68. data-tooltip='Eliminar' type='submit' name='eliminar'>
  69. <i class='material-icons'>delete</i>
  70. </button></form>
  71.  
  72. <a href='multiple.php'
  73. <button class='btn waves-effect blue-grey darken-4 left  
  74. btn-small tooltipped' data-position='bottom'
  75. data-tooltip='Volver' type='submit'>
  76. <i class='material-icons'>reply_all</i>
  77. </button></a>
  78.  
  79.  
  80.  
  81.  
  82. </td>
  83. </tr>";
  84. $i++;
  85. }
  86. }else
  87. echo "<div class='col s12 card-panel yellow darken-2 center'>
  88. <h5 class='black-text text-darken-2 center CONDENSED LIGHT5'>
  89. ¡ Advertencia: No se ha encontrado ningún registro ! <a href='multiple.php' class='teal-text darken-4'>volver</a>
  90. </h5>
  91. </div>";
  92.  
  93. echo "</table>";
  94.  
  95.  
  96. ?>
__________________
yoclens avilan
  #10 (permalink)  
Antiguo 05/04/2017, 11:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: mostrar imágenes asociadas a un registro

Solución OFF TOPIC en MySQL.

Movido a PHP
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: pdo
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 04:35.