Foros del Web » Programando para Internet » PHP »

Problema al mostrar imagenes desde una base de datos

Estas en el tema de Problema al mostrar imagenes desde una base de datos en el foro de PHP en Foros del Web. Hola a todos, verán tengo un codigo con el cual se pueden mostrar fotos extraidas desde una base de datos sql. las muestra formando una ...
  #1 (permalink)  
Antiguo 02/02/2014, 13:45
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Problema al mostrar imagenes desde una base de datos

Hola a todos, verán tengo un codigo con el cual se pueden mostrar fotos extraidas desde una base de datos sql.

las muestra formando una tabla de 6 columnas (con lo cual muestra 6 fotos en el horizontal).

y de manera indefinida (mientras que hayan fotos en el vertical por eso he utlizado un if).


el problema lo tengo en que en la primera fila de la tabla me muestra las 5 primeras fotos pero la sexta foto de la primera fila no.

y ya a partir de la segunda, tercera, cuarta y siguientes filas en adelante de la tabla muestra perfectamente 6 fotos en cada horizontal.

alguien podria ayudarme con esto? llevo una semana entera con esto y no logro dar con la solucion, este es el codigo, mil gracias de antemano:

ah una cosa: se que en el siguiente codigo que pongo hay html , sql , y php pero todo depende de todo no puedo separar nada para ponerlo en este post.


Código PHP:
Ver original
  1. <table class="contenedor_opcs" border="0" cellpadding="0" cellspacing="5" id="tabla_microfotos" bgcolor="#000000">
  2.    
  3.                     <?php
  4.                    
  5.                         $fotos = mysql_query("SELECT id,foto,comentario_foto FROM fotos_bbdd",$conexion);  
  6.  
  7.        
  8.                         $cuenta = 1;
  9.                         while ($foto = mysql_fetch_array($fotos)) {
  10.  
  11.                                 $mostrar_foto = $foto['foto'];  
  12.  
  13.                                 $cuenta++;
  14.                                
  15.                                
  16.                                 if ($cuenta%6 == 1) { echo "</tr><tr>"; }
  17.                                    
  18.                                      echo "
  19.                                
  20.                                         <td align='center' valign='middle' height='133px' width='145px'>
  21.                                        
  22.                                             <div id=$cuenta>                               
  23.                                        
  24.                                                     <a href='#' onClick='muestra_oculta('dock2')' title=''>                                    
  25.                                        
  26.                                                              <img src = '$mostrar_foto' class='sombra_blanca' style='max-height: 105px; max-width: 115px;'>                            
  27.                                        
  28.                                                     </a>                               
  29.                                        
  30.                                             </div>                             
  31.                                        
  32.                                         </td>                              
  33.  
  34.                                     ";
  35.                                
  36.                                 }
  37.                                                
  38.                     ?>
  39.  
  40.             </table>
  #2 (permalink)  
Antiguo 02/02/2014, 14:55
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema al mostrar imagenes desde una base de datos

Creo que con un poco más de orden, no tendrías ese inconveniente.

Código PHP:
Ver original
  1. <?php
  2. $fotos = mysql_query("SELECT id,foto,comentario_foto FROM fotos_bbdd", $conexion);  
  3. //Siempre debes comprobar que se hayan encontrado datos en la consulta
  4. if (mysql_num_rows($fotos)){
  5. ?>
  6.     <table class="contenedor_opcs" border="0" cellpadding="0" cellspacing="5" id="tabla_microfotos" bgcolor="#000000">
  7. <?php
  8.     $f = array();
  9.     while ($row = mysql_fetch_array($fotos))
  10.         $f[] = $row['foto'];
  11.  
  12.     $grupo = array_chunk($f, 6);
  13.  
  14.     foreach ($grupo as $sub_grupo){
  15. ?>
  16.         <tr>
  17. <?php
  18.         foreach ($sub_grupo as $foto){        
  19. ?>
  20.             <td align='center' valign='middle' height='133px' width='145px'>
  21.                 <a href='#' onClick='muestra_oculta('dock2')'>
  22.                     <img src = '<?=$foto?>' class='sombra_blanca' style='max-height: 105px; max-width: 115px;' />                            
  23.                 </a>                                
  24.             </td>
  25. <?php
  26.         }
  27. ?>
  28.         </tr>
  29. <?php
  30.     }
  31. ?>
  32.     </table>
  33. <?php
  34.     //Siempre libera a la memoria de los datos de la consulta cuando ya no los necesites
  35.     mysql_free_result($fotos);
  36. }
  37. else
  38.     echo "No se encontraron datos en la consulta;
  39. ?>

