Foros del Web » Programando para Internet » PHP »

consultar precio de un array desde un select y calcular

Estas en el tema de consultar precio de un array desde un select y calcular en el foro de PHP en Foros del Web. Hola a todos, estoy empezando en esto de php y la verdad es que ando bloqueado con unos cálculos. Estoy leyendo documentación de varios sitios ...
  #1 (permalink)  
Antiguo 23/04/2011, 22:24
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
consultar precio de un array desde un select y calcular

Hola a todos, estoy empezando en esto de php y la verdad es que ando bloqueado con unos cálculos. Estoy leyendo documentación de varios sitios pero no sé si es que soy muy bruto o es que estoy pasando por alto algún punto, el caso es que no avanzo. A ver si alguno de ustedes me puede ayudar. Les explico la idea a grandes rasgos.

Se trata de calcular el precio de un producto (curso + alojamiento) según lo que escojamos en los selects de un formulario. La secuencia para el formulario en html sería:

1º - Elijo el tipo de curso en el primer select. Éste puede ser "basico" o "intensivo"

2º - Elijo el alojamiento en el segundo select. Éste puede ser "compartido", "individual" o "sin alojamiento"

3º - Introduzco el número de semanas en un campo de texto

4º - Elijo la temporada en un tercer select. Ésta puede ser "baja", "media" o "alta"

5º - Presiono el botón "calcular"

y 6º - Muestro el precio en otro campo de texto

En función de la temporada escogida, los precios, tanto del tipo de curso como del tipo de alojamiento, varían.

Éstos precios los he definido en unos arrays que es donde habría que consultar para asignar, a la variable correspondiente, un valor.

Después de definir los precios el calculo es sencillo; (curso+alojamiento)*semanas

Yo la idea la tengo clara, o eso creo, pero debo de estar obviando algo por desconocimiento. El caso es que siempre se me guarda el mismo valor en la variable, es decir que no coge los datos del array correctamente.

Les dejo el código

Este es el html

Código HTML:
<form action="operacion.php" method="post">

curso
<select name="field1[]"  id="field1"  >
<option  value="basico">Curso Básico</option>
<option  value="intensivo">Curso Intensivo</option>
</select>

alojamiento
<select name="field2[]"  id="field2"  >
<option  value="compartido">compartido</option>
<option  value="individual">individual</option>
<option  value="sinalojamiento">sin alojamiento</option>
</select>


semanas
<input type="text" value="" size="20"  name="field3" id="field3" />

temporada
<select name="field4[]"  id="field4"  >
<option  value="baja">Enero-Junio</option>
<option  value="media">Junio-Octubre</option>
<option  value="alta">Octubre-Diciembre</option>
</select>


<input class="inputForm3" type="submit" name="enviar" value="calcular" /> 

<input type="text" value="<?php echo $_GET["resultado"]?>" size="20"  name="Total" id="Total" readonly="readonly"/>

</form> 

y en el php tengo:

Código PHP:

<?php 
$preciocurso
=0;
$precioalojamiento=0;
$total=0;
$curso=$_POST['field1']; // basico o intensivo
$alojamiento=$_POST['field2']; //compartido, individual o sin alojamiento
$semanas=$_POST['field3']; // n
$temporada=$_POST['field4']; //baja, media o alta

if($curso='basico'){

$precioCurso = array( 
        
0=>100
        
1=>200,
    
2=>300
        
);
}else{

$precioCurso = array( 
        
0=>200
        
1=>400,
    
2=>600
        
);
}

if(
$alojamiento='compartido'){

$precioAlojamiento = array( 
        
0=>100
        
1=>200
        
2=>300
        
);
}

if(
$alojamiento='individual'){

$precioAlojamiento = array( 
        
0=>200
        
1=>400
        
2=>600
        
);
}

if(
$alojamiento='sinalojamiento'){

$precioAlojamiento 0;

}



if (
$temporada='baja'){
    
$totalCurso=$precioCurso[0];
    
$totalAlojamiento=$precioAlojamiento[0];
}

if (
$temporada='media'){
    
$totalCurso=$precioCurso[1];
    
$totalAlojamiento=$precioAlojamiento[1];
}

if (
$temporada='alta'){
    
$totalCurso=$precioCurso[2];
    
$totalAlojamiento=$precioAlojamiento[2];
}

$total=($totalCurso+$totalAlojamiento)*$semanas;

header("Location: form3.html?resultado=$total");

?>
Así entiendo yo el código php, que igual es donde está el problema (en el código y en como lo entiendo :) ):

1º - Le asigno el valor "0" a las variables preciocurso, precioalojamiento y total.

2º - Le asigno un valor a las variables curso, alojamiento, semanas y temporada. Éste valor lo recogerá de lo que seleccionemos en cada campo del formulario.

3º - Si, por ejemplo, el valor de curso es "basico", la variable precioCurso es un array con tres campos, cada uno con un precio, sino la variable precioCurso es un array con tres campos con precios distintos.

4º - Lo mismo pasaría con el valor de alojamiento. Dependiendo de cual sea, la variable precioAlojamiento será un array u otro con distintos precios. Aquí no sé si estoy actuando bien con los if{}.

