проверка цены на торт - PullRequest
       1

проверка цены на торт

0 голосов
/ 14 сентября 2011

У меня есть матрица полей ввода, которые содержат цены на даты. Если в базе данных нет цены на конкретную дату, в поле ввода отображается 0. У меня есть следующий код, который сохраняет в базе данных цены, введенные в поля ввода. Не сохраняются все значения 0, только новые цены.

Что хорошо. Однако теперь я обнаружил проблему. Если один из входных данных отображает значение из базы данных, скажем, $ 10, и я хочу установить его сейчас на 0, код не будет этого делать.

Это сохранит только в том случае, если значения и выше 0. Я не смог сделать эту последнюю проверку.

Условия для сохранения 1. Если значение числовое 2. Если он равен 0 и уже имеет запись в базе данных, сохраните 3. Если оно не имеет значения в базе данных и больше 0 4. Если оно равно 0 и не имеет значения в базе данных, не сохраняйте

        if (isset($this->data['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

1 Ответ

1 голос
/ 14 сентября 2011

Ваша проблема в

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

здесь вы указываете, что $ values_for_today должно быть> 0, поэтому, если у вас была цена и вы хотите установить ее сегодня на 0, вы ничего не будете делать ... Вы должны использовать

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

если вы измените его, он теперь войдет в if и выполнит изменение.

Я полагаю, что вы НЕ используете функцию запроса, за исключением случаев, когда это крайне необходимо. Вы должны создать модель для цены (если вы еще этого не сделали), а затем использовать ассоциации (hasMany, HasOne, HABTM) или загрузить модель непосредственно в контроллер с помощью $ this-> loadModel ('Price'). Затем используйте find 'all' как всегда с условиями и полями. Эта рекомендация состоит в том, чтобы использовать торт по назначению, а не обязательно. Также можно выполнить сохранение, поле обновления, чтение, если вы сделаете это ... оставив чеки и все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...