Foros del Web » Programando para Internet » PHP »

no me funciona el codigo este

Estas en el tema de no me funciona el codigo este en el foro de PHP en Foros del Web. Hola amigos: estoy intentando hacer un pequeño programa en PHP y como soy novato me estoy volviendo loco y no consigo hacerlo que funcione correctamente. ...
  #1 (permalink)  
Antiguo 07/03/2015, 14:02
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
no me funciona el codigo este

Hola amigos:

estoy intentando hacer un pequeño programa en PHP y como soy novato me estoy volviendo loco y no consigo hacerlo que funcione correctamente.

Es un programa que calcule el importe de un viaje en taxi:

parece sencillo pero como os digo no consigo que funcione bien.

adjunto el codigo a ver si alguien me aclara la cosa un poco.



$km = $_POST["km"];
$dia = $_POST["dias"];
$hora = $_POST["hora"];
$festivo = $_POST["festivo"];

$tarifanormal =round(2.50);
$tarifafestivo =round(2.90);

$km_urbano=(0.95);
$km_urbano_festivo=(1.05);

$km_carretera=(1.16);
$km_carretera_festivo=(1.36);



$precio_urbano_normal = $km * $km_urbano;
$precio_urbano_festivo = $km * $km_urbano_festivo;

$precio_carretera_normal= $km * $km_carretera;
$precio_carretera_festivo= $km * $km_carretera_festivo;


// esto es tarifa urbana por que no pasa de 5km y es tarifa festivo por ser fin de semana.

if ((($dia=="sabado") || ($dia=="domingo")) && ($km<5) )

{
$festivo_urbano2 = $precio_urbano_festivo + $tarifafestivo;

echo "su viaje es el $dia es fin de semana, tarifa urbana a las $hora hay $km KMs el precio es de $festivo_urbano2 €.<br>";

}

// esto es tarifa urbana por que no pasa de 5km y es tarifa normal por ser un dia laboral.

elseif (($dia == "lunes") || ($dia == "martes") || ($dia == "miercoles") || ($dia == "jueves") || ($dia == "viernes") && ($km<5))

{
$urbano_normal2 = $precio_urbano_normal + $tarifanormal;
echo "su viaje es el $dia es tarifa urbana normal hay $km KMs el precio es de $urbano_normal2 €.<br>";
}
//hora nocturna urbano.

elseif (($dia == "lunes") || ($dia == "martes") || ($dia == "miercoles") || ($dia == "jueves") || ($dia == "viernes") && ($km<5) && ($hora >= 21) || ($hora >= 0) && ($hora <= 6))


{

$urbano_nocturno = $precio_urbano_festivo + $tarifafestivo;
echo "su viaje es el $dia es tarifa urbana nocturna hay $km KMs el precio es de $urbano_nocturno €.<br>";

}

// esto es tarifa urbana por que no pasa de 5km y es tarifa festivo por puede ser un dia festivo.

elseif (($dia == "lunes") || ($dia == "martes") || ($dia == "miercoles")|| ($dia == "jueves") || ($dia == "viernes") && ($km<5) && ($festivo="si"))

{
$festivo_urbano1 = $precio_urbano_festivo + $tarifafestivo;
echo "su viaje es el $dia a las $hora es festivo hay $km KMs el precio es de $festivo_urbano1 €.<br>";
}


// esto es tarifa carretera por que es mas de 5km y es tarifa festivo por ser fin de semana.

elseif ((($dia=="sabado") || ($dia=="domingo")) && ($km>5) )

{
$festivo_carretera2 = $precio_carretera_festivo + $tarifafestivo;
echo "su viaje es el $dia a las $hora es fin de semana hay $km KMs tarifa carretera el precio es de $festivo_carretera2 €.<br>";

}

// esto es tarifa carretera por que es mas de 5km y es tarifa normal por ser un dia laborable.

