Foros del Web » Programando para Internet » PHP »

Funcion para recuperar datos de una bbdd

Estas en el tema de Funcion para recuperar datos de una bbdd en el foro de PHP en Foros del Web. Hola. He realizado una funcion que realiza dos operaciones. una leer los datos de una bbdd y otra verificar si existe una imagen. El tema ...
  #1 (permalink)  
Antiguo 26/01/2012, 05:42
 
Fecha de Ingreso: diciembre-2008
Mensajes: 84
Antigüedad: 15 años, 4 meses
Puntos: 0
Funcion para recuperar datos de una bbdd

Hola.

He realizado una funcion que realiza dos operaciones. una leer los datos de una bbdd y otra verificar si existe una imagen.

El tema es que creo que la variable contador que he insertado es un poco "chapuza".

¿Alguien sabe como podría omitir dicha variable?

Adjunto el codigo

Código PHP:
function mostrar_productos($id_cat){
    
$mostrar = array();
    
$busca = @mysql_query("SELECT * FROM productos WHERE id_categoria LIKE '$id_cat'");
    
$resultados mysql_num_rows($busca);
    if (
$resultados != 0){
        
$contador 0;
        while (
$arrbusca mysql_fetch_assoc ($busca)){
            
$mostrar[] = $arrbusca;

            if (
file_exists('img_productos/producto'.$arrbusca['id'].'_1.jpg')){
                
$mostrar[$contador]['imagen'] = 'existe imagen';
            }else{
                
$mostrar[$contador]['imagen'] = 'no existe imagen';
            }
            
$contador++;
        }
    }else{
        
$mostrar[] = 'No hay productos';
    }    
    return 
$mostrar;
}
//--------------------------------
foreach (mostrar_productos(1) as $value) {
    echo 
'<strong>'.$value['imagen'].'</strong><br />';
    echo 
$value['nombre_producto'].'<br />';
    echo 
$value['unidades_producto'].'<br />';
    echo 
$value['descripcion_producto'].'<br />';

  #2 (permalink)  
Antiguo 26/01/2012, 07:27
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Funcion para recuperar datos de una bbdd

no hace falta el contador, puedes dejar los corchetes vacíos, automáticamente php asignará el indice incrementalmente
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 26/01/2012, 08:00
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Funcion para recuperar datos de una bbdd

maycolalvarez, eso mismo pensaba yo, pero es fundamental saber el índice para poner el otro índice "imagen" en la posición correcta.

No veo que problema te hace el uso de ese índice.

Pero si realmente te estorba prueba con este código

Código PHP:
Ver original
  1. if ($resultados != 0){
  2.   while ($arrbusca = mysql_fetch_assoc ($busca)){
  3.  
  4.          if (file_exists('img_productos/producto'.$arrbusca['id'].'_1.jpg')){
  5.              $arrbusca['imagen'] = 'existe imagen';
  6.          }else{
  7.              $arrbusca['imagen'] = 'no existe imagen';
  8.          }
  9.          $mostrar[] = $arrbusca;
  10.  
  11.      }
  12. }else{
  13.      $mostrar[] = 'No hay productos';
  14. }

Saludos.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)

Última edición por Ribon; 26/01/2012 a las 08:04 Razón: Ejemplo de como sacarlo
  #4 (permalink)  
Antiguo 26/01/2012, 08:12
 
Fecha de Ingreso: abril-2008
Ubicación: Santa Fe, Argentina
Mensajes: 41
Antigüedad: 16 años
Puntos: 14
Respuesta: Funcion para recuperar datos de una bbdd

Cita:
Iniciado por Ribon Ver Mensaje
maycolalvarez, eso mismo pensaba yo, pero es fundamental saber el índice para poner el otro índice "imagen" en la posición correcta.
Por que? No hay tal cosa como posicion correcta. $contador va desde 0 hasta n, siendo n la cantidad de productos obtenido. $contador no corresponde a producto.id, cosa bastante inintuitiva.

Tu solucion cambia la logica del programa del OP, al corregir lo que mencione al final.
  #5 (permalink)  
Antiguo 26/01/2012, 08:24
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Funcion para recuperar datos de una bbdd

No entendí tu crítica xD!
yo nunca confundí producto.id con $contador o.o
yo hablaba de índices de array.

Saludos.

y mi solución lo que hace es agregarle el índice 'imagen' al array que contiene el fetch result para luego asignarlo al array mostrar que contendrá todo al final.

Saludos.
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #6 (permalink)  
Antiguo 26/01/2012, 09:46
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Funcion para recuperar datos de una bbdd

existen funciones para devolver el indice como array_keys , además con el mismo foreach te lo da:

Código PHP:
foreach (mostrar_productos(1) as $key => $value) {
    echo 
'<strong>'.$value['imagen'].'</strong><br />';
    echo 
$value['nombre_producto'].'<br />';
    echo 
$value['unidades_producto'].'<br />';
    echo 
$value['descripcion_producto'].'<br />';

$key => $value


además la línea:

$mostrar[] = $arrbusca;

deberías asignarla al final y ser $arrbusca la que modifiques, así:

Código PHP:
  //...
            
if (file_exists('img_productos/producto'.$arrbusca['id'].'_1.jpg')){ 
                
$arrbusca['imagen'] = 'existe imagen'
            }else{ 
                
$arrbusca['imagen'] = 'no existe imagen'
            } 

            
$mostrar[] = $arrbusca
recuerda que no es necesario el contador, porque el índice siempre inicia de 0, exactamente lo que hace tu variable contadora, realmente NO lo necesitas, estás creando más código innecesario
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Última edición por maycolalvarez; 26/01/2012 a las 09:52
  #7 (permalink)  
Antiguo 26/01/2012, 10:11
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Funcion para recuperar datos de una bbdd

Lo de modificar arrbusca, eso fue lo que hice en mi ejemplo

Saludos
__________________
Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :)
qué es esto? :O -> http://i48.tinypic.com/5x3kzs.png
Ya sabes :)
  #8 (permalink)  
Antiguo 26/01/2012, 10:14
 
Fecha de Ingreso: diciembre-2008
Mensajes: 84
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Funcion para recuperar datos de una bbdd

Muchas gracias a todos

dejo el codigo como ha quedado al final...

Código PHP:
function mostrar_productos($id_cat){
    
$mostrar = array();
    
$busca = @mysql_query("SELECT * FROM productos WHERE id_categoria LIKE '$id_cat'");
    
$resultados mysql_num_rows($busca);
    if (
$resultados != 0){
        while (
$arrbusca mysql_fetch_assoc ($busca)){
            if (
file_exists('img_productos/producto'.$arrbusca['id'].'_1.jpg')){
                
$arrbusca['imagen'] = 'existe imagen';
            }else{
                
$arrbusca['imagen'] = 'no existe imagen';
            }
            
$mostrar[] = $arrbusca;
        }
    }else{
        
$mostrar[] = 'No hay productos';
    }    
    return 
$mostrar;
}
//--------------------------------
foreach (mostrar_productos(1) as $value){
    if (
is_array($value)){
        echo 
'<pre>';
        
print_r($value);
        echo 
'</pre>';
    }else{
        echo 
$value;
    }

  #9 (permalink)  
Antiguo 26/01/2012, 10:15
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Funcion para recuperar datos de una bbdd

@Ribon, cierto, no lo vi!!! +karma
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: bbdd, funcion, mysql, variables
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 18:25.