Con la función array_chunk, divido las fotos en grupos de a 6, luego solamente es cuestión de recorrer cada grupo o array e ir imprimiendo sus 6 fotos.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 02/02/2014 a las 15:17
  #3 (permalink)  
Antiguo 02/02/2014, 17:20
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Problema al mostrar imagenes desde una base de datos

Ha funcionado perfectamente!!!!!

Eres un fenomeno, mil gracias. por ayudarme y por enseñarme lo de la funcion array_chunk.

Y a recordarme que un codigo ordenado es mejor jejejee.


Pero te comento, cierto es que las miniaturas se muestran en filas de 6 fotos perfectamente.

La cuestion es que cuando hacia click en cada una de ellas la miniatura de foto se hacia grande y ahora no.

supongo que es debido a la reestructuracion del codigo que me has pasado.

el codigo que utilizo para ello me llevo un mes programarlo, ya se que es mejorable pero ahora no funciona

El efecto que hace el codigo siguiente que utilizo para ello es mostrar centrada en la pantalla un fondo negro con una opacidad mediana para que se vea un poco el fondo de la web, y la imagen sale

en grande centrada.


¿que puede ser alexis 88?


Código PHP:
Ver original
  1. <?php
  2.                            
  3.                                 $fotos = mysql_query("SELECT id,foto,comentario_foto FROM fotos_bbdd",$conexion);  
  4.                                  
  5.  
  6.                                  
  7.                                 $cuenta = 1;
  8.                                 while ($foto = mysql_fetch_array($fotos)) {
  9.                                    
  10.                                         $cuenta++;
  11.                                         if ($cuenta%6 == 1) echo "</tr></tr>";
  12.                                        
  13.                                         $mostrar_foto = $foto['foto'];
  14.                             ?>
  15.                  
  16.                             <!-- Bloque de contenido de cada imagen ======================================================================================= -->            
  17.                          
  18.                                         <div id="<?php echo 'foto_'.$cuenta; ?>" class="contenido" align="center">
  19.                                        
  20.                                         <!-- CENTRADO DE IMAGEN PARA TODOS LOS NAVEGADORES Y TAMAÑOS DE PANTALLA DE MANERA APROXIMADA===== -->                                                      
  21.                                             <table style="border-collapse: collapse" width="1680px" height="1000px" border="4" bordercolor="#ffffff" class="negro_opacidad">
  22.                                               <tr>
  23.                                                 <td align="center" valign="middle">    
  24.                                         <!-- ======================================================================================= -->            
  25.                                                
  26.                                                 <div class="contenido_foto">
  27.                                                
  28.                                                         <table border="0" class="tabla_fotos" style="background: #fff">
  29.                                                        
  30.                                                               <tr>
  31.                                                              
  32.                                                                 <td colspan="2" align="center">
  33.                    
  34.                                                                         <?php echo "<img src = '$mostrar_foto' style='max-height: 450px; max-width: 800px;' class='efecto_polaroid'>" ?>                                                      
  35.                                                                    
  36.                                                                 </td>
  37.  
  38.                                                               <tr/>
  39.                                      
  40.                                                              
  41.      
  42.                                                               <tr>                                                          
  43.                                                              
  44.                                                                 <td align="left">
  45.                                                    
  46.                                                                     <!-- TITULAR ================== -->
  47.                                                                    
  48.                                                                     <div class="titular_foto">
  49.                    
  50.                                                                         <?php echo $mostrar_id = $foto['id']; ?> <?php echo $mostrar_comentario_foto = $foto['comentario_foto']; ?><?php echo $cuenta; ?>
  51.                    
  52.                                                                     </div>  
  53.                            
  54.                                                                 </td>
  55.                                                
  56.                                                                 <td align="right">
  57.                                                                
  58.                                                                         <!-- EL "a href" SIGUIENTE ES PARA QUE AL HACER CLICK EN UNA MINIATURA PARA HACERLA GRANDE EL MENÚ DOCK DESAPAREZCA EN ESE MOMENTO,
  59.                                                    
  60.                                                                         LA PARTE DE JAVASCRIPT NECESARIA QUE FALTA ESTA EN EL INDEX SOBRE LA LINEA 122 APROXIMADAMENTE -->  
  61.                                  
  62.                                                                         <a href="#"onClick="muestra_oculta('dock2')" title="">  
  63.                                                                                              
  64.                                                                             <!-- BOTÓN CERRAR ============= -->
  65.                                                                            
  66.                                                                              <div class="btn_cerrar_foto">
  67.                                                                                                                
  68.                                                                                  <div id="1"> <img src="imagenes/btn_cerrar_foto.png" alt="Cerrar foto"/> </div>
  69.                                                      
  70.                                                                              </div>
  71.                                                                              
  72.                                                                         </a>
  73.                                                                                        
  74.                                                                 </td>    
  75.                                                                
  76.                                                               </tr>
  77.                                                              
  78.                                                         </table>              
  79.              
  80.                                                  </div>
  81.  
  82.                                                  
  83.                                         <!-- ======================================================================================= -->                                                        
  84.                                                 </td>
  85.                                               </tr>
  86.                                             </table>                        
  87.                                         <!-- ======================================================================================= -->            
  88.                                      
  89.                                         </div>
  90.                                  
  91.                                
  92.                                
  93.                     <!-- Fin de Bloque repetidor de imagenes ======================================================================================= -->                                            
  94.                                
  95.                             <?php } ?>