elseif (($dia == "lunes") || ($dia == "martes") || ($dia == "miercoles")|| ($dia == "jueves") || ($dia == "viernes") && ($km>5))

{
$carretera_normal2 = $precio_carretera_normal + $tarifanormal;
echo "el $dia es tarifa carretera normal hay $km KMs el precio es de $carretera_normal2 €.<br>";
}

//aqui pongo la hora para nocturna.

elseif (($dia == "lunes") || ($dia == "martes") || ($dia == "miercoles")|| ($dia == "jueves") || ($dia == "viernes") && ($km>5) )

{
if ($hora >= 21 || $hora >= 0 && $hora <= 6 && $km<=5)

{

$precionocturno_carretera = $precio_carretera_festivo + $tarifafestivo;
echo " a las $hora en tarifa nocturna $precionocturno €.<br>";
}

else

{
$preciodiurno_carretera = $precio_carretera_normal + $tarifanormal;
echo " a las $hora en tarifa normal $preciodiurno_carretera €.<br>";
}

}

// esto es tarifa carretera por que es mas de 5km y es tarifa festivo por que puede ser un dia festivo.

elseif (($dia == "lunes") || ($dia == "martes") || ($dia == "miercoles")|| ($dia == "jueves") || ($dia == "viernes") && ($km>5) && ($festivo="si"))

{
$carretera_festivo4 = $precio_carretera_festivo + $tarifafestivo;
echo "su viaje es el $dia a las $hora es festivo hay $km KMs el precio es de $carretera_festivo4 €.<br>";
}
  #2 (permalink)  
Antiguo 07/03/2015, 15:42
 
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: no me funciona el codigo este

No se exactamente el problema por que no lo probé, pero a primera vista no veo en ninguna parte de tu codigo como capturas el día... Lo haces desde un input o un select?

Para capturar tus dias deben ser identicos a lo que estas pidiendo, si compruebas "lunes" y el $_POST recibe un "Lunes" no funcionará...

En fin, por ahora es lo que puedo decir, la forma de capturar los días es muy importante.

Pero como no dices nada de tu problema, pues tampoco podemos adivinar que esta pasando ahí.
  #3 (permalink)  
Antiguo 07/03/2015, 16:24
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no me funciona el codigo este

gracias por tu respuesta amigo:

los dias los recibe bien, el problema es que no hace bien lo que debe.

hace lo que debe solo en sabado y domingo pero en los demas dias no lo hace bien. voy a subir los archivos al servidor para ver si le puedes hechar un vistazo.

http://www.vegabaja.org/taxis/taxis.zip

aqui puedes probar:

http://www.vegabaja.org/taxis/form.html

el problema es que si es dia de la semana no diferencia entre menor de 5km (tarifa urbana)

y mayor de 5km (tarifa carretera)

ademas tampoco funciona el boton de festivo si seleccionan esa opcion que debe ser efectiva solo si es un dia de lunes a viernes.

y por ultimo tampoco funciona la hora que si es de 21h a 6h es nocturna y de 7 a 20h es diurna solo debe ser efectiva en los dias de lunes a viernes.



osea que solo me funciona bien si el usuario elege sabado o domingo mayor o menor de 5km, eso funciona bien pero lo demas no.


a ver si puedes ayudarme, ya toy desesperao y sobre todo desmoralizado de ver que los dos meses que llevo con un curso de php np me estan sirviendo para nada.


un saludo y muchas gracias de ante mano.
  #4 (permalink)  
Antiguo 07/03/2015, 17:04
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: no me funciona el codigo este

Cita:
hace lo que debe solo en sabado y domingo pero en los demas dias no lo hace bien. voy a
subir los archivos al servidor para ver si le puedes hechar un vistazo.
Este es tu problema y lo debes de hacer tu, lo que te hace falta es hacer debug de las variables y para eso utiliza var_dump o print_r para que veas que valor tienen la variables en los lugares donde tiene el problema.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 07/03/2015, 17:14
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no me funciona el codigo este

