У меня есть матрица полей ввода, которые содержат цены на даты. Если в базе данных нет цены на конкретную дату, в поле ввода отображается 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