5º - Después de definir los arrays de los que queremos sacar los precios, el valor de la variable temporada me sirve para; si es "baja" asignarle a la variable totalCurso el valor 0 del array precioCurso y a la variable totalAlojamiento el valor 0 del array precioAlojamiento. Cogeriamos el valor 1 de ambos arrays si la variable temporada es igual a "media", y el 2 si es igual a "alta".

6º - Ahora ya tendriamos un valor para la variable totalCurso y otro para la variable totalAlojamiento

7º - Calculamos el total así: (totalCurso+totalAlojamiento)*semanas, y lo guardamos en la variable total

8º - Lo mostramos en el campo de texto. En esta parte también ando perdidísimo.

De lo que me he dado cuenta es que siempre, independientemente de lo que seleccionemos, lo único que hace el script es meterse en el primer array que está definido y seleccionar el último valor (el [2]).

Soy incapaz pasar de aquí y no sé si es que estoy planteando mal el problema, me estoy olvidando de algo, estoy dejando de hacer algo o que leches pasa. Ya les digo que son mis primeros pinitos con PHP y es muy posible que al código le falte algo o que simplemente esté mal.

Siento poner un mensaje tan largo pero quería explicarlo bien, espero que así haya sido.

Si me pueden orientar un poco y echarme un cable les estaría muy agradecido.

Les ruego que tengan paciencia con un principiante en esto del PHP como soy yo.

Muchísimas gracias por su tiempo y ayuda.

Un saludo
  #2 (permalink)  
Antiguo 24/04/2011, 10:48
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Yo haría de otra manera, con una funcion sin arrays y dado que todos los precios son multiplos de 100 mas fácil todavía:
Código PHP:
Ver original
  1. function calculoPrecios($tipo, $alojamiento, $semanas, $temporada){
  2.            
  3.       $coefiTipo =  2;
  4.       if($tipo == "basico")
  5.         $coefiTipo = 1;
  6.      
  7.       $coefiAloja = 0;
  8.       if($alojamiento == "compartido")
  9.         $coefiAloja = 1;
  10.       if($alojamiento == "individual")
  11.          $coefiAloja = 2;  
  12.          
  13.      $coefiTempora = 3;
  14.      if($temporada == "baja")
  15.        $coefiTempora = 1;
  16.      if($temporada == "media")  
  17.        $coefiTempora = 2;
  18.          
  19.       $precioTotal = 100 * ($coefiTipo + $coefiAloja + $coefiTempora) * $semanas;
  20.      
  21.        return $precioTotal;
  22.    
  23. }
  24.  
  25.  echo calculoPrecios($curso, $alojamiento, $semanas, $temporada);


Si tiene que ser con arrays tambien se puede adaptando la funcion.
  #3 (permalink)  
Antiguo 24/04/2011, 11:55
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Hola Esnola, muchas gracias por tu tiempo. Te lo agradezco.

Me has creado alguna duda más

Los precios son orientativos, para que el ejemplo fuera más sencillo, pero no son multiplos de 100.

Aparte de esto, he elegido el array porque el mismo curso tiene precios distintos en función de la temporada que elijamos, y no se me ocurría otra forma de consultar los precios sino es de esta.
En tu ejemplo parece que el curso básico siempre cuesta lo mismo, y no es así. Pasaría lo mismo con el alojamiento...

Además, luego veo que sumas la temporada al alojamiento y al curso (en tu caso tipo) y no entiendo muy bien porque... ya que la variable temporada no devuelve un número, sino un texto en función del cual recogemos un precio u otro tanto de curso como de alojamiento.

Igual yo estoy interpretando mal la función pero creo que no es lo que yo había planteado. Corrígeme si me equivoco, por favor.

Entiendo que la sintaxis de mi script es correcta a la hora de recoger las variables, no? Lo digo porque no me has hecho ningún comentario al respecto y como yo estoy empezando, la verdad es que no sé si he metido la pata en algún punto.

Te agradezco enormemente tu tiempo de nuevo y si hay alguna cosa que no te haya quedado clara de mi exposición, te ruego que me la preguntes y estaré encantado de aclarártela. Lo que pretendo no es tan difícil, no?

Un saludo y gracias de nuevo
  #4 (permalink)  
Antiguo 24/04/2011, 13:06
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Hola carlos2

Te explico:

la primera parte hace referencia al tipo ( basico o intensivo)
Código PHP:
  $coefiTipo =  2;
      if(
$tipo == "basico")
        
$coefiTipo 1
Tiene que tener un valor, en principio 2 a no ser que la función reciba basico en cuyo caso vale 1.

Segunda parte, lo mismo
Código PHP:
  $coefiAloja 0;
      if(
$alojamiento == "compartido")
        
$coefiAloja 1;
      if(
$alojamiento == "individual")
         
$coefiAloja 2
En principio se establece en que no quiere alojamiento 0 a no ser que al recibir el valor de la variable $alojamiento diga otra cosa en cuyo caso pasa a 1 o 2 según corresponda lo que diga el if

Exactamente igual con la temporada, al cual se le estableció un valor inicial 3 y después según digan los condicionales en funcion del valor recibido por la variable recibida

Pues ahora tenemos 100 * (tipo + alojamiento + temporada) * semanas.

Verás que según vayan variando los valores de tipo, alojamiento y/o temporada (y por supuesto las semanas) irá variando devidamente el valor del curso.
No tienes mas que hacer una prueba y en el código php que has puesto quitas

