Foros del Web » Programando para Internet » PHP »

Error simple en condicional

Estas en el tema de Error simple en condicional en el foro de PHP en Foros del Web. Buenas, tengo el siguiente problema. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original $edad_restada = 0 ; $altura = 186 ; //lo recojo de $_POST $peso = ...
  #1 (permalink)  
Antiguo 18/07/2014, 04:18
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Error simple en condicional

Buenas, tengo el siguiente problema.

Código PHP:
Ver original
  1. $edad_restada = 0;
  2. $altura = 186; //lo recojo de $_POST
  3. $peso = 74; //lo recojo de $_POST
  4. $altura_en_metros = $altura / 100;
  5. $imc = $altura_en_metros * $altura_en_metros;
  6. $imc_final = round($peso / $imc,1);
  7. if($imc_final < 18) {
  8.     $estado_imc = 1;
  9. } elseif($imc_final >= 18 and $imc_final < 24.9) {
  10.     $estado_imc = 2;
  11. } elseif($imc_final >= 25 and $imc_final < 26.9) {
  12.     $estado_imc = 3;
  13. } elseif($imc_final >= 27 and $imc_final < 29.9) {
  14.     $estado_imc = 4;
  15. } elseif($imc_final >= 30 and $imc_final < 39.9) {
  16.     $estado_imc= 5;
  17. } elseif($imc_final > 40) {
  18.     $estado_imc = 6;
  19. }
  20.  
  21. if($estado_imc == 1) {
  22.     $edad_restada = $edad_restada + 5;
  23. } elseif($estado_imc == 3) {
  24.     $edad_restada = $edad_restada + 5;
  25. } elseif($estado_imc == 4) {
  26.     $edad_restada = $edad_restada + 7;
  27. } elseif($estado_imc == 5) {
  28.     $edad_restada = $edad_restada + 10;
  29. } elseif($estado_imc == 6) {
  30.     $edad_restada = $edad_restada + 15;
  31. }
  32.  
  33. echo $edad_restada;

El problema me surge cuando al ver el resultado siempre es 0, es decir no suma la $edad_restada. Seguramente sea algo sin mucha importancia pero no consigo encontrarlo !!
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #2 (permalink)  
Antiguo 18/07/2014, 04:22
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Error simple en condicional

Te falta el test sobre $estado_imc==2
  #3 (permalink)  
Antiguo 18/07/2014, 04:30
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Error simple en condicional

No compara ni realiza acción en $estado_imc == 2 porque en ese caso no tiene que sumar edad, pero cuando el estado_imc == 1,3,4,5,6 si que tiene que sumar a $edad_restada pero tampoco suma nada

Gracias !!
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #4 (permalink)  
Antiguo 18/07/2014, 04:39
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Error simple en condicional

Mmm...Con los datos que hay ahi, estado_imc == 2, asi que es normal que no te sume nada.
Si cambias el dato "altura" a 286, el resultado que da es 5:

Test con altura cambiada a 5
  #5 (permalink)  
Antiguo 18/07/2014, 04:42
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Error simple en condicional

Lo he realizado desde el $_POST para que el resultado de $estado_imc sea 5 o 6 pero no suma nada. $edad_restada sigue siendo 0. voy a ver si el error está al recoger los datos por $_POST. Gracias de nuevo
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #6 (permalink)  
Antiguo 18/07/2014, 04:58
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Error simple en condicional

No lo entiendo... recoge bien los datos según parece, Lo voy a poner por partes a ver si se encuentra más fácilemente el problema.

Código PHP:
Ver original
  1. $altura = $_POST['altura'];
  2. $peso = $_POST['peso'];

Damos el valor de $edad_restada de 0. Pasamos la altura a metros y redondeamos a un decimal. Aplicamos la formula de indice masa muscular. altura en metros * altura en metros / peso.

Código PHP:
Ver original
  1. $edad_restada = 0;
  2. $altura_en_metros = $altura / 100;
  3. $imc = $altura_en_metros * $altura_en_metros;
  4. $imc_final = round($peso / $imc,1);

Comparamos los datos de $imc_final y damos el valor a $estado_imc

Código PHP:
Ver original
  1. if($imc_final < 18) {
  2.     $estado_imc = 1;
  3. } elseif($imc_final >= 18 and $imc_final < 24.9) {
  4.     $estado_imc = 2;
  5. } elseif($imc_final >= 25 and $imc_final < 26.9) {
  6.     $estado_imc = 3;
  7. } elseif($imc_final >= 27 and $imc_final < 29.9) {
  8.     $estado_imc = 4;
  9. } elseif($imc_final >= 30 and $imc_final < 39.9) {
  10.     $estado_imc= 5;
  11. } elseif($imc_final > 40) {
  12.     $estado_imc = 6;
  13. }

Si realizo el formulario y lo envio realizo una comprobación para que me imprima el indice de masa muscular y el $estado_imc para ver que todo vaya bien.

Código PHP:
Ver original
  1. echo "Altura: " . $altura . "<br>";
  2. echo "Altura en Metros: " . $altura_en_metros . "<br>";
  3. echo "IMC Final: " . $imc_final . "<br>";
  4. echo "Estado IMC: " . $estado_imc . "<br>";

Muestra lo siguiente:

Cita:
Altura: 153
Altura en Metros: 1.53
IMC Final: 38.4
Estado IMC: 5
Por lo que parece que si que realiza las comprobaciones anteriores correctamente.

Creamos las condiciones dependiendo del $estado_imc que tenemos, el cual hemos visto al imprimirlo que si que lo calcula correctamente.

Código PHP:
Ver original
  1. if($estado_imc == 1) {
  2.     $edad_restada = $edad_restada + 5;
  3. } elseif($estado_imc == 3) {
  4.     $edad_restada = $edad_restada + 5;
  5. } elseif($estado_imc == 4) {
  6.     $edad_restada = $edad_restada + 7;
  7. } elseif($estado_imc == 5) {
  8.     $edad_restada = $edad_restada + 10;
  9. } elseif($estado_imc == 6) {
  10.     $edad_restada = $edad_restada + 15;
  11. }

Pero el resultado sigue siendo 0

EDITO::::

Tenía en algún apartado del código la declaración de la variable a $edad_restada = 0; tal vez por ello siempre me salía 0, aunque no le veo sentido ya que simplemente el código sumaba cantidad a esa cantidad. he eliminado esa declaración de la variable $edad_restada y ahora funciona correctamente.

¿ Quiere decir que si no tengo una variable declarada, es decir no existe, y luego sumo +10 a una variable que no existe, la crea con valor 0 y después le suma ese valor ?
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 18/07/2014 a las 05:05

Etiquetas: condicional, simple
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 23:49.