Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Loop for indefinido

Estas en el tema de Loop for indefinido en el foro de PHP en Foros del Web. hola amigos, los molesto con una consulta, que seguramente es muy básica, pero no se como resolverlo como hago para crear un loop for que ...
  #1 (permalink)  
Antiguo 09/01/2014, 21:57
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Loop for indefinido

hola amigos, los molesto con una consulta, que seguramente es muy básica, pero no se como resolverlo
como hago para crear un loop for que se ejecute indefinidamente?

la consulta es:

$c= "select * from cartelera";
$r= mysqli_query($db, $c) or die (mysqli_error($db));
$n= mysqli_num_rows($r);

for ($i=;$i<$n;$i++)
{

}

obviamente debo cambiar esa condición del loop que dice $i<$n ya que quiero que sea indefinido, pero que condición debo ponerle??
saludos y gracias
ariel
  #2 (permalink)  
Antiguo 09/01/2014, 22:15
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Loop for indefinido

¿Y para qué quieres que itere de forma indefinida? ¿Tienes idea de la cantidad de recursos que consumiría ese proceso?

Sería bueno saber el propósito que tienes con esto para poder orientarte correctamente porque lo que pretendes hacer, no es bueno.

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
  #3 (permalink)  
Antiguo 10/01/2014, 05:13
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 10 meses
Puntos: 11
Respuesta: Loop for indefinido

Hola Apus, lo primero que debes saber, es que php tiene un tiempo maximo de ejecucion, es decir, si un script php tarda mas de 60 segundos en ejecutarse, se cancela su ejecucion para no colapsar el sistema. Obviamente esos 60 segundos se pueden agrandar, pero por seguridad, tiene que tener un maximo.

Lo que intentas hacer de un bucle infinito, no es una buena opcion, dinos lo que quieres que te haga el codigo y te ayudamos a buscar una alternativa.
  #4 (permalink)  
Antiguo 10/01/2014, 10:34
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Loop for indefinido

Muchas gracias a ambos por sus respuestas, y efectivamente tienen toda la razón, y ahora que leo explique mal mi consulta, lo que necesito hacer es lo siguiente
suponiendo que tengo una tabla en la db con 5 elementos, y quiero ir mostrando cada uno 1 x 1 a medida que se actualiza la pagina, hasta que recorra los 5 elementos, y luego vuelva a comenzar
como puedo hacer eso?
Desde ya mil gracias
Saludos
  #5 (permalink)  
Antiguo 10/01/2014, 10:43
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 15 años, 4 meses
Puntos: 27
Respuesta: Loop for indefinido

Cita:
Iniciado por apustilnik Ver Mensaje
Muchas gracias a ambos por sus respuestas, y efectivamente tienen toda la razón, y ahora que leo explique mal mi consulta, lo que necesito hacer es lo siguiente
suponiendo que tengo una tabla en la db con 5 elementos, y quiero ir mostrando cada uno 1 x 1 a medida que se actualiza la pagina, hasta que recorra los 5 elementos, y luego vuelva a comenzar
como puedo hacer eso?
Desde ya mil gracias
Saludos
Lo que vos queres es que si se accede a la pagina te muestre el registro 1, actualizar pagina y te muestra el 2, si se actualiza nuevamente el 3 y asi sucesivamente?

O lo que queres es un slider como esto?
http://www.menucool.com/javascript-image-slider
  #6 (permalink)  
Antiguo 10/01/2014, 11:24
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Loop for indefinido

Exactamente eso!! que muestre el registro 1, al actualizar el registro 2 y asi sucesivamente
Cita:
Iniciado por luis010182 Ver Mensaje
Lo que vos queres es que si se accede a la pagina te muestre el registro 1, actualizar pagina y te muestra el 2, si se actualiza nuevamente el 3 y asi sucesivamente?

O lo que queres es un slider como esto?
http://www.menucool.com/javascript-image-slider
  #7 (permalink)  
Antiguo 10/01/2014, 11:56
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 15 años, 4 meses
Puntos: 27
Respuesta: Loop for indefinido

guarda el id del registro que estas mostrando en una variable de session, y haces la consulta a la base y en el where pones que sea mayor al id de session.
  #8 (permalink)  