Código PHP:
if($curso='basico'){

$precioCurso = array( 
        
0=>100
        
1=>200,
    
2=>300
        
);
}else{

$precioCurso = array( 
        
0=>200
        
1=>400,
    
2=>600
        
);
}

if(
$alojamiento='compartido'){

$precioAlojamiento = array( 
        
0=>100
        
1=>200
        
2=>300
        
);
}

if(
$alojamiento='individual'){

$precioAlojamiento = array( 
        
0=>200
        
1=>400
        
2=>600
        
);
}

if(
$alojamiento='sinalojamiento'){

$precioAlojamiento 0;

}



if (
$temporada='baja'){
    
$totalCurso=$precioCurso[0];
    
$totalAlojamiento=$precioAlojamiento[0];
}

if (
$temporada='media'){
    
$totalCurso=$precioCurso[1];
    
$totalAlojamiento=$precioAlojamiento[1];
}

if (
$temporada='alta'){
    
$totalCurso=$precioCurso[2];
    
$totalAlojamiento=$precioAlojamiento[2];
}

$total=($totalCurso+$totalAlojamiento)*$semanas
y pones lo que te he puesto yo:
Código PHP:
Ver original
  1. function calculoPrecios($tipo, $alojamiento, $semanas, $temporada){
  2.            
  3.       $coefiTipo =  2;
  4.       if($tipo == "basico")
  5.         $coefiTipo = 1;
  6.      
  7.       $coefiAloja = 0;
  8.       if($alojamiento == "compartido")
  9.         $coefiAloja = 1;
  10.       if($alojamiento == "individual")
  11.          $coefiAloja = 2;  
  12.          
  13.      $coefiTempora = 3;
  14.      if($temporada == "baja")
  15.        $coefiTempora = 1;
  16.      if($temporada == "media")  
  17.        $coefiTempora = 2;
  18.          
  19.       $precioTotal = 100 * ($coefiTipo + $coefiAloja + $coefiTempora) * $semanas;
  20.      
  21.        return $precioTotal;
  22.    
  23. }
  24.  
  25.  echo calculoPrecios($curso, $alojamiento, $semanas, $temporada)


Realizas varias pruebas y ya dirás.

en el caso de ser con arrays y otros precios sin ser multiplos de nada no habría mas que adaptar los valores recibidos para tomar datos de los arrays y aplicarlos a los precios.
  #5 (permalink)  
Antiguo 24/04/2011, 13:17
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Hola Esnola, te estoy muy agradecido, de veras...

Sigo sin entender muy bien en que momento le aplicamos un precio u otro al curso en funcion de la temporada seleccionada, ya que el mismo curso puede tener 3 precios distintos.

Aún así, voy a probar lo que me has pasado a ver si me queda más claro.

Muchas gracias de nuevo!!

Ahora te cuento!!
  #6 (permalink)  
Antiguo 24/04/2011, 13:22
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: consultar precio de un array desde un select y calcular

Cita:
Iniciado por carlos2 Ver Mensaje
Los precios son orientativos, para que el ejemplo fuera más sencillo, pero no son multiplos de 100.
Si publicas datos incorrectos, ten en cuenta que quien te ayude se basará en ellos y habrá un doble trabajo incluido por tal causa. Entonces tu "ejemplo sencillo" se complica el doble.

Código PHP:
Ver original
  1. <?php
  2. $resultado = null;
  3.  
  4. if(isset($_POST['enviar'])) {
  5.     $array = array(
  6.         'curso' => array('130' , '320' , '510'),
  7.         'alojamiento' => array('60' , '70' , '95'),
  8.         'temporada' => array('30' , '55' , '68')
  9.     );
  10.  
  11.     foreach($array as $k => $valor)
  12.         $resultado += $valor[$_POST[$k]];
  13.  
  14.     $semanas = (!isset($_POST['semanas']) or $_POST['semanas'] == 0) ? 1 : $_POST['semanas'];
  15.  
  16.     echo '<h1>Total a pagar: '. $resultado * $semanas .'</h1>';
  17. }
  18. ?>
  19.  
  20. <form action="" method="post">
  21.     <fieldset>
  22.         <p>curso</p>
  23.         <select name="curso" id="curso">
  24.             <option value="0">Curso Básico</option>
  25.             <option value="1">Curso Intensivo</option>
  26.         </select>
  27.  
  28.         <p>alojamiento</p>
  29.         <select name="alojamiento" id="alojamiento">
  30.             <option value="0">sin alojamiento</option>
  31.             <option value="1">compartido</option>
  32.             <option value="2">individual</option>
  33.         </select>
  34.  
  35.         <p>semanas</p>
  36.         <input type="text" value="" size="20" name="semanas" id="semanas" />
  37.  
  38.         <p>temporada</p>
  39.         <select name="temporada" id="temporada">
  40.             <option value="0">Enero-Junio</option>
  41.             <option value="1">Junio-Octubre</option>
  42.             <option value="2">Octubre-Diciembre</option>
  43.         </select>
  44.     </fieldset>
  45.  
  46.     <fieldset>
  47.         <input class="inputForm3" type="submit" name="enviar" value="calcular" />
  48.     </fieldset>
  49. </form>
  #7 (permalink)  
Antiguo 24/04/2011, 14:13
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Bueno, a ver si he entendido bien ahora.
Quieres que los precios del curso y del alojamiento varien en función de la temporada.

