Como Resolverian Esto?

Amigos, tengo 3 dropDawnList en los cuales su value es el precio de cada elemento

Necesito sumar los 3 en otro campo diferente dinamicamente, osea que apenas seleccione uno muestre el precio si selecciono el otro suma el precio anterior con el nuevo y asi.

lo estaba haciendo de esta forma con ajax, parecido a los dropDawnList dependientes.

en la vista tengo:




     <?php $htmlOptionsCombo=array(

                'empty'=>'Seleccione un combo',

                'ajax'=>array(

                    'url'=>$this->createUrl("getSumaTotal"),

                    'type'=>"POST",

                    'update'=>"#OrdenDeTrabajo_precio_total"));?>


	<div class="row">

		<?php echo $form->labelEx($model,'Combo'); ?>

		<?php echo $form->dropDownList($model,'id_combo',$model->getMenuCombos(),$htmlOptionsCombo); ?>

		<?php echo $form->error($model,'id_combo'); ?>

	</div>




y en el controlador




public function actionGetSumaTotal()

        {

            $precioFin_parametro=0;

            $precioFin_perfil=0;

            $precioFin_combo=0;

            

            $a=0;

            $b=0;

            $c=0;

            

            if(isset($_POST['OrdenDeTrabajo']['id_parametro'])){

            $id_parametro = $_POST['OrdenDeTrabajo']['id_parametro'];

            $a=1;

            }

            if(isset($_POST['OrdenDeTrabajo']['id_perfil'])){

            $id_perfil = $_POST['OrdenDeTrabajo']['id_perfil'];

            $b=1;

            }

            if(isset($_POST['OrdenDeTrabajo']['id_combo'])){

            $id_combo = $_POST['OrdenDeTrabajo']['id_combo'];

            $c=1;

            }

            

            if(isset($id_parametro) && $a == 1){

                $sqlparam="select precio from parametro where id_parametro = $id_parametro"; 

                $precio_parametro= Yii::app()->db->createCommand($sqlparam)->queryScalar();

                $precioFin_parametro=$precio_parametro;

            }

            if(isset($id_perfil)&& $b == 1){

                $sqlperfil="select precio from perfil where id_perfil = $id_perfil";

                 $precio_perfil= Yii::app()->db->createCommand($sqlperfil)->queryScalar();

                $precioFin_perfil=$precio_perfil;

            }

               if(isset($id_combo)&& $c == 1){

                  $sqlcombo="select precio from combo where id_combo = $id_combo";

                  $precio_combo= Yii::app()->db->createCommand($sqlcombo)->queryScalar();

                $precioFin_combo=$precio_combo;

            }

            

            $precio_total=$precioFin_parametro + $precioFin_perfil + $precioFin_combo;

            

            echo "<option value=\"{$precio_total}\">{$precio_total}</option>";

            

             }



no me funciona y me da un error como este

CDbException

CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ at line 1. The SQL statement executed was: select precio from perfil where id_perfil = (C:\wamp\www\yii\framework\db\CDbCommand.php:543)

Hola

El error creo que te llega el $_POST[‘OrdenDeTrabajo’][‘id_perfil’] con valor vacío, haz un var_dump del _POST y mira los valores que te llegan.

De todas maneras es necesario hacer ajax si tienes los precios en el option de los select??

vamos si te aseguras que ese precio este con punto para los decimales y que no tenga comas para que javascript no se vuelva loco y sea más fácil … puedes hacer que los 3 combos tengan la misma clase y si un elemento de esa clase cambia sumar los valores de los 3 combos poniendo el resultado en un textbox o donde sea, algo así:




<script type="text/javascript">

$(document).ready(function() {

	var suma;

	$(".combosPrecio").change(function(){

		suma = parseFloat($("#combo1").val());

		suma += parseFloat($("#combo2").val());

		suma += parseFloat($("#combo3").val());

	  $("#totalPrecio").val(suma.toFixed(2));

	});

});

</script>



El ajax lo entendería si los precios cambiasen mucho,sino creo que no es necesario.

Amigo lo resolvi mas o menos de la misma forma que lo tenia, el error que me daba era xq realizaba igual la consulta y aun no le pasaba el otro valor del combo ya que puedo elegir solo 1 o los 3, al final valide que existiera esa variable antes de entrar a la ejecución :P, utilice ajax de la misma forma en que se hacen los dropDawnList dependientes.

Muchas gracias amigo, provare tu forma de hacerlo tambien para hacerlo de otra forma.