开发者

cakephp price check

开发者 https://www.devze.com 2023-04-04 20:38 出处:网络
I have a matrix of inputs boxes which contain prices for dates. If there is no price in the database for a particular date the input box displays 0. I have the following code which saves into the data

I have a matrix of inputs boxes which contain prices for dates. If there is no price in the database for a particular date the input box displays 0. I have the following code which saves into the database the prices typed into the input boxes. It does not save all the 0 values only the new prices.

Which is fine. However I have now discovered an issue. If one of the inputs dislays a value from the database, say $10 and I want to set it now to 0, the code will not do it.

It will only save if the values and above 0. I have not been able to do this final check.

The conditions for saving are 1. If the value is numeric 2. If it is 0 and already has an entry in the database then save 3. If it has no value in the database and is greater than 0 4. If it is 0 and has no value in the database then do not save

        if (isset($this->data开发者_StackOverflow中文版['Rate'])){

            // for each rate
            foreach($this->data['Rate'] as $rate_id => $room){

                    // for each room type           
                    foreach($room as $room_id => $room){

                        $price_for_today = isset($room['Price'][$key]) ? $room['Price'][$key] : 0;

                        // get existing availabilities is num (get this from previous date loop)
                        $today = ''.$date.' 00:00:00';          
                        $conditions = array('Availability.date' => $today,'Availability.room_id'=>$room_id);
                        $this->Availability->contain();         
                        $result = $this->Availability->find('all',array('order'=>'Availability.room_id ASC', 'conditions'=>$conditions));
                        $avail_id = $result[0]['Availability']['id'];

                        // check prices
                        $check_prices = "SELECT * FROM prices 
                                WHERE rate_id = '".$rate_id."' AND availability_id = '".$avail_id."'";
                        $prices_result = $this->Availability->query($check_prices);

                        // if new prices > 0.00
                        if($price_for_today>0 && is_numeric($price_for_today)){
                            // better checking needed!
                            if($prices_result){
                                    $setprices = "UPDATE prices SET price = '".$price_for_today."'  
                                    WHERE rate_id = '".$rate_id."' AND availability_id = '".$avail_id."'";
                                    $update = $this->Availability->query($setprices);
                            } else {
                                    $setprices = "INSERT INTO prices (price, availability_id, rate_id) 
                                    VALUES ('".$price_for_today."', '".$avail_id."', '".$rate_id."')";
                                    $insert = $this->Availability->query($setprices);           
                            }
                        }

                        //$errors[] = $setprices;

                    } // end rooms loop

            } // end Rates loop


Your problem is in

> // if new prices > 0.00
>                         if($price_for_today>0 &&
> is_numeric($price_for_today)){

here you specify that $prices_for_today have to be >0, so if you had a price and want to put it 0 today then you will not do anything... You should use

if(($price_for_today>0 && is_numeric($price_for_today)) || (!empty($prices_result) && $price_for_today==0 && is_numeric($price_for_today))){

if you change it it will now enter in the if and do the change.

I sugest that you do NOT use the query function unless is extremely necesary. you should create a model for price (if you haven't done that already) and then use the associations (hasMany, HasOne, HABTM) or load the model directly in the controller with $this->loadModel('Price'). Then use a find 'all' as always with conditions and fields. This recomendation is to use cake as it was intended, not indispensable. Also the save, updatefield, read can be done if you do this... leaving the checks and everything to cake.

0

精彩评论

暂无评论...
验证码 换一张
取 消