Código PHP:
Ver original
  1. function calculoPrecios($tipo, $alojamiento, $semanas, $temporada){
  2.    $precioCurso = array('basico' => array('130' , '320' , '510'),
  3.                            'intensivo' => array('190' , '470' , '695'));
  4.    $precioAlojamiento  = array('compartido' => array('100' , '300' , '450'),
  5.                            'individual' => array('210' , '370' , '580'));
  6.  
  7.    $coefiTempora = 2;
  8.    if($temporada == "baja")
  9.        $coefiTempora = 0;
  10.    if($temporada == "media")  
  11.        $coefiTempora = 1;
  12.      
  13.   $precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas;
  14.      
  15.   return $precioTotal ;    
  16. }
  17.  
  18. echo calculoPrecios($curso, $alojamiento, $semanas, $temporada);
  #8 (permalink)  
Antiguo 24/04/2011, 14:37
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Estimados Esnola y Metacortex, no sé que deciros... muchas gracias a ambos por la ayuda que me estáis prestando.

Esta es mi primera incursión en PHP y la verdad es que cuanto más veo más me doy cuenta de lo que me queda por aprender, pero con vuestra ayuda está siendo más llevadero...

Metacortex, tienes toda la razón en cuanto a lo de publicar datos que no son reales. Pensé que podría ayudar más si simplificaba los precios, pero entiendo lo que dices y creo que tienes mucha razón.

Parece que, aunque no me había explicado bien, habéis entendido lo que estaba buscando...

Voy a hacer más pruebas con lo que me habeis pasado a ver si me a quedado claro a mi ahora, sólo una pregunta más...

Para mostrar el resultado en el campo de texto correspondiente, lo estoy haciendo correctamente de la siguiente forma?:

Código PHP:
header("Location: form3.html?resultado=$total"); 
form3.html se entiende que es la página donde está el formulario

Gracias de nuevo, y perdonad por las molestias. Soys muy amables!
  #9 (permalink)  
Antiguo 24/04/2011, 14:50
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

En principio si, lo que yo no le veo la utilidad para mostrarlo en un campo de texto de un formulario el resultado. ¿es que puede modificar el precio el que compra?
  #10 (permalink)  
Antiguo 24/04/2011, 14:57
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Hola Esnola.

No, no se puede modificar y de hecho quizás es más cómodo tal y como me lo plateáis vosotros ya que estoy viendo que puedo pintar HTML desde PHP sin problemas (perdonad mi ignorancia sobre este lenguaje, soy más que novato como podéis observar)

Estaba probando el script de Metacortex pero hay algo que no me vale, ahora os cuento, pero quería probar antes el tuyo también y tengo una duda....

En tu script la variable $tipo la debería cambiar por la variable $curso, no??
  #11 (permalink)  
Antiguo 24/04/2011, 15:04
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Da igual como se llame puesto que es en una funcion, lo importante es que en echo calculoPrecios($curso, $alojamiento, $semanas, $temporada); si se le mande el valor correcto, como en tu script:
$curso=$_POST['field1'];

En el codigo de Metacortex no te vale puesto que tampoco ha pillado la base del tema a la primera como me pasó a mi.
El toma temporada como una relacion de precios mas( 'temporada' => array('30' , '55' , '68')) , pero lo que realmente quieres es que los precios varíen en funcion de la temporada.
  #12 (permalink)  
Antiguo 24/04/2011, 15:14
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Te me has adelantado!! jejeje Efectivamente, ese es el problema que tengo con el script de Metacortex, está visto que no lo he explicado del todo bien...

Estoy probando el tuyo pero al calcular, la página me muestra lo siguiente...

Código:
Warning: Illegal offset type in /homepages/15/d349390213/htdocs/form/operacion.php on line 22
La linea 22 es en la que calculamos el precio total:

Código PHP:
$precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas
Te pongo el código tal y como me ha quedado después de tu ayuda...

Código HTML:
<form action="operacion.php" method="post">

curso
<select multiple="multiple" name="field1[]"  id="field1"  ><option  value="basico">Curso Básico</option><option  value="intensivo">Curso Intensivo</option></select>

alojamiento
<select multiple="multiple" name="field2[]"  id="field2"  ><option  value="compartido">compartido</option><option  value="individual">individual</option><option  value="sinalojamiento">sin alojamiento</option></select>


semanas
<input type="text" value="" size="20"  name="field3" id="field3" />

temporada
<select multiple="multiple" name="field4[]"  id="field4"  ><option  value="baja">Enero-Junio</option><option  value="media">Junio-Octubre</option><option  value="alta">Octubre-Diciembre</option></select>


<input class="inputForm3" type="submit" name="enviar" value="calcular" /> 

<input type="text" value="<?php echo $_GET["resultado"]?>" size="20"  name="Total" id="Total" readonly="readonly"/>

</form> 
y en el php esto

Código PHP:
<?php 
$precioalojamiento
=0;
$preciocurso=0;
$total=0;
$curso=$_POST['field1']; //basico
$alojamiento=$_POST['field2']; //compartido
$semanas=$_POST['field3']; //2
$temporada=$_POST['field4']; //baja