Última edición por mensajeescrito; 02/02/2014 a las 17:57
  #4 (permalink)  
Antiguo 02/02/2014, 18:40
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema al mostrar imagenes desde una base de datos

Eso lo haría con un poco de jQuery, algo de CSS, un Div y un elemento Img, ambos ocultos. En el mismo documento en donde está la tabla con las filas de 6 imágenes, coloca los dos elementos ocultos después de la tabla:

Código HTML:
Ver original
  1. <div id = "fondo"></div>
  2. <img id = "imagen" />

Ahora, aplico estilos al Div y al Img:

Código CSS:
Ver original
  1. #fondo, #imagen{
  2.     display: none;
  3.     position: absolute;
  4. }
  5.  
  6. #fondo{
  7.     background: rgba(0, 0, 0, 0.75);
  8.     top: 0;
  9.     left: 0;
  10.     z-index: 1000;
  11. }
  12.  
  13. #imagen{
  14.     width: 20em;
  15.     height: 15em;
  16.     margin: -7.5em 0 0 -10em;
  17.     top: 50%;
  18.     left: 50%;
  19.     z-index: 2000;
  20.     background: #fff;
  21. }
  22.  
  23. img:hover{
  24.     cursor: pointer;
  25. }

Y con jQuery, mostraremos las imágenes al darle un clic a cada una de ellas:

Código Javascript:
Ver original
  1. $("img").click(function(e){
  2.     e.preventDefault();
  3.     var ancho = $(window).width() * 2;
  4.         alto = $(window).height() * 2;
  5.  
  6.     $("#fondo").css({
  7.         "width": ancho,
  8.         "height": alto
  9.     });
  10.  
  11.     $("body").css("overflow", "hidden");
  12.  
  13.     $("#imagen").prop("src", $(this).prop("src"));
  14.  
  15.     $("#fondo, #imagen").fadeIn(1500);
  16. });
  17.  
  18. $("#fondo").click(function(){
  19.     $("#fondo, #imagen").fadeOut(1500);
  20.     $("body").css("overflow", "auto");
  21. });

Así es como se ve: http://jsbin.com/aSUnOwut/2

Para cerrar la imagen emergente y el fondo, solamente dale un clic al fondo. Con esto, los enlaces que le asignas a cada imagen, quedan sobrando.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 02/02/2014 a las 22:05
  #5 (permalink)  
Antiguo 06/02/2014, 10:47
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Problema al mostrar imagenes desde una base de datos

Hola Alexis88, se que he tardado en contestar a tu ultimo post pero es que he intentado todo el tiempo implementar el codigo que has hecho y al fin con exito.

he digamos enrriquecido un poquico mas si cabe implementandole el efecto de slimbox con efecto diapositiva y queda francamente bien.

Pero tengo un pequeño problema sin resolver. veras si cada foto lleva acompañada de un titulo guardado en la bbdd a cada foto.

¿qué y donde tendría que ponerlo en el codigo ?

Lo he intentado de mil manera y no hallo la manera de que cuando la imagen que sea se hace grande vaya acompañada de un titulo y/o un comentario, en definitiva los datos que se piden en el "select", soy novato y me cuesta un horror cada vez que avanzo un poco.

puedes ayudarme con eso plis.


