Foros del Web » Programando para Internet » PHP »

While

Estas en el tema de While en el foro de PHP en Foros del Web. hola buenas tardes hay alguna manera de saber si un while esta en la ultima vez que va a entrar pro el?¿ o hacer que ...
  #1 (permalink)  
Antiguo 02/07/2003, 07:46
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
While

hola buenas tardes hay alguna manera de saber si un while esta en la ultima vez que va a entrar pro el?¿ o hacer que entre una vez mas por el, es decir
Código PHP:
while($resultados mysql_fetch_array($consulta)) 
pero que entre una vez mas

Un Saludo

Última edición por DINASEN; 02/07/2003 a las 07:53
  #2 (permalink)  
Antiguo 02/07/2003, 07:49
Avatar de Sav1989  
Fecha de Ingreso: junio-2003
Ubicación: Cap Fed | Colegiales
Mensajes: 50
Antigüedad: 20 años, 10 meses
Puntos: 0
no enendi bien la pregunta.. queres poner el tiempo cuadno termina el bucle? queres que printee algo cuando termina? no entiendo bien.
  #3 (permalink)  
Antiguo 02/07/2003, 07:51
V_G
Invitado
 
Mensajes: n/a
Puntos:
DINASEN, ¿podrías explicarte mejor?
  #4 (permalink)  
Antiguo 02/07/2003, 07:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

No entiendo muy bien la pregunta. El while() no sabe cuantas veces se va a ejecutar, asi que tambien le es imposible saber si esta en la anterior. El while() solo evalua la condicion, si es true ejecuta un nuevo bucle, y si es false continua con el codigo posterior al while.

Como mucho podrias hacer tu una recomprobacion de la condicion, despues de la actualizacion de los valores que intervienen en la condicion. Pero dependiendo de la condicion, esto puede ser imposible (como en el caso de while(mysql_fetch_array()), ya que realiza una accion).

Pero tambien podrias replantear el bucle (usando while o no) para saber cuando va a dejar de ejecutar el bucle.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 02/07/2003, 07:55
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
loq ue quiero es que entre una vez mas de los que le indicamos asi
Código PHP:
while($resultados mysql_fetch_array($consulta)) 
o una vez que es while se ejecuta y esta dentrop de el sabe si ya no va a entrar mas veces pero creo que eso se chequea al principio asi que lo segundo no se puede verdad?¿

Un Saludo
  #6 (permalink)  
Antiguo 02/07/2003, 07:55
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
No, no se puede. Hay que buscar alguna alternativa.
__________________
M a l d i t o F r i k i
  #7 (permalink)  
Antiguo 02/07/2003, 08:00
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
ok ya lo solucione con una simple variable depues del bucle

Gracias
  #8 (permalink)  
Antiguo 02/07/2003, 08:01
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Vaya, si vas dando mas datos mientras escribo mis mensajes, no voy a dar en clavo

Bien, en este caso en concreto tiene facil solucion. Cambia tu bucle por algo como:
Código PHP:
$total_reg=mysql_num_rows($consulta);  //sabemos el numero total de registros
for ($i=0;$resultados mysql_fetch_array($consulta);$i++) { // asi, ademas de recorrer el recordset, llevamos un contador del registro leido
  
if ($total_reg==$i+1) {
    
//esta es la ultima vez que se ejecuta el bucle
    //el +1 es porque $i empieza en 0.
  
}

Asi de cabeza. Si no te sale, juega con la condicion del if.

Saludos.

PD: Tambien podrias dejarlo con el while y llevar el contador "a mano" dentro del while, si lo ves asi mas claro.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 02/07/2003, 08:06
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
pero lo que no entiendo es pro que el while entra 3 veces si tengo dos registros en mi base de datos

Un Saludo
  #10 (permalink)  
Antiguo 02/07/2003, 08:12
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Haz un echo mysql_num_rows($consulta); para saber el numero de registros que devuelve la consulta. Aunque en una tabla solo haya dos registros, una consulta sobre esa tabla puede devolver n registros. E incluso puede ser de que si haya 3 registros en la BD.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 02/07/2003, 08:13
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
si ya lo hize y me devuelve dos que son los que hay pero el while entra tres veces pro que puse un contador para ver que pasaba

Un Saludo
  #12 (permalink)  
Antiguo 03/07/2003, 20:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El While te dá tres "pasadas" a tu bucle pues la condición es "mientras" la condición se cumpla.

El mysql_fetch_array dice en su definición que te devuelve los N registro de tu consulta y (ese Y es el que manda) un FALSE cuando no encuentra más registros que mostrar .. Por ende son N registros de tu consulta realizada+1 las iteracciones que dá (o por lo menos así lo entiendo yo ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 04/07/2003, 01:34
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Cluster, creo que te estas liando.

El while() ese es equivalente a este otro:
Código PHP:
while(false!=($resultados mysql_fetch_array($consulta))) {
//bucle

Es decir, mientras mysql_fetch_array() no devuelva falso.

Esto a su vez seria equivalente a este if:
Código PHP:
etiqueta:
  if (
false!=($resultados mysql_fetch_array($consulta))) {
  
// bucle
    
salta etiqueta;  //pseudo instruccion que hace que la siguiente instruccion a ejecutar sea la marcada con 'etiqueta'
  

Es decir, en tu caso, la condicion se evalua 3 veces (2 registros y 1 el FALSE), y el bucle solo se deberia ejecutar 2 veces (los dos registros). Esto siempre y cuando no se modifique el "recordset" con alguna funcion tipo mysql_seek() o semejante.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 21:46.