function calculoPrecios($tipo$alojamiento$semanas$temporada){
   
$precioCurso = array('basico' => array('130' '320' '510'),
                           
'intensivo' => array('190' '470' '695'));
   
$precioAlojamiento  = array('compartido' => array('100' '300' '450'),
                           
'individual' => array('210' '370' '580'));
 
   
$coefiTempora 2;
   if(
$temporada == "baja")
       
$coefiTempora 0;
   if(
$temporada == "media")  
       
$coefiTempora 1;
      
  
$precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas;
      
  return 
$precioTotal ;    
}
 
echo 
calculoPrecios($curso$alojamiento$semanas$temporada);
?>

Sabes a que es debido ese warning?? 

Empiezo a ver la luz!!!
  #13 (permalink)  
Antiguo 24/04/2011, 15:20
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Supongo que te sale porque no se han enviado las variables
Cambia
Código PHP:
Ver original
  1. echo calculoPrecios($curso, $alojamiento, $semanas, $temporada);

Por un condicional que indique que se han enviado:
Código PHP:
Ver original
  1. if($curso && $alojamiento &&  $semanas && $temporada)
  2.   echo calculoPrecios($curso, $alojamiento, $semanas, $temporada);
  #14 (permalink)  
Antiguo 24/04/2011, 15:43
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Me sigue dando el mismo error, te dejo una url por si quieres comprobarlo

http://elolaconsultores.com/form/form3.html

mil gracias, como siempre.. te debo una, amigo!!!
  #15 (permalink)  
Antiguo 24/04/2011, 16:00
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

envíame el archivo a esnola arroba gmail punto com
  #16 (permalink)  
Antiguo 24/04/2011, 16:10
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

A ver en los nombres de los campos ya no son iguales a los que reciben, tienes en el formulario field1[].......... field4[] sin embargo recibes los datos en el php como field1 .... field4
  #17 (permalink)  
Antiguo 24/04/2011, 16:38
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Te lo acabo de mandar... un millón de gracias!!!
  #18 (permalink)  
Antiguo 24/04/2011, 16:50
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

No había leido tu último mensaje.... tienes razón, había cambiado el nombre que recibe....

Lo he modificado, el error ya no sale, pero se queda la página en blanco... voy a investigar a ver si doy con el error....

Te estoy muy agradecido!!
  #19 (permalink)  
Antiguo 25/04/2011, 09:48
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

El error estaba en los nombres de los campos.
Ahora, con estos archivos ya funciona

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin título</title>
  5. </head>
  6.  
  7. <form action="operacion.php" method="post">
  8.  
  9. curso
  10. <select multiple="multiple" name="curso"><option  value="basico">Curso Básico</option><option  value="intensivo">Curso Intensivo</option></select>
  11.  
  12. alojamiento
  13. <select multiple="multiple" name="alojamiento" ><option  value="compartido">compartido</option><option  value="individual">individual</option><option  value="sinalojamiento">sin alojamiento</option></select>
  14.  
  15.  
  16. semanas
  17. <input type="text" value="" size="20"  name="semanas">
  18.  
  19. temporada
  20. <select multiple="multiple" name="temporada" ><option  value="baja">Enero-Junio</option><option  value="media">Junio-Octubre</option><option  value="alta">Octubre-Diciembre</option></select>
  21.  
  22.  
  23. <input class="inputForm3" type="submit" name="enviar" value="calcular">
  24.  
  25.  
  26. </form>
  27.  
  28. <!--
  29. <input type="text" value="<?php echo $_GET["resultado"]?>" size="20"  name="Total" id="Total" readonly="readonly"/>
  30. -->
  31. </body>

Código PHP:
Ver original
  1. <?php
  2. $precioalojamiento=0;
  3. $preciocurso=0;
  4. $total=0;
  5. $curso=$_POST['curso']; //basico
  6. $alojamiento=$_POST['alojamiento']; //compartido
  7. $semanas=$_POST['semanas']; //2
  8. $temporada=$_POST['temporada']; //baja
  9.  
  10. function calculoPrecios($tipo, $alojamiento, $semanas, $temporada){
  11.    $precioCurso = array('basico' => array('130' , '320' , '510'),
  12.                            'intensivo' => array('190' , '470' , '695'));
  13.    $precioAlojamiento  = array('compartido' => array('100' , '300' , '450'),
  14.                            'individual' => array('210' , '370' , '580'));
  15.  
  16.    $coefiTempora = 2;
  17.    if($temporada == "baja")
  18.        $coefiTempora = 0;
  19.    if($temporada == "media")  
  20.        $coefiTempora = 1;
  21.      
  22.   $precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas;
  23.      
  24.   return $precioTotal ;    
  25. }
  26.  
  27. if($curso && $alojamiento &&  $semanas && $temporada)
  28. echo calculoPrecios($curso, $alojamiento, $semanas, $temporada);
  29.  
  30. ?>


Saludos
  #20 (permalink)  
Antiguo 25/04/2011, 12:17
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Hola Esnola...

Te explico, puse el nombre de los campos de tal forma (field1[]), ya que leí por ahí que poniéndolos así se pasaba como array y luego se podrían recorrer sin problemas con php. La verdad es que no habría caido en lo de los nombres. Muchas gracias.

Estaba pensando en añadir un calendario para seleccionar las temporadas, me recomiendas que lo haga con php, o con javascript??

Gracias de nuevo por todo

un cordial saludo!!
  #21 (permalink)  