Código PHP:
Ver original
  1. <?php
  2.                                     $fotos = mysql_query("SELECT id,foto,comentario_foto FROM fotos_bbdd", $conexion);  
  3.                                     //Siempre comprobar que se hayan encontrado datos en la consulta
  4.                                     if (mysql_num_rows($fotos)){
  5.                                     ?>
  6.                                         <table class="contenedor_opcs" border="0" cellpadding="0" cellspacing="5" id="tabla_microfotos" bgcolor="#000000">
  7.                                        
  8.                                     <?php
  9.                                         $f = array();
  10.                                         while ($row = mysql_fetch_array($fotos))
  11.                                             $f[] = $row['foto'];
  12.                                      
  13.                                         $grupo = array_chunk($f, 6);
  14.                                      
  15.                                         foreach ($grupo as $sub_grupo){
  16.                                     ?>
  17.                                             <tr>
  18.                                     <?php
  19.                                             foreach ($sub_grupo as $foto){        
  20.                                     ?>
  21.                                                  <td align='center' valign='middle' height='133px' width='145px'>
  22.                                    
  23.                                    
  24.                                   <!--style='max-height: 450px; max-width: 800px;'-->                                          
  25.                
  26.                                                
  27.                                                     <a href='<?=$foto?>' rel='lightbox' title='<?php echo $foto ?>'>
  28.                              
  29.                                                             <img src = '<?=$foto?>' class='sombra_blanca' style='max-height: 105px; max-width: 115px;' />
  30.                                                            
  31.                                                     </a>  
  32.                            
  33.                                      
  34.                                                 </td>
  35.                                     <?php
  36.                                             }
  37.                                     ?>
  38.                                             </tr>
  39.                                     <?php
  40.                                         }
  41.                                     ?>
  42.                                         </table>
  43.                                     <?php
  44.                                         //Siempre liberar a la memoria de los datos de la consulta cuando ya no necesite
  45.                                         mysql_free_result($fotos);
  46.                                     }
  47.                                     else
  48.                                         echo 'No se encontraron datos en la consulta';
  49.                                     ?>


Una cosa mas tengo la siguiente linea de css para restringir el tamaño de las fotos

a unos pixeles de ancho y alto como maximos cuando la imagen se agranda al hacer click sobre la miniatura.

el asunto es que me pasa lo mismo por mas que intento meter esta linea de codigo para ello , no me lo detecta , ¿en donde fallo?
Código CSS:
Ver original
  1. style='max-height: 450px; max-width: 800px;'


gracias por tu paciencia y tu ciencia
  #6 (permalink)  
Antiguo 07/02/2014, 01:31
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Problema al mostrar imagenes desde una base de datos

Se que es poca cosa pero me está volviendo loco.
No logro ver de que manera implementar lo que me falta para que me muestre el titulo y el comentario de la foto.
  #7 (permalink)  
Antiguo 07/02/2014, 13:22
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Problema al mostrar imagenes desde una base de datos

Cita:
Iniciado por mensajeescrito Ver Mensaje
Pero tengo un pequeño problema sin resolver. veras si cada foto lleva acompañada de un titulo guardado en la bbdd a cada foto.

¿qué y donde tendría que ponerlo en el codigo ?
Añádelo al array:

Código PHP:
Ver original
  1. $i = 0;
  2. while ($row = mysql_fetch_array($fotos)){
  3.     $f[$i]["foto"] = $row['foto'];
  4.     $f[$i]["titulo"] = $row['titulo'];
  5.     $i++;
  6. }

Y ya con esto puedes colocar la foto y el título:

Código PHP:
Ver original
  1. <tr>
  2. <?php
  3. foreach ($sub_grupo as $foto){        
  4. ?>
  5.     <td align='center' valign='middle' height='133px' width='145px'>
  6.         <h3><?=$foto["titulo"]?></h3>
  7.         <img src = '<?=$foto["foto"]?>' class='sombra_blanca' style='max-height: 105px; max-width: 115px;' />                    
  8.     </td>
  9. <?php
  10. }
  11. ?>
  12. </tr>

Cita:
Iniciado por mensajeescrito Ver Mensaje
Una cosa mas tengo la siguiente linea de css para restringir el tamaño de las fotos a unos pixeles de ancho y alto como maximos cuando la imagen se agranda al hacer click sobre la miniatura. El asunto es que me pasa lo mismo por mas que intento meter esta linea de codigo para ello , no me lo detecta , ¿en donde fallo?
Código CSS:
Ver original
  1. style='max-height: 450px; max-width: 800px;'
Probablemente el código que utilizas para agrandar las imágenes sea el que se imponga a la línea de código que me muestras, en tal caso, modifica el código para agrandar las imágenes.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 08/02/2014, 12:57
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Problema al mostrar imagenes desde una base de datos

Alexis88 eres un fenómeno.

Es perfecto, sale perfecto me has ayudado cantidad.

Te estoy enormemente agradecido.

Etiquetas: html, imagenes, mysql, select, sql, tabla
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 10:58.