Foros del Web » Programando para Internet » PHP »

Repetir mismo while dos veces

Estas en el tema de Repetir mismo while dos veces en el foro de PHP en Foros del Web. Hola, Me ha surgido un problema al poner dos veces el mismo bucle while (misma condición pero el código que se repite dentro del while ...
  #1 (permalink)  
Antiguo 24/06/2013, 08:28
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 11 años, 11 meses
Puntos: 1
Repetir mismo while dos veces

Hola,

Me ha surgido un problema al poner dos veces el mismo bucle while (misma condición pero el código que se repite dentro del while es diferente en cada uno).

Por lo que he visto en esta entrada del foro http://www.forosdelweb.com/f18/repetir-while-922369/ no se puede repetir dos veces el mismo bucle while a no ser que lo encapsules en una función.

Este es mi código:

Código PHP:

    
//Si existe el recordset $datos_clientes...
    
if($datos_clientes){
                        
        
//Si hay algún registro en el recordset
        
if(mysqli_num_rows($datos_clientes)!=0){
            
            
//Abrimos un buffer
            
ob_start();
            
            
//Para cada cliente de la BBDD...
            
while($linea=mysqli_fetch_array($datos_clientes)){              
                
                
//Variables para el html (elemento-cliente.php)
                
$id_cliente=$linea['id_cliente'];
                
$formulario_borrar="index.php?vista=baja-clientes&id=$id_cliente";
                
$formulario_editar="index.php?vista=edicion-clientes&id=$id_cliente";
                
$nombre_empresa_cliente=$linea['nombre_empresa_cliente'];
                
                
//Incluimos el html con la plantilla del elemento tipo cliente
                
include('./site-media/html/modules/clientes/elemento-cliente.php');
                
            }
            
            
//Capturamos el buffer en una variable para la vista html (resultados.php) y lo cerramos
            
$contenido_elemento=ob_get_clean();
        
        }else{...

.
.
.
.
.
.
.

...
Y SE REPITE LA MISMA ESTRUCTURA...

    
//Si existe el recordset $datos_clientes...    
    
if($datos_clientes){
        
        
//Creamos un array para guardar los mails de los clientes...    
        
$mails_clientes=array();
        
        
//Si hay algún registro en el recordset
        
if(mysqli_num_rows($datos_clientes)!=0){
                         
            
//Para cada cliente de la BBDD...
           
            
while($linea=mysqli_fetch_array($datos_clientes)){
                
                
//Obtenemos el mail del cliente...
                
$mail_cliente=$linea['mail_cliente'];
                                
                
//Lo añadimos al array...
                
$mails_clientes[]=$mail_cliente;                
                
//Guardamos el array en una variable de sesión.
                
$_SESSION['mails_clientes']=$mails_clientes;
                                
            }
                        
        }
        
    } 
Tengo varias consultas al respecto:

- La primera: ¿como encapsulo el while en una función como se comenta en la entrada que he indicado?
- La segunda: ¿Alguien sabe el porque de este comportamiento. Es un tema de PHP o ocurre en más lenguajes?
- La tercera (y última):¿Ocurre lo mismo con otras estructuras de control (for, foreach...)?

Muchas gracias desde ya a todos.

Un saludo,

GMG
  #2 (permalink)  
Antiguo 24/06/2013, 08:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Repetir mismo while dos veces

A ver, piensa un poco, una estructura de control es irrepetible por naturaleza, si buscas que así suceda debes buscar caminos como ya lo has descrito.

No hay nada extraño ni es nada en especifico de PHP, así lo puedes comprobar en otros los lenguajes.

Para eso existen estructuras de control e iterativas, si buscas que cierta estructura se repita ahí mismo debes usar una estrutura iterativa.

Si buscas ejecutar dicha estructura de manera no inmediata entonces debes encapsularla.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/06/2013, 08:46
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Repetir mismo while dos veces

Cita:
Iniciado por pateketrueke Ver Mensaje
A ver, piensa un poco, una estructura de control es irrepetible por naturaleza, si buscas que así suceda debes buscar caminos como ya lo has descrito.

No hay nada extraño ni es nada en especifico de PHP, así lo puedes comprobar en otros los lenguajes.
Gracias pateketrueke,

Y tendrías a bien explicarme como meterlo en una función, porque no me queda claro como hacerlo.

Un saludo,

GMG
  #4 (permalink)  
Antiguo 24/06/2013, 08:48
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Repetir mismo while dos veces

Cita:
Iniciado por pateketrueke Ver Mensaje
A ver, piensa un poco, una estructura de control es irrepetible por naturaleza, si buscas que así suceda debes buscar caminos como ya lo has descrito.

No hay nada extraño ni es nada en especifico de PHP, así lo puedes comprobar en otros los lenguajes.

Para eso existen estructuras de control e iterativas, si buscas que cierta estructura se repita ahí mismo debes usar una estrutura iterativa.

Si buscas ejecutar dicha estructura de manera no inmediata entonces debes encapsularla.
puede ser porque vuelca los datos en $linea y la segunda vez que los intenta volcar ya los tenía por lo que no se le cumple el while? es que esto no lo tengo claro tampoco.
pienso que si tal vez cambia el nombre de la vaiable $linea por $linea2 pueda funcionarle? eso sí, antes de que termine la ejecución del script no?
  #5 (permalink)  
Antiguo 24/06/2013, 09:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Repetir mismo while dos veces

Para poder encapsular dicha estructura en una función debes pensar en el contexto actual de la misma, no puedes copiar y pegar dicha estructura sin pensar en eso.

¿Qué es lo que requiere dicha estructura para funcionar?

Despejando esa incognita ya puedes definir las dependencias de contexto de la función.

Conexión a base de datos, variables de usuario, configuración, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 24/06/2013, 09:16
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Repetir mismo while dos veces

Cita:
Iniciado por pateketrueke Ver Mensaje
Para poder encapsular dicha estructura en una función debes pensar en el contexto actual de la misma, no puedes copiar y pegar dicha estructura sin pensar en eso.

¿Qué es lo que requiere dicha estructura para funcionar?

Despejando esa incognita ya puedes definir las dependencias de contexto de la función.

Conexión a base de datos, variables de usuario, configuración, etc.
Bueno... Vamos a intentarlo. Gracias por las pistas.

¿Me recomiendas alguna lectura al respecto de este tema?

Si me veo muy apurado abriré un tema nuevo.

Un saludo,

GMG
  #7 (permalink)  
Antiguo 24/06/2013, 11:22
 
Fecha de Ingreso: abril-2013
Ubicación: bogota
Mensajes: 9
Antigüedad: 11 años
Puntos: 0
Respuesta: Repetir mismo while dos veces

Pues, por que no utiliza el bucle FOR, es casi lo mimo simplemente me parece mas comodo y mas facil.
con while tendria que ponerlos en orden primero necesita que el primer bucle se relacione con lo que va ha realizar el segundo bucle, por ejemplo:

while ($reg=mysql_fetch_array($registros)) {
while ($reg2=mysql_fetch_array($registros2)) {

echo "Transporte:".$reg['transporte']."<br>";
echo "Sucursal:".$reg['sucursal']."<br>";

echo "Nombre:".$reg2['nombre']."<br>";
echo "Apellido:".$reg2['ape']."<br>";

reg y reg2, son busquedas en la base de datos, asi que el primer mientras el primer while busca en reg, cuando encuentra los datos, sigue el siguiente while (reg2) y asi sucesivamente.
No se si esto era lo que buscaba exactamente pero es un ejemplo de ocmo utilizar dos while en una funcion.
  #8 (permalink)  
Antiguo 24/06/2013, 11:49
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: Repetir mismo while dos veces

Cita:
Iniciado por oskarczo Ver Mensaje
Pues, por que no utiliza el bucle FOR, es casi lo mimo simplemente me parece mas comodo y mas facil.
con while tendria que ponerlos en orden primero necesita que el primer bucle se relacione con lo que va ha realizar el segundo bucle, por ejemplo:

while ($reg=mysql_fetch_array($registros)) {
while ($reg2=mysql_fetch_array($registros2)) {

echo "Transporte:".$reg['transporte']."<br>";
echo "Sucursal:".$reg['sucursal']."<br>";

echo "Nombre:".$reg2['nombre']."<br>";
echo "Apellido:".$reg2['ape']."<br>";

reg y reg2, son busquedas en la base de datos, asi que el primer mientras el primer while busca en reg, cuando encuentra los datos, sigue el siguiente while (reg2) y asi sucesivamente.
No se si esto era lo que buscaba exactamente pero es un ejemplo de ocmo utilizar dos while en una funcion.

Hola oskarczo,

El problema no es hacer dos while "diferentes" referidos a dos llamadas diferentes a la BBDD, se trata del mismo while, para una sola consulta a la BBDD. Si no me queda más remedio que acceder dos veces a la BBDD para obtener la misma información tendré que hacerlo, pero no es la idea puesto que no es lógico...

En cualquier caso gracias por participar.

Un saludo,

GMG

Etiquetas: formulario, html, registro, repetir, sql, variables, veces
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 07:58.