Antiguo 25/04/2011, 16:19
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Cita:
Iniciado por carlos2 Ver Mensaje
Estaba pensando en añadir un calendario para seleccionar las temporadas, me recomiendas que lo haga con php, o con javascript??
Bueno, eso ya es cuestión de cada uno, yo javascript ya no domino y php poco.
Saludos
  #22 (permalink)  
Antiguo 29/04/2011, 06:58
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Hola de nuevo Esnola, a ver si me puedes echar una manilla con esto... espero no estar abusando de tu cordialidad...

Me gustaría añadir al formulario de calculo algunos campos para datos personales y enviarlos por e-mail... El problema me surge porque ahora en el mismo formulario tengo dos botones, uno para calcular y otro para enviar... Si le doy al de calcular, intento meter el resultado en un campo de texto para que el usuario lo vea, pero me envía directamente a la página de agradecimiento. El mail lo envía correctamente con todos los campos excepto con el del precio....

Sabes dónde puedo estar fallando?? Te dejo el código que tengo montado...

el html

Código HTML:
<table width="50%" border="0">

<form action="formB.php" method="post">
  <tr>
    <td><label>Nombre:</label></td>
    <td><input id="nombre" class="inputForm" name="nombre" type="text" /></td>
  </tr>
  <tr>
    <td><label>Teléfono:</label></td>
    <td><input id="telefono" class="inputForm" name="telefono" type="text" /> </td>
  </tr>
  <tr>
    <td><label>E-mail:</label></td>
    <td><input id="email" class="inputForm" name="email" type="text" /> </td>
  </tr>
  <tr>
    <td><label>Tipo de curso:</label></td>
    <td><select id="field1" name="curso"><option>Elige tipo de curso</option> <option value="basico">Curso Básico (20 clases, por semana, de 45 minutos cada una)</option> <option value="intensivo">Curso Intensivo (30 clases, por semana, de 45 minutos cada una)</option> </select></td>
  </tr>
  <tr>
    <td><label>Tipo de alojamiento:</label></td>
    <td><select id="field2" name="alojamiento"><option>Elige tipo de alojamiento</option> <option value="compartido">Compartido (Habitación compartida de 2 ó 3 personas)</option> <option value="individual">Individual (Habitación individual)</option> <option value="sinalojamiento">Sin alojamiento</option> </select></td>
  </tr>
  <tr>
    <td><label>Número de semanas:</label></td>
    <td><input id="field3" class="semanas" name="semanas" size="20" type="text" /></td>
  </tr>
  <tr>
    <td><label>Fecha de reserva:</label></td>
    <td><select id="field4" name="temporada"> <option>Elige la fecha de llegada</option> <option value="baja">Temporada baja (Del 01/01/2011 al 31/05/2011)</option> <option value="media">Temporada Media (Del 01/09/2011 al 31/12/2011)</option> <option value="alta">Temporada Alta (Del 01/06/2011 al 30/08/2011)</option> </select></td>
  </tr>
  <tr>
    <td><input class="inputForm3" name="enviar" type="submit" value="Calcula el precio de tu curso" /></td>
    <td><input type="text" value="<?php echo $_GET["resultado"]?>" size="20"  name="Total" id="Total" readonly="readonly"/></td>
  </tr>
  <tr>
    <td><label>Deja tu comentario:</label></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Caja comentario</td>
    <td><textarea id="mensaje" class="inputForm2" name="mensaje"></textarea></td>
  </tr>
  <tr>
    <td>Haz la reserva</td>
    <td><input class="inputForm3" name="enviar" type="submit" value="Enviar reserva" /></td>
  </tr>
 </form>
</table> 
y en el php...

Código PHP:

<?php 

/*el script para el calculo*/

$precioalojamiento=0;
$preciocurso=0;
$total=0;
$curso=$_POST['curso'];
$alojamiento=$_POST['alojamiento'];
$semanas=$_POST['semanas'];
$temporada=$_POST['temporada'];


function 
calculoPrecios($tipo$alojamiento$semanas$temporada){
   
$precioCurso = array('basico' => array('130' '320' '510'),
                           
'intensivo' => array('190' '470' '695'));
   
$precioAlojamiento  = array('compartido' => array('100' '300' '450'),
                           
'individual' => array('210' '370' '580'));
 
   
$coefiTempora 2;
   if(
$temporada == "baja")
       
$coefiTempora 0;
   if(
$temporada == "media")  
       
$coefiTempora 1;
      
  
$precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas;
      
  return 
$precioTotal ;    
}

/*supuestamente esto es para mostrar el calculo en el campo de texto que he preparado para ello*/

header("Location: formB.html?resultado=$precioTotal");

/* este el script para el envio del mail*/

$mail='[email protected]'

$precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas;
$nombre $_POST['nombre']; 
$telefono $_POST['telefono']; 
$email $_POST['email'];

$mensaje $_POST['mensaje']; 

$thank="gracias.html"


$message 
nombre:"
.$nombre.
telefono:"
.$telefono.
email:"
.$email.
curso:"
.$curso."
alojamiento:"
.$alojamiento."
semanas:"
.$semanas."
temporada:"
.$temporada."
precio:"
.$precioTotal."
mensaje:"
.$mensaje."
"




if (
mail($mail,"Mail recibido",$message)) 
Header ("Location: $thank" ); 


?>
Muchas gracias por tu tiempo!!!
  #23 (permalink)  
Antiguo 30/04/2011, 20:33
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Código PHP:
header("Location: formB.html?resultado=$precioTotal");