Antiguo 10/01/2014, 13:31
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 10 meses
Puntos: 11
Respuesta: Loop for indefinido

Pues eso :)

Esa seria la forma.
  #9 (permalink)  
Antiguo 10/01/2014, 19:01
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Loop for indefinido

buena idea, vamos a probar y te cuento que onda
muchas gracias por la respuesta
Cita:
Iniciado por luis010182 Ver Mensaje
guarda el id del registro que estas mostrando en una variable de session, y haces la consulta a la base y en el where pones que sea mayor al id de session.
  #10 (permalink)  
Antiguo 11/01/2014, 16:27
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Loop for indefinido

hola luis, te molesto nuevamente, estuve probando mediante una id de sesión como me comentaron, pero eso no funciona, no hace lo que necesito, que es justamente lo que tu me comentaste, o sea que vaya pasando de un registro al siguiente, cada vez que se actualiza la pagina, y una vez que llega al fina, que vuelva a comenzar el blucle, como puedo hacer eso?
desde ya muchas gracias
saludos
Cita:
Iniciado por luis010182 Ver Mensaje
Lo que vos queres es que si se accede a la pagina te muestre el registro 1, actualizar pagina y te muestra el 2, si se actualiza nuevamente el 3 y asi sucesivamente?

O lo que queres es un slider como esto?
http://www.menucool.com/javascript-image-slider
  #11 (permalink)  
Antiguo 14/01/2014, 12:05
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 10 meses
Puntos: 11
Respuesta: Loop for indefinido

Hola Apus, como veo que Luis anda ocupado, te comento:

No se que secuencia habras seguido, pero la forma correcta es la que te ha dicho Luis, verifica esto:

1. Entro en la pagina por primera vez, comprobando si la session existe:
1.1 Si existe, sigo avanzado.
1.2 Si no existe, creo la session poniendo como valor el primero.
2. creo la consulta sql con el valor que hay en la sesion (En este punto te da lo mismo si es el primero y otro, lo coje directamente de la sesion).
4. Compruebo si el valor que tiene ahora la sesion es el ultimo.
4.1 Si no lo es, cambio el valor de la sesion guardada al siguiente.
4.2 Si lo es, cambio el valor de la sesion guardada por el primero.
5. Muestro los datos obtenidos de la consulta.
6. Actualizo la pagina y vuelvo al punto 1.

Otra forma de hacerlo, es mediante formularios y parametros en la direccion web o mediante un input de tipo hidden. Pero eso ya es opcional.
  #12 (permalink)  
Antiguo 15/01/2014, 12:19
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Loop for indefinido

Estimado amigo, antes que nada mil gracias por tu respuesta
estuve leyendo un poco, y mas o menos entendí como es, pero para trasladarlo al ejemplo en concreto, supongamos que mi código es este

$consulta= "select * from recomendados order by id desc";
$respuesta= musqli_query($db, $consulta) or die (mysqli_error($db));
$n= mysqli_num_rows($respuesta);

for ($i=0; $i<$n; $i++)
{
// aquí es donde se muestran los resultados del loop
}

Entonces la consulta básicamente seria, que debo modificar en este código de arriba para que al actualizar la pagina me vaya mostrando, los registros en este caso en orden descendente, y que cuando llegue al ultimo el loop vuelva a comenzar.
CABE ACLARAR ALGO MUY IMPORTANTE, QUE YO VOY A MOSTRAR LOS REGISTROS, DE A UNO X UNO, O SEA CADA VEZ QUE SE ACTUALICE LA PAGINA SE MUESTRA SOLO UN REGISTRO, Y LA IDEA ES QUE CUADO SE ACTUALICE LA PAGINA MUESTRE EL QUE SIGUE, Y ASI SUCESIVAMENTE
Desde ya mil gracias nuevamente
Saludos cordiales.
ariel
Cita:
Iniciado por razierplus2 Ver Mensaje
Hola Apus, como veo que Luis anda ocupado, te comento:

No se que secuencia habras seguido, pero la forma correcta es la que te ha dicho Luis, verifica esto:

1. Entro en la pagina por primera vez, comprobando si la session existe:
1.1 Si existe, sigo avanzado.
1.2 Si no existe, creo la session poniendo como valor el primero.
2. creo la consulta sql con el valor que hay en la sesion (En este punto te da lo mismo si es el primero y otro, lo coje directamente de la sesion).
4. Compruebo si el valor que tiene ahora la sesion es el ultimo.
4.1 Si no lo es, cambio el valor de la sesion guardada al siguiente.
4.2 Si lo es, cambio el valor de la sesion guardada por el primero.
5. Muestro los datos obtenidos de la consulta.
6. Actualizo la pagina y vuelvo al punto 1.

Otra forma de hacerlo, es mediante formularios y parametros en la direccion web o mediante un input de tipo hidden. Pero eso ya es opcional.
  #13 (permalink)  
Antiguo 15/01/2014, 20:06
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Loop for indefinido

el mensaje que vale es el de arriba
Cita:
Iniciado por razierplus2 Ver Mensaje
Hola Apus, como veo que Luis anda ocupado, te comento:

No se que secuencia habras seguido, pero la forma correcta es la que te ha dicho Luis, verifica esto:

1. Entro en la pagina por primera vez, comprobando si la session existe:
1.1 Si existe, sigo avanzado.
1.2 Si no existe, creo la session poniendo como valor el primero.
2. creo la consulta sql con el valor que hay en la sesion (En este punto te da lo mismo si es el primero y otro, lo coje directamente de la sesion).
4. Compruebo si el valor que tiene ahora la sesion es el ultimo.
4.1 Si no lo es, cambio el valor de la sesion guardada al siguiente.
4.2 Si lo es, cambio el valor de la sesion guardada por el primero.
5. Muestro los datos obtenidos de la consulta.
6. Actualizo la pagina y vuelvo al punto 1.

Otra forma de hacerlo, es mediante formularios y parametros en la direccion web o mediante un input de tipo hidden. Pero eso ya es opcional.
  #14 (permalink)  
Antiguo 16/01/2014, 04:17
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 10 meses
Puntos: 11
Respuesta: Loop for indefinido

mmmmm. Bueno hay varias formas de hacerlo, o bien con sessiones o con un parametro en la direccion web.

Te explicare con este segundo método ya que es mas facil, el codigo seria este:

Código PHP:
Ver original
  1. // Imaginemos que entramos en la pagina por primera vez, la url seria www.lapagina.es
  2. //Primero averiguamos si el parametro id, que usaremos posteriormente, existe
  3. if(isset($_GET["id"]) && $_GET["id"] != ""){
  4.   //En caso de que exista y que no sea un valor nulo, se coje el valor, de la url
  5.   $id = $_GET["id"];
  6. }else{
  7.   // En caso contrario se cojera el id 1
  8.   $id = 1;
  9. }
  10.  
  11. //Como tenemos el id, sea cual sea, se procede a formular la consulta
  12. $sql = "SELECT * FROM tabla WHERE id='$id' LIMIT 1";
  13. if($consulta = mysqli_query($conexion, $sql)){
  14.   //La consulta se ha ejecutado correctamente, comprobamos si ha devuelto algún valor.
  15.   if(mysqli_affected_rows($conexion) > 0){
  16.       //Hay datos, los mostramos
  17.       $datos = mysqli_fetch_assoc($consulta);
  18.       //Aqui ya se pondria el codigo para mostrar los datos.
  19.       //Creariamos un enlace, para mostrar el siguiente registro, o el anterior.
  20.      $urlSiguiente = "www.mipagina.es?id=".$id+1;
  21.      echo "<a href=$urlSiguiente>Siguiente</a>
  22.     //Se puede crear el enlace anterior, pero hay que tener en cuenta que si el registro es el primero, es mejor no mostrarlo, para ello ya no pongo el codigo ya que se supone que sabes hacerlo.
  23.  
  24.     $urlAnterior = "www.mipagina.es?id=".$id-1;
  25.     // Al pulsar sobre el enlace, se debería cargar el siguiente id y asi sucesivamente.
  26.  
  27.  }else{
  28.      //No se han encontrado registros.
  29.      echo "Sin datos a mostrar";
  30.  }
  31. }else{
  32.  //Se ha producido un error en la consulta, lo mostramos
  33.  echo "ERROR:<br>$sql<br>".mysqli_error($conexion);
  34. }