tienes toda la razon "hhs":

a ver si mañana mas despejao puedo dilucidar algo.

hoy ya estoy saturado de buscar errores.

gracias amigos por vuestra ayuda.
  #6 (permalink)  
Antiguo 07/03/2015, 17:46
 
Fecha de Ingreso: enero-2015
Mensajes: 205
Antigüedad: 9 años, 2 meses
Puntos: 18
Respuesta: no me funciona el codigo este

podías subir el código como código que se ve mucho mejor.
:)
  #7 (permalink)  
Antiguo 07/03/2015, 17:48
 
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: no me funciona el codigo este

Voy a hacer un poco mas simple tu codigo, sobre todo en las condicionales de los dias, y de esta forma me funciona perfecto cuando es festivo y cuando no es festivo, en realidad fue la unica prueba que hice, pero tu codigo está bien, lo que no está bien es como lo estás haciendo, y eso es cosa de lógica propia, osea analiza a fondo tus condicionales.

Digamos que, tienes 2 letras... Y - Z

Tu le dices al codigo "Si es -Y- haz esto" - o le dices "Si no es -Y- haz lo otro",

Definitivamente no le puedes decir "Si es -Y- haz esto" - y tambien decirle "Si no es -Z- haz lo otro" ... Analizalo, de esta forma ambas condiciones te dirijen a la -Y- aunque en una menciones a la Z... Me explico?

Bueno, aqui un ejemplo de como condicionar directamente si es festivo o no es festivo cuando se trata de dias entre semana...

Código PHP:
Ver original
  1. $cadena1 = "lunes martes miercoles jueves viernes";
  2. if(preg_match('/'.$_POST["dias"].'/', $cadena1) && $festivo != "si") { $festivo = "no"; } else { $festivo = "si"; }
  3.  
  4.  
  5. // esto es tarifa urbana por que no pasa de 5km y es tarifa normal por ser un dia laboral.     
  6. if ($festivo=="no" && $km<6 )      
  7.         {
  8.             $urbano_normal2 = $precio_urbano_normal + $tarifanormal;
  9.             echo "su viaje es el $dia  es tarifa urbana normal hay $km KMs  el precio es de   $urbano_normal2 €.<br>";
  10.         }
  11.  
  12.  
  13. // esto es tarifa urbana por que no pasa de 5km y es tarifa festivo por puede ser un dia festivo.  
  14. elseif ($festivo=="si" && $km<6 )      
  15.        
  16.         {
  17.             $festivo_urbano1 = $precio_urbano_festivo + $tarifafestivo;
  18.             echo "su viaje es el $dia a las $hora es festivo hay $km KMs  el precio es de   $festivo_urbano1 €.<br>";
  19.         }

Cuando los kilometros son menores a 5, no uses "$Km<5", usa "$Km<6" por que si usas un "<5" le estas diciendo que es de "4" hacia abajo, y el 5 no te lo recibe.


En la hora yo te recomiendo usar numeros unicos, no usaria 24h , yo smplemente pondria 24

Cita:
<option value="12">12:00</option>
<option value="13">13:00</option>
..
..
..
<option value="01">1:00</option>
<option value="02">2:00</option>
De esta forma capturas los numeros y los comparas en tus condiciones.


Lo demas es cosa tuya, ya te dije cual es la falla, pero hacerte todo el codigo no me gustaria... De todos modos, espero haberte aclarado el problema... Saludos!!

Última edición por volaveruntmissit; 07/03/2015 a las 17:53
  #8 (permalink)  
Antiguo 08/03/2015, 06:32
 
Fecha de Ingreso: mayo-2003
Mensajes: 194
Antigüedad: 20 años, 11 meses
Puntos: 4
Respuesta: no me funciona el codigo este

gracias volaveruntmissit:

voy a probar como tu dices a ver como me sale.

muchas gracias.

Etiquetas: Ninguno
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 20:29.