/* este el script para el envio del mail*/

$mail='[email protected]'

////ESTO ADEMÁS ESTÁ MAL ///
/*
$precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas;*/
//Tendría que ser
$precioTotal=calculoPrecios($curso$alojamiento$semanas$temporada);
//Y tendría que ir antes de header("Location..... 
Mira en eso de arriba, en principio ya estás tomando el valor de la variable $precioTotal antes de calcularlo.

Otra cosa, tienes que decirle al script como diferenciar lo que tiene que hacer según la info que recoja:
CAMBIA:
Código HTML:
Ver original
  1. <td><input class="inputForm3" name="enviar" type="submit" value="Calcula el precio de tu curso" /></td>

POR

Código HTML:
Ver original
  1. <td><input class="inputForm3" name="calcula" type="submit" value="Calcula el precio de tu curso" /></td>
También tienes que volver a enviar todas las variables para que pueda tomarlas en la segunda vez que envías con el botón "Reservar".
A mi entender tendría que ser (todo el php):
Código PHP:
Ver original
  1. <?php
  2.  
  3. /*el script para el calculo*/
  4.  
  5. $precioalojamiento=0;
  6. $preciocurso=0;
  7. $total=0;
  8. $curso=$_POST['curso'];
  9. $alojamiento=$_POST['alojamiento'];
  10. $semanas=$_POST['semanas'];
  11. $temporada=$_POST['temporada'];
  12.  
  13.  
  14. function calculoPrecios($tipo, $alojamiento, $semanas, $temporada){
  15.    $precioCurso = array('basico' => array('130' , '320' , '510'),
  16.                            'intensivo' => array('190' , '470' , '695'));
  17.    $precioAlojamiento  = array('compartido' => array('100' , '300' , '450'),
  18.                            'individual' => array('210' , '370' , '580'));
  19.  
  20.    $coefiTempora = 2;
  21.    if($temporada == "baja")
  22.        $coefiTempora = 0;
  23.    if($temporada == "media")  
  24.        $coefiTempora = 1;
  25.      
  26.   $precioTotal=($precioCurso[$tipo][$coefiTempora]+$precioAlojamiento[$alojamiento][$coefiTempora])*$semanas;
  27.      
  28.   return $precioTotal ;    
  29. }
  30.  
  31. /*supuestamente esto es para mostrar el calculo en el campo de texto que he preparado para ello*/
  32. $precioTotal=calculoPrecios($curso, $alojamiento, $semanas, $temporada);
  33.  
  34. $calcular = $_POST['calcula'];
  35. if($calcular){
  36.   header("Location: formB.html?resultado=$precioTotal&alojamiento=$alojamiento&semanas=$semanas&temporada=$temporada&curso=$curso&accion=calculado");    
  37.  }
  38.  else
  39.  {
  40.   /* este el script para el envio del mail*/
  41.  
  42.  $mail='[email protected]';
  43.  
  44.  
  45.  $nombre = $_POST['nombre'];
  46.  $telefono = $_POST['telefono'];
  47.  $email = $_POST['email'];
  48.  
  49.  $mensaje = $_POST['mensaje'];
  50.  
  51.  $thank="gracias.html";
  52.  
  53.  $message = "
  54. nombre:".$nombre."
  55. telefono:".$telefono."
  56. email:".$email."
  57. curso:".$curso."
  58. alojamiento:".$alojamiento."
  59. semanas:".$semanas."
  60. temporada:".$temporada."
  61. precio:".$precioTotal."
  62. mensaje:".$mensaje."
  63. ";
  64.  
  65.  
  66.  if (mail($mail,"Mail recibido",$message))
  67.        Header ("Location: $thank" );  
  68.    
  69. }
  70.  
  71. ?>