Espero que te sirva.
  #15 (permalink)  
Antiguo 17/01/2014, 11:37
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 15 años, 2 meses
Puntos: 6
Respuesta: Loop for indefinido

Muchisimas gracias por la respuesta y tomarte el tiempo de enviarme el código de ejemplo, el cual voy a probar a ver que onda
Y te cuento también que se podría decir que lo resolvi de la siguiente forma
hago esta consulta:

$c= "select * from cartelera order by rand();

Entonces agregue un botoncito (mas alla de que mi pagina se acualiza cada 15 segundos) de refresh, cosa que si el usuario desea actualizarlo en cualquier momento, pueda hacerlo
El único detalle del "order by rand()" es que puede pasar que aunque la pagina se actualice, vuelva a mostrar el mismo registro, pero en general funciona bien y cumple el objetivo de ir mostrando los diferentes registros (aunque desordenados, por eso venia mi consulta)
pero ahí vamos
saludos

Cita:
Iniciado por razierplus2 Ver Mensaje
mmmmm. Bueno hay varias formas de hacerlo, o bien con sessiones o con un parametro en la direccion web.

Te explicare con este segundo método ya que es mas facil, el codigo seria este:

Código PHP:
Ver original
  1. // Imaginemos que entramos en la pagina por primera vez, la url seria www.lapagina.es
  2. //Primero averiguamos si el parametro id, que usaremos posteriormente, existe
  3. if(isset($_GET["id"]) && $_GET["id"] != ""){
  4.   //En caso de que exista y que no sea un valor nulo, se coje el valor, de la url
  5.   $id = $_GET["id"];
  6. }else{
  7.   // En caso contrario se cojera el id 1
  8.   $id = 1;
  9. }
  10.  
  11. //Como tenemos el id, sea cual sea, se procede a formular la consulta
  12. $sql = "SELECT * FROM tabla WHERE id='$id' LIMIT 1";
  13. if($consulta = mysqli_query($conexion, $sql)){
  14.   //La consulta se ha ejecutado correctamente, comprobamos si ha devuelto algún valor.
  15.   if(mysqli_affected_rows($conexion) > 0){
  16.       //Hay datos, los mostramos
  17.       $datos = mysqli_fetch_assoc($consulta);
  18.       //Aqui ya se pondria el codigo para mostrar los datos.
  19.       //Creariamos un enlace, para mostrar el siguiente registro, o el anterior.
  20.      $urlSiguiente = "www.mipagina.es?id=".$id+1;
  21.      echo "<a href=$urlSiguiente>Siguiente</a>
  22.     //Se puede crear el enlace anterior, pero hay que tener en cuenta que si el registro es el primero, es mejor no mostrarlo, para ello ya no pongo el codigo ya que se supone que sabes hacerlo.
  23.  
  24.     $urlAnterior = "www.mipagina.es?id=".$id-1;
  25.     // Al pulsar sobre el enlace, se debería cargar el siguiente id y asi sucesivamente.
  26.  
  27.  }else{
  28.      //No se han encontrado registros.
  29.      echo "Sin datos a mostrar";
  30.  }
  31. }else{
  32.  //Se ha producido un error en la consulta, lo mostramos
  33.  echo "ERROR:<br>$sql<br>".mysqli_error($conexion);
  34. }

Espero que te sirva.
  #16 (permalink)  
Antiguo 17/01/2014, 13:12
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 10 meses
Puntos: 11
Respuesta: Loop for indefinido

Claro, es que rand() usa valores aleatorios, entonces te coje un registro aleatoriamente. Si quieres que te muestre un registro aleatorio, con rand has acertado, si quieres que te lo muestre en serie (1,2,3,4,etc) es como te he dicho yo.

Me alegro que hayas encontrado la solucion, si no tienes otra consulta, edita el titulo del post y ponle [SOLUCIONADO] delante.

Saludos.

Etiquetas: loop, mysql, select
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 08:27.