Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/04/2009, 13:20
MauXXI
 
Fecha de Ingreso: junio-2008
Mensajes: 51
Antigüedad: 15 años, 10 meses
Puntos: 2
De acuerdo [SOLUCIONADO] Retornar un array en un bucle desde una función

Creo que mi problema es un pco específico.
Lo que quiero lograr es imprimir una serie de opciones guardadas en la base de datos mediante la inicialización de una función.

El código sería este:
Código php:
Ver original
  1. function opciones() {
  2. // Utilizo global $sql_c; para que la función pueda conectarse a la base de datos
  3. // mediante una variable inicializada exteriormente
  4. global $sql_c;
  5. // La variable $options no podía usarla fuera de la función hasta que la incializé
  6. // mediante la palabra clave global
  7. global $options;
  8.     $opcion = mysql_query("SELECT * FROM opciones", $sql_c)
  9.         or die (mysql_error());
  10.     if ($opcion=='') {
  11.         // Retorno este array por si no existen entradas en la base de datos
  12.         return $options = array('id'=>'0','nombre'=>'Todavía no hay opciones');
  13.     }
  14.     else {
  15.         return $options = mysql_fetch_array($opcion);
  16.     }
  17. }

Fuera del código PHP sería así:
Código html:
Ver original
  1. <select name="opcion" id="opcion">
  2. <?php while (opciones()) : ?>
  3.     <option value="<?php echo $options['id']; ?>"><?php echo $options['nombre']; ?></option>
  4. <?php endwhile; ?>

Ahora el problema es que el bucle es infinito y no sé porqué. El bucle imprime unicamente la primer fila de la tabla de la base de datos.
También use print_r(opciones()); por si el array contenía algún error y el resultado fue:

Array ( [0] => 2 [id] => 2 [1] => prueba 1 [nombre] => prueba 1 )

Es decir que el array está perfecto pero el bucle no reconoce nada más allá del primer objeto.

Desde ya muchas gracias.

- SOLUCIÓN -
Ahora que lo solucioné les dejo la solución.
Ahora creé una nueva función a la cual solo hay que pasarle el nombre de la tabla de la que quiero obtener las opciones:
Código PHP:
function lista($tabla) {
    global 
$sql_c// Hago esto porque mis datos de conexión los tengo fuera de la función
    
$reg mysql_query("SELECT * FROM $tabla"$sql_c)
    or die (
"Problemas al obtener los resultados de la tabla ".$tabla." porque: " mysql_error());
    if (
$reg == '') {
        echo 
"<option value=\"0\">Todavía no hay registros</option>
            "
;
    }
    else {
        while (
$a mysql_fetch_array($reg)) :
        echo 
"<option value=\"".$a['id']."\">".$a['nombre']."</option>
            "
;
        endwhile;
    }

Luego para mostrar la lista lo hago de la siguiente manera:
Código HTML:
<select name="opcion" id="opcion">
	<?php lista(tabla1); ?> <!-- Aqui logro obtener todos los registros de la tabla1 -->
</select> 

Gracias a todos y más a mi porque lo solucioné yo :P

Saludos

Última edición por MauXXI; 17/04/2009 a las 12:27 Razón: Solucionado