Te he retocado un poco el html, aunque no todo, tienes que ajustarlo.
Código HTML:
Ver original
  1. <table width="50%" border="0">
  2.  
  3. <form action="formB.php" method="post">
  4.   <tr>
  5.     <td><label>Nombre:</label></td>
  6.     <td><input id="nombre" class="inputForm" name="nombre" type="text" /></td>
  7.   </tr>
  8.   <tr>
  9.     <td><label>Teléfono:</label></td>
  10.     <td><input id="telefono" class="inputForm" name="telefono" type="text" /> </td>
  11.   </tr>
  12.   <tr>
  13.     <td><label>E-mail:</label></td>
  14.     <td><input id="email" class="inputForm" name="email" type="text" /> </td>
  15.   </tr>
  16.   <tr>
  17.  
  18.     <td><label>Tipo de curso:</label></td>
  19.     <?php  
  20.     if($_GET['accion']){
  21.        echo '<td>'.$_GET['curso'].'</td>';            
  22.      }
  23.      else{
  24.        echo '<td><select id="field1" name="curso"><option>Elige tipo de curso</option> <option value="basico">Curso Básico (20 clases, por semana, de 45 minutos cada una)</option> <option value="intensivo">Curso Intensivo (30 clases, por semana, de 45 minutos cada una)</option> </select></td>';    
  25.      }
  26.      ?>
  27.     </tr>
  28.   <tr>
  29.     <td><label>Tipo de alojamiento:</label></td>
  30.    
  31.         <?php  
  32.     if($_GET['accion']){
  33.        echo '<td>'.$_GET['alojamiento'].'</td>';            
  34.      }
  35.      else{
  36.       echo '<td><select id="field2" name="alojamiento"><option>Elige tipo de alojamiento</option> <option value="compartido">Compartido (Habitación compartida de 2 ó 3 personas)</option> <option value="individual">Individual (Habitación individual)</option> <option value="sinalojamiento">Sin alojamiento</option> </select></td>';
  37.      }
  38.      ?>
  39.    
  40.   </tr>
  41.   <tr>
  42.     <td><label>Número de semanas:</label></td>
  43.     <td><input id="field3" class="semanas" name="semanas" size="20" type="text" /></td>
  44.   </tr>
  45.   <tr>
  46.     <td><label>Fecha de reserva:</label></td>
  47.     <td><select id="field4" name="temporada"> <option>Elige la fecha de llegada</option> <option value="baja">Temporada baja (Del 01/01/2011 al 31/05/2011)</option> <option value="media">Temporada Media (Del 01/09/2011 al 31/12/2011)</option> <option value="alta">Temporada Alta (Del 01/06/2011 al 30/08/2011)</option> </select></td>
  48.   </tr>
  49.   <tr>
  50.     <td><input class="inputForm3" name="calcula" type="submit" value="Calcula el precio de tu curso" /></td>
  51.    
  52.     <td><input type="text" value="<?php echo $_GET["resultado"]?>" size="20"  name="Total" id="Total" readonly="readonly"/></td>
  53.   </tr>
  54.   <tr>
  55.     <td><label>Deja tu comentario:</label></td>
  56.     <td>&nbsp;</td>
  57.   </tr>
  58.   <tr>
  59.     <td>Caja comentario</td>
  60.     <td><textarea id="mensaje" class="inputForm2" name="mensaje"></textarea></td>
  61.   </tr>
  62.   <tr>
  63.     <td>Haz la reserva</td>
  64.     <td><input class="inputForm3" name="enviar" type="submit" value="Enviar reserva" /></td>
  65.   </tr>
  66.  </form>


No lo he probado, así que es muy fácil que tengas que hacer algunos retoques.
Saludos
  #24 (permalink)  
Antiguo 01/05/2011, 05:59
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Hola Esnola... muchas gracias por tu tiempo, ya sabes que te estoy muy agradecido a ti también...

El otro post que has visto lo puse porque el problema variaba al querer enviar un mail después de hacer todos los cálculos...

como ves, al final opté por hacer una parte con js y otra con php.... me resultó más fácil así,, pero sin tu ayuda al principio me hubiera costado mucho más..

Gracias de nuevo por todo, te debo una!! ;)
  #25 (permalink)  
Antiguo 01/05/2011, 06:14
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Ya no es solo que soluciones el problema de otra manera con js, si no mas bien que veas donde has tenido fallos y la manera de solucionarlos.

Saludos
  #26 (permalink)  
Antiguo 01/05/2011, 06:16
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: consultar precio de un array desde un select y calcular

Solo un dato @carlos2 deja de utilizar los nombres genericos generados de Dreamweaver en los nombres de campos, y emplea nombres descriptivos, si vas a pedir el email procura que el nombre del campos sea email, esto te ahorrará muchos dolores de cabeza en el futuro, si sigues utilizando nombres como field1, field2, después no sabrás que campo es de que cosa
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #27 (permalink)  
Antiguo 01/05/2011, 06:18
Avatar de ESNOLA  
Fecha de Ingreso: octubre-2006
Mensajes: 188
Antigüedad: 17 años, 6 meses
Puntos: 20
Respuesta: consultar precio de un array desde un select y calcular

Cita:
Iniciado por Nemutagk Ver Mensaje
Solo un dato @carlos2 deja de utilizar los nombres genericos generados de Dreamweaver en los nombres de campos, y emplea nombres descriptivos, si vas a pedir el email procura que el nombre del campos sea email, esto te ahorrará muchos dolores de cabeza en el futuro, si sigues utilizando nombres como field1, field2, después no sabrás que campo es de que cosa
Estoy totalmente de acuerdo
  #28 (permalink)  
Antiguo 01/05/2011, 06:50
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 78
Antigüedad: 13 años
Puntos: 3
Respuesta: consultar precio de un array desde un select y calcular

no tengo palabras es un genio metacortex
  #29 (permalink)  
Antiguo 01/05/2011, 09:11
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 18 años, 11 meses
Puntos: 2
Respuesta: consultar precio de un array desde un select y calcular

Hola a todos...

Esnola, al final opté por javascript porque, precisamente como dices, no acababa de localizar los fallos que estaba teniendo en php y opté por una solución alternativa... Luego de mucho revisar tu script en php, me quedó más claro el proceso, pero pensé que a la hora de hacer el cálculo sería mejor implementarlo con js, ya que realmente no necesitaba hacer una consulta al servidor para esta tarea. Muchas gracias de nuevo por toda tu ayuda..

Nemutagk, estos campos han sido cambiados para el formulario final. Estoy al tanto de lo que comentas e intento utilizar el mínimo código posible generado por Dreamweaver, gracias, aún así, por tu apunte. Creo que es muy constructivo.

joseppp, yo también lo creo.

Gracias, Esnola, de nuevo, por tu implicación en mi problema!!!

Saludos a todos!

Etiquetas: consultar, precio, select, calculadora
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 17:58.