PHP - Uso de BREAK en ciclos WHILE

 
Vista:
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por German David (54 intervenciones) el 01/06/2021 13:41:42
Cordial saludo.
Actualmente en mi sitio web, tengo un formulario para ingresar registros de llantas montadas y desmontadas a un vehículo. El vehículo tiene 11 llantas, lo que quiere decir que en el formulario le pueden ingresar desde una llanta hasta 11 llantas. Como lo que deseo es ingresar los campos en el formulario que contengan información, estoy utilizando un WHILE anidado dentro de un FOR. Las campos del formulario que deseo insertar son los códigos de las llantas. Cada campo en el formulario esta asociado a una variable, las cuales nombre así: $IDM1...$IDM11. Con el FOR, busco validar si en los 11 campos del formulario hay información y con el WHILE busco contar, cuantos campos del formulario tienen información. Como el nombre de las variables solo difiere, en el numero al final que va desde 1 a 11, pensé en formar las variables dentro del WHILE concatenando así: "$IDM".$i.

Este es el código:

1
2
3
4
5
6
7
8
//contador llantas montadas
$iM=0;
for ($i=1; $i<=11; $i+1) {
	while ("$IDM".$i!="") {
		$iM+1;
		break;
	}
}
Utilizo el BREAK, al final del While para que así este se interrumpa y vuelva al FOR con un $i+1, de este forma evaluó otra variable, pero estoy notando que el WHILE se vuelve infinito, ya que me sale este error.

Maximum execution time of 30 seconds exceeded in /var/www/html/analistaflota/RegistroSalidaLlantas.php on line 389

Lo que encuentro dice que BREAK finalizo el ciclo, pero aparentemente se queda infinitamente.

Agradezco su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por Mauro (1036 intervenciones) el 01/06/2021 15:34:26
Hola Germán:

No había notado el break en el hilo anterior :p, se me ocurre que el problema debe ser algún bucle infinito fuera de este código que nos muestras.

Un tema que sí veo es que "$iM+1;" no se está asignando nunca, con lo cual $iM siempre valdrá 0... espero que eso te ayude.

Igualmente me parece que te convendría re-pensar cómo lograr tu objetivo ya que no creo que esta estructura te ayude.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por German David (54 intervenciones) el 01/06/2021 18:59:38
Hola Mauro, cuando dices que $iM+1 no esta asignado, me podrías explicar algo por favor.
Cuando empieza el código le doy a $iM el valor de cero y dentro del WHILE le digo que se vaya incrementando en 1 siempre y cuando ingrese en el WHILE.
Me podrías indicar si es correcta mi apreciación o realmente estoy cometiendo un error.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por Mauro (1036 intervenciones) el 02/06/2021 14:45:08
Hola Germán:

Pues el tema es que $iM + 1 es una expresión que calcula la suma, pero te falta guardar ese resultado en algún lado... probablemente lo que buscas es guardarlo en $iM, de modo que la variable efectivamente se incremente.

Puedes lograr eso de tres formas:

1
$iM = $iM + 1;

1
$iM +=1;

1
$iM++;

Personalmente me inclino por la última pero es como mejor te resulte.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por German David (54 intervenciones) el 04/06/2021 13:59:10
Hola Mauro corregí el código así:
1
2
3
4
5
6
7
$iM=0;
for ($i=1; $i<=11; $i+1) {
	while ("$IDM".$i!="") {
		$iM=$iM+1;
		break;
	}
}

pero me sigue apareciendo el error:
Maximum execution time of 30 seconds exceeded in /var/www/html/analistaflota/RegistroSalidaLlantas.php on line 389

En mi codigo la liena 389 es donde comienza el WHILE.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por Alejandro (839 intervenciones) el 01/06/2021 16:50:27
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Eso te daría el valor de $IDM, que supongo no esta declarada, concatenado con el valor de $i.
Traducido tendrías:
1
2
3
while (1!="") {
while (2!="") {
while (n!="") {...

Para poder usarlo como pretendes tiene que ser así:
1
2
$IDM = 'IDM'.$i;
while ( $$IDM != "" ) {
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por Alejandro (839 intervenciones) el 03/06/2021 01:08:18
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
El for funciona de la siguiente manera

1
2
3
for(seccion1; seccion2; seccion3){
    bloque
}
1 Se ejecuta la primer sección que es la asignación de variable.
2 Se ejecuta la segunda sección que es la operación lógica.
3 Si el resultado de la operación logia es verdadera se ejecuta el contenido del bloque for
4 Se ejecuta la tercer sección que es la operación que afecta a la variable de control
5 Se repite la ejecución desde el paso 2 hasta dar falso.

Así pues, en tu código, el valor de $i jamas es afectado.puesto que no haces ninguna reasignación.

1
2
3
for ($i=1; $i<=11; $i++) {
for ($i=1; $i<=11; $i+=1) {
for ($i=1; $i<=11; $i=$i+1) {
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 126
Ha aumentado su posición en 12 puestos en PHP (en relación al último mes)
Gráfica de PHP

Uso de BREAK en ciclos WHILE

Publicado por German David (54 intervenciones) el 04/06/2021 14:10:49
Hola Alejandro, muchas gracias.
Mi error desde el principio era que pensaba que al decir $i+1, le estaba incrementando a $i en uno, pero ya lo corregí y le puse $i=$i+1 en la sección 3 del FOR y funciono.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar