0

I am creating a checkbox list, and I could like to calculate the price when the user checks on the box.

I have create a checkboxlist in the view part

<?php echo CHtml::checkboxList('cblist_addons','',
CHtml::listData(Addon::model()->findAll("car_type_id=1"),'id','concatenedLabel'),
array('separator'=>'','template'=>'{label}{input}','class'=>'cblist_addons'));?> 

This one works fine. But in the controller part, I would like to generate a string like [a, b, c]

$str_addons = "";

if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
foreach($_POST['cblist_addons'] as $addon) {
if ($addon.checked){
    $str_addons .= $addon.val(). ', ';  
}}
$str_addons = substr($str_addons, 0, -2); //to del the last comma
}


$criteria = new CDbCriteria();              
$criteria->select = 'price'; 
if ($str_addons != ''){
$criteria->condition = 'id in (:cblist_addons)';
$criteria->params = array(':cblist_addons'=> $str_addons) ;     
}
else{
$criteria->condition = 'id in (1,2,3,4) ';  //the path go into this else part with no error
}
$model_addons = Addon::model()-> findAll ($criteria);

Seems I am fail in getting the object from view part. I am newbie in yii and php I have just tried to solve this problem in few days so I hope anyone can help me.

Let me explain more. I am creating a checkboxlist and when I press the button or check the checkbox, an ajax function will be called and the price will be calculated and display in the view part.

1 Answer 1

1

You do not need to check like this

($addon.checked)

as $_POST['cblist_addons'] will only contain the values you have checked.

So you should change this

if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
foreach($_POST['cblist_addons'] as $addon) {
if ($addon.checked){
    $str_addons .= $addon.val(). ', ';  
}}
$str_addons = substr($str_addons, 0, -2); //to del the last comma
}

to

if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ) {
$str_addons = implode(',',$_POST['cblist_addons']);
}

You can join all the values in an array separated with comma using implode

Now in your criteria you are using this

$criteria->condition = 'id in (:cblist_addons)';

But You can add In condition using criteria like this

$criteria->addInCondition($column, $values);

Where $column is the name of the column and $values is the array of the values 

SO in short your overall code will look like this

    $criteria = new CDbCriteria();              
    $criteria->select = 'price'; 
    if(isset($_POST['cblist_addons']) && !empty($_POST['cblist_addons']) ){
    $criteria->addInCondition('id', $_POST['cblist_addons']);
    } else{
    $criteria->addInCondition('id', array(1,2,3,4));
    }
$model_addons = Addon::model()-> findAll ($criteria);

Second thing:-

In php you do not access properties of an object using . (dot). You will have to use -> for that.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for your advise. But there is a problem that I still cant get anything from $_POST['cblist_addons'] The string is still blank.Is there any problem of my checkboxlist?
It will drop into the else part even I have checked in the checkboxlist.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.